[debian-edu-commits] debian-edu/sankore.git (#3) - upstream (branch) updated: upstream/2.00_git20130309-1-g67e49c3
Mike Gabriel
sunweaver at alioth.debian.org
Sun May 5 11:29:37 UTC 2013
The branch, upstream has been updated
via 67e49c34fa999f794cea28c198c7b6c149f4391e (commit)
from 9f23d3b62f5eac05557c2d3e6109d7c1f7915f30 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
Sankore-3.1/C++StandardHeaderFile.txt | 21 +
Sankore-3.1/COPYING | 1113 ++---
Sankore-3.1/JournalDesModifications.pdf | Bin 675820 -> 799163 bytes
Sankore-3.1/LICENSE.txt | 687 +++
Sankore-3.1/ReleaseNotes.pdf | Bin 893897 -> 374842 bytes
Sankore-3.1/Sankore_3.1.pro | 38 +-
Sankore-3.1/buildDebianPackage.sh | 7 +-
Sankore-3.1/lgplC++StandardHeaderFile.txt | 22 -
.../plugins/cffadaptor/src/UBCFFAdaptor.cpp | 5 +-
Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor.h | 17 +-
.../plugins/cffadaptor/src/UBCFFAdaptor_global.h | 17 +-
.../plugins/cffadaptor/src/UBCFFConstants.h | 17 +-
Sankore-3.1/plugins/cffadaptor/src/UBGlobals.h | 17 +-
Sankore-3.1/release.macx.sh | 17 +-
Sankore-3.1/release.win7.vc9.64.bat | 74 -
Sankore-3.1/release.win7.vc9.bat | 7 +-
.../resources/etc/Tutorial/tutorial_en/index.html | 6 +-
.../resources/etc/Tutorial/tutorial_fr/index.html | 6 +-
Sankore-3.1/resources/etc/Uniboard.css | 5 +
Sankore-3.1/resources/forms/documents.ui | 49 +-
Sankore-3.1/resources/forms/mainWindow.ui | 114 +-
Sankore-3.1/resources/forms/preferences.ui | 2930 +++++++-----
Sankore-3.1/resources/i18n/sankore_ar.ts | 1254 +++---
Sankore-3.1/resources/i18n/sankore_bg.ts | 1709 +++-----
Sankore-3.1/resources/i18n/sankore_ca.ts | 1802 +++-----
Sankore-3.1/resources/i18n/sankore_co.ts | 3407 +++++++++++++
Sankore-3.1/resources/i18n/sankore_cs.ts | 1227 +++---
Sankore-3.1/resources/i18n/sankore_da.ts | 1727 +++-----
Sankore-3.1/resources/i18n/sankore_de.ts | 1288 +++---
Sankore-3.1/resources/i18n/sankore_el.ts | 1542 +++----
Sankore-3.1/resources/i18n/sankore_en.ts | 1330 +++---
Sankore-3.1/resources/i18n/sankore_en_UK.ts | 1330 +++---
Sankore-3.1/resources/i18n/sankore_es.ts | 1351 +++---
Sankore-3.1/resources/i18n/sankore_eu.ts | 3965 +++++++++++++++
Sankore-3.1/resources/i18n/sankore_fr.ts | 1430 +++---
Sankore-3.1/resources/i18n/sankore_fr_CH.ts | 1430 +++---
Sankore-3.1/resources/i18n/sankore_hi.ts | 3374 +++++++++++++
Sankore-3.1/resources/i18n/sankore_it.ts | 1242 +++---
Sankore-3.1/resources/i18n/sankore_iw.ts | 1234 +++---
Sankore-3.1/resources/i18n/sankore_ja.ts | 1486 +++----
Sankore-3.1/resources/i18n/sankore_ko.ts | 1508 +++---
Sankore-3.1/resources/i18n/sankore_mg.ts | 1795 +++-----
Sankore-3.1/resources/i18n/sankore_nb.ts | 1236 +++---
Sankore-3.1/resources/i18n/sankore_nl.ts | 1321 +++---
Sankore-3.1/resources/i18n/sankore_pl.ts | 1233 +++---
Sankore-3.1/resources/i18n/sankore_pt.ts | 1451 +++---
Sankore-3.1/resources/i18n/sankore_ro.ts | 1235 +++---
Sankore-3.1/resources/i18n/sankore_ru.ts | 1214 +++---
Sankore-3.1/resources/i18n/sankore_sk.ts | 1721 +++-----
Sankore-3.1/resources/i18n/sankore_sv.ts | 1226 +++---
Sankore-3.1/resources/i18n/sankore_tr.ts | 1796 +++-----
Sankore-3.1/resources/i18n/sankore_zh.ts | 1334 +++---
Sankore-3.1/resources/i18n/sankore_zh_CN.ts | 1233 +++---
Sankore-3.1/resources/i18n/sankore_zh_TW.ts | 1661 +++----
Sankore-3.1/resources/images/circle.svg | 11 +
.../images/createLinkPalette/LinkPage.svg | 113 +
.../resources/images/createLinkPalette/LinkWeb.svg | 395 ++
.../images/createLinkPalette/PlayAudio.svg | 409 ++
.../images/libpalette/BookmarkCategory.svg | 427 ++
.../resources/images/libpalette/bookmarkIcon.svg | 400 ++
Sankore-3.1/resources/images/roundeRrectangle.svg | 10 +
Sankore-3.1/resources/images/teacher_close.png | Bin 1043 -> 1464 bytes
.../resources/images/teacher_close_disabled.png | Bin 1043 -> 0 bytes
Sankore-3.1/resources/images/teacher_open.png | Bin 1034 -> 1464 bytes
.../resources/images/teacher_open_disabled.png | Bin 1030 -> 0 bytes
Sankore-3.1/resources/images/toolbar/bookmark.png | Bin 0 -> 5991 bytes
Sankore-3.1/resources/images/toolbar/bookmark.svg | 377 ++
.../images/trapFlashPalette/downloadToBoard.svg | 57 +
.../images/trapFlashPalette/downloadToLibrary.svg | 136 +
.../images/trapFlashPalette/linkToBoard.svg | 83 +
.../images/trapFlashPalette/linkToLibrary.svg | 162 +
.../images/trapFlashPalette/trappedFlashIcon.svg | 65 +
.../images/trapFlashPalette/trappedIcon.svg | 316 ++
.../images/trapFlashPalette/trappedSoundIcon.svg | 95 +
.../images/trapFlashPalette/trappedVideoIcon.svg | 59 +
.../library/applications/Wikipedia.wgt/config.xml | 34 +-
.../library/applications/Wikipedia.wgt/index.html | 751 ++--
.../applications/Wiktionnaire.wgt/config.xml | 34 +-
.../applications/Wiktionnaire.wgt/index.html | 762 ++--
.../interactivities/Ass images.wgt/config.xml | 34 +-
.../interactivities/Ass images.wgt/index.html | 87 +-
.../interactivities/Ass images.wgt/js/script.js | 816 ----
.../{ => locales/en}/img/drop_img.png | Bin 1618 -> 1618 bytes
.../Ass images.wgt/locales/en/index.html | 60 +
.../Ass images.wgt/locales/en/js/script.js | 806 +++
.../Ass images.wgt/locales/fr/js/script.js | 88 +-
.../Ass images.wgt/locales/ru/js/script.js | 71 +-
.../interactivities/Ass sons.wgt/config.xml | 33 +-
.../interactivities/Ass sons.wgt/css/basic.css | 939 ++--
.../interactivities/Ass sons.wgt/index.html | 80 +-
.../interactivities/Ass sons.wgt/js/script.js | 923 ----
.../Ass sons.wgt/{ => locales/en}/img/drop_img.png | Bin 1618 -> 1618 bytes
.../Ass sons.wgt/locales/en/index.html | 60 +
.../Ass sons.wgt/locales/en/js/script.js | 918 ++++
.../Ass sons.wgt/locales/fr/js/script.js | 145 +-
.../Ass sons.wgt/locales/ru/js/script.js | 124 +-
.../interactivities/Balance.wgt/css/ubw-main.css | 307 +-
.../library/interactivities/Cadran.wgt/config.xml | 2 +-
.../interactivities/Cadran.wgt/css/main.css | 2 +-
.../interactivities/Cadran.wgt/css/ubw-main.css | 307 +-
.../library/interactivities/Cadran.wgt/index.html | 153 +-
.../interactivities/Cadran.wgt/js/help-template.js | 3 +-
.../library/interactivities/Calcul.wgt/config.xml | 2 +-
.../interactivities/Calcul.wgt/css/ubw-main.css | 308 +-
.../interactivities/Calcul.wgt/js/help-template.js | 2 +-
.../Calcul.wgt/js/help_fr-template.js | 2 +-
.../interactivities/Cat images.wgt/config.xml | 2 +-
.../interactivities/Cat images.wgt/index.html | 82 +-
.../interactivities/Cat images.wgt/js/script.js | 815 ----
.../Cat images.wgt/locales/en/index.html | 60 +
.../Cat images.wgt/locales/en/js/script.js | 811 ++++
.../Cat images.wgt/locales/fr/img/drop_img.png | Bin 1762 -> 0 bytes
.../Cat images.wgt/locales/fr/js/script.js | 149 +-
.../Cat images.wgt/locales/ru/img/drop_img.png | Bin 2196 -> 0 bytes
.../Cat images.wgt/locales/ru/js/script.js | 134 +-
.../interactivities/Cat text.wgt/config.xml | 4 +-
.../interactivities/Cat text.wgt/index.html | 82 +-
.../interactivities/Cat text.wgt/js/script.js | 750 ---
.../Cat text.wgt/locales/en/index.html | 60 +
.../Cat text.wgt/locales/en/js/script.js | 747 +++
.../Cat text.wgt/locales/fr/js/script.js | 110 +-
.../Cat text.wgt/locales/ru/js/script.js | 90 +-
.../library/interactivities/Choisir.wgt/config.xml | 4 +-
.../interactivities/Choisir.wgt/css/basic.css | 3 +
.../library/interactivities/Choisir.wgt/index.html | 86 +-
.../Choisir.wgt/locales/en/index.html | 59 +
.../locales/en/scripts/selQuestionApp.js | 792 +++
.../Choisir.wgt/locales/fr/index.html | 4 -
.../locales/fr/scripts/selQuestionApp.js | 91 +-
.../locales/ru/scripts/selQuestionApp.js | 78 +-
.../Choisir.wgt/scripts/selQuestionApp.js | 793 ---
.../interactivities/Contraste.wgt/config.xml | 2 +-
.../interactivities/Contraste.wgt/css/basic.css | 13 +-
.../interactivities/Contraste.wgt/index.html | 86 +-
.../Contraste.wgt/locales/en/index.html | 66 +
.../{ => locales/en}/scripts/blackYellow.js | 0
.../Contraste.wgt/locales/fr/index.html | 2 +-
.../Contraste.wgt/locales/ru/index.html | 2 +-
.../interactivities/Des.wgt/js/help-template.js | 2 +-
.../interactivities/Des.wgt/js/help_fr-template.js | 2 +-
.../interactivities/Des.wgt/js/templates.js | 1 +
.../interactivities/Enveloppe.wgt/config.xml | 6 +-
.../interactivities/Enveloppe.wgt/css/ubw-main.css | 627 ++--
.../interactivities/Enveloppe.wgt/js/templates.js | 62 +-
.../library/interactivities/Etudier.wgt/config.xml | 2 +-
.../library/interactivities/Etudier.wgt/index.html | 86 +-
.../interactivities/Etudier.wgt/js/script.js | 686 ---
.../Etudier.wgt/locales/en/index.html | 64 +
.../Etudier.wgt/locales/en/js/script.js | 686 +++
.../library/interactivities/Memory.wgt/config.xml | 6 +-
.../interactivities/Ordre images.wgt/config.xml | 2 +-
.../interactivities/Ordre images.wgt/index.html | 82 +-
.../interactivities/Ordre images.wgt/js/script.js | 571 ---
.../{ => locales/en}/img/drop_img.png | Bin 1618 -> 1618 bytes
.../Ordre images.wgt/locales/en/index.html | 61 +
.../Ordre images.wgt/locales/en/js/script.js | 565 +++
.../Ordre images.wgt/locales/fr/js/script.js | 123 +-
.../Ordre images.wgt/locales/ru/js/script.js | 102 +-
.../interactivities/Ordre lettres.wgt/config.xml | 4 +-
.../interactivities/Ordre lettres.wgt/index.html | 82 +-
.../interactivities/Ordre lettres.wgt/js/script.js | 566 ---
.../Ordre lettres.wgt/locales/en/index.html | 60 +
.../Ordre lettres.wgt/locales/en/js/script.js | 564 +++
.../Ordre lettres.wgt/locales/fr/js/script.js | 107 +-
.../Ordre lettres.wgt/locales/ru/js/script.js | 94 +-
.../objects/{beep.mp3 => example_en.mp3} | Bin 5570 -> 5570 bytes
.../objects/exemple.mp3 => objects/example_fr.mp3} | Bin 6302 -> 6302 bytes
.../objects/example.mp3 => objects/example_ru.mp3} | Bin 4630 -> 4630 bytes
.../interactivities/Ordre mots.wgt/config.xml | 2 +-
.../interactivities/Ordre mots.wgt/index.html | 88 +-
.../Ordre mots.wgt/locales/{fr => en}/index.html | 0
.../Ordre mots.wgt/locales/en/scripts/template2.js | 435 ++
.../Ordre mots.wgt/scripts/template2.js | 435 --
.../interactivities/Ordre phrase.wgt/config.xml | 4 +-
.../interactivities/Ordre phrase.wgt/index.html | 90 +-
.../Ordre phrase.wgt/locales/en/index.html | 68 +
.../{scripts => locales/en/script}/template2.js | 0
.../interactivities/Selectionner.wgt/config.xml | 4 +-
.../interactivities/Selectionner.wgt/index.html | 82 +-
.../interactivities/Selectionner.wgt/js/script.js | 563 ---
.../Selectionner.wgt/locales/en/index.html | 60 +
.../Selectionner.wgt/locales/en/js/script.js | 559 +++
.../Selectionner.wgt/locales/fr/js/script.js | 99 +-
.../Selectionner.wgt/locales/ru/js/script.js | 82 +-
.../interactivities/Separe phrase.wgt/config.xml | 2 +-
.../interactivities/Separe phrase.wgt/index.html | 83 +-
.../locales/{fr => en}/index.html | 0
.../{ => locales/en}/scripts/wcontainer.js | 0
.../locales/fr/scripts/wcontainer.js | 6 +-
.../interactivities/Separe texte.wgt/config.xml | 2 +-
.../interactivities/Separe texte.wgt/index.html | 90 +-
.../Separe texte.wgt/locales/{fr => en}/index.html | 0
.../locales/en/scripts/wcontainer.js | 207 +
.../locales/fr/scripts/wcontainer.js | 6 +-
.../Separe texte.wgt/scripts/wcontainer.js | 207 -
.../interactivities/Syllabes.wgt/config.xml | 2 +-
.../interactivities/Syllabes.wgt/index.html | 91 +-
.../Syllabes.wgt/locales/en/index.html | 69 +
.../Syllabes.wgt/locales/en/scripts/wcontainer.js | 205 +
.../Syllabes.wgt/locales/fr/scripts/wcontainer.js | 6 +-
.../Syllabes.wgt/scripts/wcontainer.js | 205 -
.../interactivities/Tables.wgt/css/ubw-main.css | 1 +
.../interactivities/Train.wgt/css/ubw-main.css | 307 +-
.../interactivities/Transformation.wgt/config.xml | 30 +-
.../Transformation.wgt/css/ubw-main.css | 627 ++--
.../interactivities/Transformation.wgt/help.html | 116 +-
.../Transformation.wgt/images}/boeuf.png | Bin 25631 -> 25631 bytes
.../Transformation.wgt/images}/coq.png | Bin 32494 -> 32494 bytes
.../Transformation.wgt/images}/poule.png | Bin 12798 -> 12798 bytes
.../Transformation.wgt/images}/vache.png | Bin 15973 -> 15973 bytes
.../interactivities/Transformation.wgt/index.html | 78 +-
.../Transformation.wgt/js/lib/ubw-main.js | 478 +-
.../interactivities/Transformation.wgt/js/main.js | 31 +-
.../Transformation.wgt/js/templates.js | 48 +-
.../config.xml | 0
.../css/basic.css | 0
.../search/Application Planete.wgs/icon.png | Bin 0 -> 7959 bytes
.../Application Planete.wgs/icon.thumbnail.png | Bin 0 -> 7959 bytes
.../images/down.png | Bin 1192 -> 1192 bytes
.../images/greySquare.png | Bin 214 -> 214 bytes
.../Application Planete.wgs}/images/icon-close.png | Bin 1507 -> 1507 bytes
.../images/popupBack.png | Bin 931 -> 931 bytes
.../images/search.png | Bin 1797 -> 1797 bytes
.../images/search_app.png | Bin 1104 -> 1104 bytes
.../images/thumbnail_icon.png | Bin 0 -> 7959 bytes
.../Application Planete.wgs}/images/trgDown.png | Bin 475 -> 475 bytes
.../images/trgUp.png | Bin 448 -> 448 bytes
.../images/up.png | Bin 1196 -> 1196 bytes
.../search/Application Planete.wgs/index.html | 264 +
.../scripts/jquery-1.6.2.min.js | 0
.../library/search/Google images.wgs/css/basic.css | 12 +-
.../library/search/Google images.wgs/index.html | 25 +-
.../config.xml | 0
.../css/basic.css | 0
.../search/Interactivite Planete.wgs/icon.png | Bin 0 -> 7390 bytes
.../Interactivite Planete.wgs/icon.thumbnail.png | Bin 0 -> 7390 bytes
.../images/down.png | Bin 1192 -> 1192 bytes
.../images/greySquare.png | Bin 214 -> 214 bytes
.../images/icon-close.png | Bin 1507 -> 1507 bytes
.../images/popupBack.png | Bin 931 -> 931 bytes
.../images/search.png | Bin 1797 -> 1797 bytes
.../images/search_app.png | Bin 1104 -> 1104 bytes
.../images/thumbnail_icon.png | Bin 0 -> 7390 bytes
.../Interactivite Planete.wgs}/images/trgDown.png | Bin 475 -> 475 bytes
.../images/trgUp.png | Bin 448 -> 448 bytes
.../images/up.png | Bin 1196 -> 1196 bytes
.../search/Interactivite Planete.wgs/index.html | 264 +
.../scripts/jquery-1.6.2.min.js | 0
Sankore-3.1/resources/sankore.qrc | 19 +-
Sankore-3.1/resources/startupHints/config.xml | 16 +
Sankore-3.1/resources/startupHints/css/basic.css | 80 +
.../Ass images.wgt => startupHints}/icon.svg | 0
Sankore-3.1/resources/startupHints/images/left.png | Bin 0 -> 844 bytes
.../resources/startupHints/images/right.png | Bin 0 -> 862 bytes
Sankore-3.1/resources/startupHints/index.html | 80 +
.../js}/jquery-1.6.2.min.js | 0
.../startupHints/js/jquery-ui-1.8.9.custom.min.js | 781 +++
.../resources/startupHints/locales/en/1.html | 29 +
.../resources/startupHints/locales/en/2.html | 36 +
.../resources/startupHints/locales/en/3.html | 23 +
.../resources/startupHints/locales/en/4.html | 28 +
.../resources/startupHints/locales/en/5.html | 30 +
.../resources/startupHints/locales/en/error.html | 15 +
.../startupHints/locales/en/images/image0021.png | Bin 0 -> 62734 bytes
.../startupHints/locales/en/images/image0022.png | Bin 0 -> 60557 bytes
.../startupHints/locales/en/images/image0033.png | Bin 0 -> 44288 bytes
.../startupHints/locales/en/images/image0041.png | Bin 0 -> 29470 bytes
.../startupHints/locales/en/images/image0051.png | Bin 0 -> 32103 bytes
.../startupHints/locales/en/images/image0052.png | Bin 0 -> 24305 bytes
.../startupHints/locales/en/images/image0061.png | Bin 0 -> 16102 bytes
.../startupHints/locales/en/images/image0071.png | Bin 0 -> 51201 bytes
.../startupHints/locales/en/images/image0081.png | Bin 0 -> 42129 bytes
.../startupHints/locales/en/images/image0091.png | Bin 0 -> 44192 bytes
.../startupHints/locales/en/images/image0101.png | Bin 0 -> 43486 bytes
.../startupHints/locales/en/images/image0102.png | Bin 0 -> 29261 bytes
.../startupHints/locales/en/images/image0111.png | Bin 0 -> 58800 bytes
.../startupHints/locales/en/images/image0121.png | Bin 0 -> 8268 bytes
.../startupHints/locales/en/images/image0122.png | Bin 0 -> 77296 bytes
.../startupHints/locales/en/images/image0131.png | Bin 0 -> 90790 bytes
.../startupHints/locales/en/images/image01401.png | Bin 0 -> 66063 bytes
.../startupHints/locales/en/images/image0141.png | Bin 0 -> 26352 bytes
.../startupHints/locales/en/images/image0142.png | Bin 0 -> 64412 bytes
.../startupHints/locales/en/images/image0151.png | Bin 0 -> 16587 bytes
.../startupHints/locales/en/images/image0152.png | Bin 0 -> 35683 bytes
.../startupHints/locales/en/images/image0161.png | Bin 0 -> 196649 bytes
.../startupHints/locales/en/images/image0171.png | Bin 0 -> 22086 bytes
.../startupHints/locales/en/images/image0172.png | Bin 0 -> 7592 bytes
.../startupHints/locales/en/images/image0181.png | Bin 0 -> 49801 bytes
.../startupHints/locales/en/images/image0191.png | Bin 0 -> 51616 bytes
.../startupHints/locales/en/images/image0201.png | Bin 0 -> 91070 bytes
.../startupHints/locales/en/images/image0211.png | Bin 0 -> 48761 bytes
.../startupHints/locales/en/images/image0241.png | Bin 0 -> 30992 bytes
.../startupHints/locales/en/images/image0261.png | Bin 0 -> 10091 bytes
.../startupHints/locales/en/images/image0271.png | Bin 0 -> 17395 bytes
.../locales/en/images/opensankore.png} | Bin 32972 -> 32972 bytes
.../resources/startupHints/locales/fr/1.html | 76 +
.../resources/startupHints/locales/fr/10.html | 47 +
.../resources/startupHints/locales/fr/11.html | 32 +
.../resources/startupHints/locales/fr/12.html | 40 +
.../resources/startupHints/locales/fr/13.html | 27 +
.../resources/startupHints/locales/fr/14.html | 47 +
.../resources/startupHints/locales/fr/14_01.html | 27 +
.../resources/startupHints/locales/fr/15.html | 54 +
.../resources/startupHints/locales/fr/16.html | 40 +
.../resources/startupHints/locales/fr/17.html | 46 +
.../resources/startupHints/locales/fr/18.html | 38 +
.../resources/startupHints/locales/fr/19.html | 62 +
.../resources/startupHints/locales/fr/2.html | 62 +
.../resources/startupHints/locales/fr/20.html | 31 +
.../resources/startupHints/locales/fr/21.html | 28 +
.../resources/startupHints/locales/fr/22.html | 36 +
.../resources/startupHints/locales/fr/23.html | 36 +
.../resources/startupHints/locales/fr/24.html | 31 +
.../resources/startupHints/locales/fr/25.html | 32 +
.../resources/startupHints/locales/fr/26.html | 24 +
.../resources/startupHints/locales/fr/3.html | 49 +
.../resources/startupHints/locales/fr/4.html | 30 +
.../resources/startupHints/locales/fr/5.html | 31 +
.../resources/startupHints/locales/fr/6.html | 39 +
.../resources/startupHints/locales/fr/7.html | 46 +
.../resources/startupHints/locales/fr/8.html | 45 +
.../resources/startupHints/locales/fr/9.html | 25 +
.../resources/startupHints/locales/fr/error.html | 15 +
.../startupHints/locales/fr/images/image0021.png | Bin 0 -> 62734 bytes
.../startupHints/locales/fr/images/image0022.png | Bin 0 -> 60557 bytes
.../startupHints/locales/fr/images/image0033.png | Bin 0 -> 44288 bytes
.../startupHints/locales/fr/images/image0041.png | Bin 0 -> 29470 bytes
.../startupHints/locales/fr/images/image0051.png | Bin 0 -> 32103 bytes
.../startupHints/locales/fr/images/image0052.png | Bin 0 -> 24305 bytes
.../startupHints/locales/fr/images/image0061.png | Bin 0 -> 16102 bytes
.../startupHints/locales/fr/images/image0071.png | Bin 0 -> 51201 bytes
.../startupHints/locales/fr/images/image0081.png | Bin 0 -> 42129 bytes
.../startupHints/locales/fr/images/image0091.png | Bin 0 -> 44192 bytes
.../startupHints/locales/fr/images/image0101.png | Bin 0 -> 43486 bytes
.../startupHints/locales/fr/images/image0102.png | Bin 0 -> 29261 bytes
.../startupHints/locales/fr/images/image0111.png | Bin 0 -> 58800 bytes
.../startupHints/locales/fr/images/image0121.png | Bin 0 -> 8268 bytes
.../startupHints/locales/fr/images/image0122.png | Bin 0 -> 77296 bytes
.../startupHints/locales/fr/images/image0131.png | Bin 0 -> 90790 bytes
.../startupHints/locales/fr/images/image01401.png | Bin 0 -> 66063 bytes
.../startupHints/locales/fr/images/image0141.png | Bin 0 -> 26352 bytes
.../startupHints/locales/fr/images/image0142.png | Bin 0 -> 64412 bytes
.../startupHints/locales/fr/images/image0151.png | Bin 0 -> 16587 bytes
.../startupHints/locales/fr/images/image0152.png | Bin 0 -> 35683 bytes
.../startupHints/locales/fr/images/image0161.png | Bin 0 -> 196649 bytes
.../startupHints/locales/fr/images/image0171.png | Bin 0 -> 22086 bytes
.../startupHints/locales/fr/images/image0172.png | Bin 0 -> 7592 bytes
.../startupHints/locales/fr/images/image0181.png | Bin 0 -> 49801 bytes
.../startupHints/locales/fr/images/image0191.png | Bin 0 -> 51616 bytes
.../startupHints/locales/fr/images/image0201.png | Bin 0 -> 91070 bytes
.../startupHints/locales/fr/images/image0211.png | Bin 0 -> 48761 bytes
.../startupHints/locales/fr/images/image0241.png | Bin 0 -> 30992 bytes
.../startupHints/locales/fr/images/image0261.png | Bin 0 -> 10091 bytes
.../startupHints/locales/fr/images/image0271.png | Bin 0 -> 17395 bytes
.../locales/fr/images/opensankore.png} | Bin 32972 -> 32972 bytes
.../Ass images.wgt => startupHints}/objects/0.gif | Bin 2628 -> 2628 bytes
.../Ass images.wgt => startupHints}/objects/1.gif | Bin 1483 -> 1483 bytes
.../Ass images.wgt => startupHints}/objects/2.gif | Bin 2008 -> 2008 bytes
.../Ass images.wgt => startupHints}/objects/3.gif | Bin 2179 -> 2179 bytes
.../Ass images.wgt => startupHints}/objects/4.gif | Bin 1772 -> 1772 bytes
Sankore-3.1/resources/style.qss | 5 +
Sankore-3.1/resources/win/sankore.rc | 2 +-
Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.cpp | 3061 ++++++------
Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.h | 269 +-
Sankore-3.1/src/adaptors/UBExportAdaptor.cpp | 8 +-
Sankore-3.1/src/adaptors/UBExportAdaptor.h | 11 +-
Sankore-3.1/src/adaptors/UBExportCFF.cpp | 21 +-
Sankore-3.1/src/adaptors/UBExportCFF.h | 10 +-
Sankore-3.1/src/adaptors/UBExportDocument.cpp | 16 +-
Sankore-3.1/src/adaptors/UBExportDocument.h | 11 +-
.../src/adaptors/UBExportDocumentSetAdaptor.cpp | 191 +
.../src/adaptors/UBExportDocumentSetAdaptor.h | 60 +
Sankore-3.1/src/adaptors/UBExportFullPDF.cpp | 16 +-
Sankore-3.1/src/adaptors/UBExportFullPDF.h | 8 +-
Sankore-3.1/src/adaptors/UBExportPDF.cpp | 16 +-
Sankore-3.1/src/adaptors/UBExportPDF.h | 8 +-
Sankore-3.1/src/adaptors/UBExportWeb.cpp | 16 +-
Sankore-3.1/src/adaptors/UBExportWeb.h | 9 +-
Sankore-3.1/src/adaptors/UBImportAdaptor.cpp | 5 +-
Sankore-3.1/src/adaptors/UBImportAdaptor.h | 5 +-
Sankore-3.1/src/adaptors/UBImportCFF.cpp | 545 ++-
Sankore-3.1/src/adaptors/UBImportCFF.h | 63 +-
Sankore-3.1/src/adaptors/UBImportDocument.cpp | 12 +-
Sankore-3.1/src/adaptors/UBImportDocument.h | 5 +-
.../src/adaptors/UBImportDocumentSetAdaptor.cpp | 205 +
.../src/adaptors/UBImportDocumentSetAdaptor.h | 52 +
Sankore-3.1/src/adaptors/UBImportImage.cpp | 5 +-
Sankore-3.1/src/adaptors/UBImportImage.h | 5 +-
Sankore-3.1/src/adaptors/UBImportPDF.cpp | 5 +-
Sankore-3.1/src/adaptors/UBImportPDF.h | 5 +-
.../src/adaptors/UBImportVirtualPrinter.cpp | 4 +-
Sankore-3.1/src/adaptors/UBIniFileParser.cpp | 5 +-
Sankore-3.1/src/adaptors/UBIniFileParser.h | 5 +-
.../src/adaptors/UBMetadataDcSubsetAdaptor.cpp | 8 +-
.../src/adaptors/UBMetadataDcSubsetAdaptor.h | 5 +-
Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.cpp | 340 +-
Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.h | 497 +-
Sankore-3.1/src/adaptors/UBThumbnailAdaptor.cpp | 342 +-
Sankore-3.1/src/adaptors/UBThumbnailAdaptor.h | 68 +-
Sankore-3.1/src/adaptors/UBWebPublisher.cpp | 16 +-
Sankore-3.1/src/adaptors/UBWebPublisher.h | 9 +-
Sankore-3.1/src/adaptors/adaptors.pri | 10 +-
.../adaptors/publishing/UBDocumentPublisher.cpp | 1624 ++++----
.../src/adaptors/publishing/UBDocumentPublisher.h | 246 +-
.../adaptors/publishing/UBSvgSubsetRasterizer.cpp | 5 +-
.../adaptors/publishing/UBSvgSubsetRasterizer.h | 5 +-
Sankore-3.1/src/api/UBLibraryAPI.cpp | 5 +-
Sankore-3.1/src/api/UBLibraryAPI.h | 5 +-
Sankore-3.1/src/api/UBW3CWidgetAPI.cpp | 5 +-
Sankore-3.1/src/api/UBW3CWidgetAPI.h | 5 +-
Sankore-3.1/src/api/UBWidgetMessageAPI.cpp | 5 +-
Sankore-3.1/src/api/UBWidgetMessageAPI.h | 5 +-
Sankore-3.1/src/api/UBWidgetUniboardAPI.cpp | 11 +-
Sankore-3.1/src/api/UBWidgetUniboardAPI.h | 5 +-
Sankore-3.1/src/board/UBBoardController.cpp | 5100 ++++++++++----------
Sankore-3.1/src/board/UBBoardController.h | 596 ++--
Sankore-3.1/src/board/UBBoardPaletteManager.cpp | 2022 ++++----
Sankore-3.1/src/board/UBBoardPaletteManager.h | 355 +-
Sankore-3.1/src/board/UBBoardView.cpp | 135 +-
Sankore-3.1/src/board/UBBoardView.h | 331 +-
Sankore-3.1/src/board/UBDrawingController.cpp | 5 +-
Sankore-3.1/src/board/UBDrawingController.h | 5 +-
Sankore-3.1/src/board/UBFeaturesController.cpp | 929 +++--
Sankore-3.1/src/board/UBFeaturesController.h | 318 +-
Sankore-3.1/src/core/UB.h | 54 +-
Sankore-3.1/src/core/UBApplication.cpp | 27 +-
Sankore-3.1/src/core/UBApplication.h | 309 +-
Sankore-3.1/src/core/UBApplicationController.cpp | 1656 ++++----
Sankore-3.1/src/core/UBApplicationController.h | 5 +-
Sankore-3.1/src/core/UBDisplayManager.cpp | 5 +-
Sankore-3.1/src/core/UBDisplayManager.h | 5 +-
Sankore-3.1/src/core/UBDocumentManager.cpp | 619 ++--
Sankore-3.1/src/core/UBDocumentManager.h | 9 +-
Sankore-3.1/src/core/UBDownloadManager.cpp | 136 +-
Sankore-3.1/src/core/UBDownloadManager.h | 13 +-
Sankore-3.1/src/core/UBDownloadThread.cpp | 5 +-
Sankore-3.1/src/core/UBDownloadThread.h | 5 +-
Sankore-3.1/src/core/UBIdleTimer.cpp | 5 +-
Sankore-3.1/src/core/UBIdleTimer.h | 5 +-
Sankore-3.1/src/core/UBMimeData.cpp | 7 +-
Sankore-3.1/src/core/UBMimeData.h | 5 +-
Sankore-3.1/src/core/UBPersistenceManager.cpp | 430 ++-
Sankore-3.1/src/core/UBPersistenceManager.h | 85 +-
Sankore-3.1/src/core/UBPreferencesController.cpp | 76 +-
Sankore-3.1/src/core/UBPreferencesController.h | 9 +-
Sankore-3.1/src/core/UBSceneCache.cpp | 35 +-
Sankore-3.1/src/core/UBSceneCache.h | 6 +-
Sankore-3.1/src/core/UBSetting.cpp | 5 +-
Sankore-3.1/src/core/UBSetting.h | 5 +-
Sankore-3.1/src/core/UBSettings.cpp | 91 +-
Sankore-3.1/src/core/UBSettings.h | 27 +-
Sankore-3.1/src/core/main.cpp | 5 +-
Sankore-3.1/src/core/memcheck.h | 5 +-
.../src/customWidgets/UBActionableWidget.cpp | 5 +-
Sankore-3.1/src/customWidgets/UBActionableWidget.h | 5 +-
.../src/customWidgets/UBGraphicsItemAction.cpp | 188 +
.../src/customWidgets/UBGraphicsItemAction.h | 116 +
Sankore-3.1/src/customWidgets/UBMediaWidget.cpp | 5 +-
Sankore-3.1/src/customWidgets/UBMediaWidget.h | 5 +-
Sankore-3.1/src/customWidgets/customWidgets.pri | 6 +-
Sankore-3.1/src/desktop/UBCustomCaptureWindow.cpp | 4 +-
Sankore-3.1/src/desktop/UBCustomCaptureWindow.h | 4 +-
.../src/desktop/UBDesktopAnnotationController.cpp | 31 +-
.../src/desktop/UBDesktopAnnotationController.h | 5 +-
Sankore-3.1/src/desktop/UBDesktopPalette.cpp | 5 +-
Sankore-3.1/src/desktop/UBDesktopPalette.h | 5 +-
.../src/desktop/UBDesktopPropertyPalette.cpp | 13 +-
Sankore-3.1/src/desktop/UBDesktopPropertyPalette.h | 4 +-
Sankore-3.1/src/desktop/UBWindowCapture.h | 5 +-
.../src/desktop/UBWindowCaptureDelegate_win.cpp | 5 +-
.../src/desktop/UBWindowCaptureDelegate_win.h | 5 +-
Sankore-3.1/src/desktop/UBWindowCapture_linux.cpp | 4 +-
Sankore-3.1/src/desktop/UBWindowCapture_mac.mm | 21 +
Sankore-3.1/src/desktop/UBWindowCapture_win.cpp | 4 +-
Sankore-3.1/src/desktop/desktop.pri | 4 +-
Sankore-3.1/src/document/UBDocumentContainer.cpp | 253 +-
Sankore-3.1/src/document/UBDocumentContainer.h | 108 +-
Sankore-3.1/src/document/UBDocumentController.cpp | 5023 +++++++++++++-------
Sankore-3.1/src/document/UBDocumentController.h | 554 ++-
Sankore-3.1/src/document/UBDocumentProxy.cpp | 455 +-
Sankore-3.1/src/document/UBDocumentProxy.h | 180 +-
Sankore-3.1/src/domain/UBAbstractUndoCommand.cpp | 5 +-
Sankore-3.1/src/domain/UBAbstractUndoCommand.h | 5 +-
Sankore-3.1/src/domain/UBDocumentUndoCommand.cpp | 5 +-
Sankore-3.1/src/domain/UBDocumentUndoCommand.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsAudioItem.h | 4 +-
.../src/domain/UBGraphicsAudioItemDelegate.cpp | 4 +-
.../src/domain/UBGraphicsAudioItemDelegate.h | 4 +-
Sankore-3.1/src/domain/UBGraphicsDelegateFrame.cpp | 1973 ++++----
Sankore-3.1/src/domain/UBGraphicsDelegateFrame.h | 5 +-
.../src/domain/UBGraphicsGroupContainerItem.cpp | 39 +-
.../src/domain/UBGraphicsGroupContainerItem.h | 7 +-
.../UBGraphicsGroupContainerItemDelegate.cpp | 77 +-
.../domain/UBGraphicsGroupContainerItemDelegate.h | 11 +-
Sankore-3.1/src/domain/UBGraphicsItemDelegate.cpp | 250 +-
Sankore-3.1/src/domain/UBGraphicsItemDelegate.h | 40 +-
.../src/domain/UBGraphicsItemGroupUndoCommand.cpp | 5 +-
.../src/domain/UBGraphicsItemGroupUndoCommand.h | 5 +-
.../domain/UBGraphicsItemTransformUndoCommand.cpp | 5 +-
.../domain/UBGraphicsItemTransformUndoCommand.h | 5 +-
.../src/domain/UBGraphicsItemUndoCommand.cpp | 487 +-
Sankore-3.1/src/domain/UBGraphicsItemUndoCommand.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsMediaItem.cpp | 30 +-
Sankore-3.1/src/domain/UBGraphicsMediaItem.h | 6 +-
.../src/domain/UBGraphicsMediaItemDelegate.cpp | 10 +-
.../src/domain/UBGraphicsMediaItemDelegate.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsPDFItem.cpp | 5 +-
Sankore-3.1/src/domain/UBGraphicsPDFItem.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsPixmapItem.cpp | 27 +-
Sankore-3.1/src/domain/UBGraphicsPixmapItem.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsPolygonItem.cpp | 7 +-
Sankore-3.1/src/domain/UBGraphicsPolygonItem.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsProxyWidget.cpp | 5 +-
Sankore-3.1/src/domain/UBGraphicsProxyWidget.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsScene.cpp | 101 +-
Sankore-3.1/src/domain/UBGraphicsScene.h | 6 +-
Sankore-3.1/src/domain/UBGraphicsStroke.cpp | 5 +-
Sankore-3.1/src/domain/UBGraphicsStroke.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsStrokesGroup.cpp | 56 +-
Sankore-3.1/src/domain/UBGraphicsStrokesGroup.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsSvgItem.cpp | 33 +-
Sankore-3.1/src/domain/UBGraphicsSvgItem.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsTextItem.cpp | 53 +-
Sankore-3.1/src/domain/UBGraphicsTextItem.h | 5 +-
.../src/domain/UBGraphicsTextItemDelegate.cpp | 32 +-
.../src/domain/UBGraphicsTextItemDelegate.h | 5 +-
.../src/domain/UBGraphicsTextItemUndoCommand.cpp | 5 +-
.../src/domain/UBGraphicsTextItemUndoCommand.h | 5 +-
Sankore-3.1/src/domain/UBGraphicsVideoItem.cpp | 5 +-
Sankore-3.1/src/domain/UBGraphicsVideoItem.h | 5 +-
.../src/domain/UBGraphicsVideoItemDelegate.cpp | 4 +-
.../src/domain/UBGraphicsVideoItemDelegate.h | 211 +-
Sankore-3.1/src/domain/UBGraphicsWidgetItem.cpp | 26 +-
Sankore-3.1/src/domain/UBGraphicsWidgetItem.h | 6 +-
.../src/domain/UBGraphicsWidgetItemDelegate.cpp | 5 +-
.../src/domain/UBGraphicsWidgetItemDelegate.h | 5 +-
Sankore-3.1/src/domain/UBItem.cpp | 10 +-
Sankore-3.1/src/domain/UBItem.h | 6 +-
Sankore-3.1/src/domain/UBPageSizeUndoCommand.cpp | 5 +-
Sankore-3.1/src/domain/UBPageSizeUndoCommand.h | 5 +-
Sankore-3.1/src/domain/UBResizableGraphicsItem.cpp | 5 +-
Sankore-3.1/src/domain/UBResizableGraphicsItem.h | 5 +-
Sankore-3.1/src/frameworks/MacUtils.h | 4 +-
Sankore-3.1/src/frameworks/UBBase32.cpp | 5 +-
Sankore-3.1/src/frameworks/UBBase32.h | 5 +-
Sankore-3.1/src/frameworks/UBCoreGraphicsScene.cpp | 21 +-
Sankore-3.1/src/frameworks/UBCoreGraphicsScene.h | 7 +-
Sankore-3.1/src/frameworks/UBCryptoUtils.cpp | 5 +-
Sankore-3.1/src/frameworks/UBCryptoUtils.h | 5 +-
Sankore-3.1/src/frameworks/UBFileSystemUtils.cpp | 22 +-
Sankore-3.1/src/frameworks/UBFileSystemUtils.h | 5 +-
Sankore-3.1/src/frameworks/UBGeometryUtils.cpp | 441 +-
Sankore-3.1/src/frameworks/UBGeometryUtils.h | 77 +-
Sankore-3.1/src/frameworks/UBPlatformUtils.cpp | 5 +-
Sankore-3.1/src/frameworks/UBPlatformUtils.h | 48 +-
.../src/frameworks/UBPlatformUtils_linux.cpp | 5 +-
Sankore-3.1/src/frameworks/UBPlatformUtils_mac.mm | 43 +-
Sankore-3.1/src/frameworks/UBPlatformUtils_win.cpp | 5 +-
Sankore-3.1/src/frameworks/UBStringUtils.cpp | 5 +-
Sankore-3.1/src/frameworks/UBStringUtils.h | 5 +-
Sankore-3.1/src/frameworks/UBVersion.cpp | 5 +-
Sankore-3.1/src/frameworks/UBVersion.h | 5 +-
Sankore-3.1/src/frameworks/frameworks.pri | 13 +-
Sankore-3.1/src/globals/UBGlobals.h | 4 +-
Sankore-3.1/src/gui/UBActionPalette.cpp | 6 +-
Sankore-3.1/src/gui/UBActionPalette.h | 5 +-
Sankore-3.1/src/gui/UBBlackoutWidget.cpp | 5 +-
Sankore-3.1/src/gui/UBBlackoutWidget.h | 5 +-
Sankore-3.1/src/gui/UBCachePropertiesWidget.cpp | 395 ++-
Sankore-3.1/src/gui/UBCachePropertiesWidget.h | 64 +-
Sankore-3.1/src/gui/UBCircleFrame.cpp | 5 +-
Sankore-3.1/src/gui/UBCircleFrame.h | 5 +-
Sankore-3.1/src/gui/UBClockPalette.h | 4 +-
Sankore-3.1/src/gui/UBColorPicker.cpp | 5 +-
Sankore-3.1/src/gui/UBColorPicker.h | 5 +-
Sankore-3.1/src/gui/UBCreateLinkPalette.cpp | 360 ++
Sankore-3.1/src/gui/UBCreateLinkPalette.h | 114 +
Sankore-3.1/src/gui/UBDockDownloadWidget.cpp | 8 +-
Sankore-3.1/src/gui/UBDockDownloadWidget.h | 7 +-
Sankore-3.1/src/gui/UBDockPalette.cpp | 855 ++--
Sankore-3.1/src/gui/UBDockPalette.h | 5 +-
Sankore-3.1/src/gui/UBDockPaletteWidget.cpp | 14 +-
Sankore-3.1/src/gui/UBDockPaletteWidget.h | 15 +-
Sankore-3.1/src/gui/UBDockTeacherGuideWidget.cpp | 8 +-
Sankore-3.1/src/gui/UBDockTeacherGuideWidget.h | 8 +-
Sankore-3.1/src/gui/UBDocumentNavigator.cpp | 550 ++--
Sankore-3.1/src/gui/UBDocumentNavigator.h | 125 +-
Sankore-3.1/src/gui/UBDocumentThumbnailWidget.cpp | 598 ++--
Sankore-3.1/src/gui/UBDocumentThumbnailWidget.h | 5 +-
Sankore-3.1/src/gui/UBDocumentToolsPalette.cpp | 5 +-
Sankore-3.1/src/gui/UBDocumentToolsPalette.h | 5 +-
Sankore-3.1/src/gui/UBDocumentTreeWidget.cpp | 892 ++--
Sankore-3.1/src/gui/UBDocumentTreeWidget.h | 5 +-
Sankore-3.1/src/gui/UBDownloadWidget.cpp | 5 +-
Sankore-3.1/src/gui/UBDownloadWidget.h | 5 +-
Sankore-3.1/src/gui/UBFavoriteToolPalette.cpp | 5 +-
Sankore-3.1/src/gui/UBFavoriteToolPalette.h | 5 +-
Sankore-3.1/src/gui/UBFeaturesActionBar.cpp | 87 +-
Sankore-3.1/src/gui/UBFeaturesActionBar.h | 10 +-
Sankore-3.1/src/gui/UBFeaturesWidget.cpp | 162 +-
Sankore-3.1/src/gui/UBFeaturesWidget.h | 102 +-
Sankore-3.1/src/gui/UBFloatingPalette.cpp | 62 +-
Sankore-3.1/src/gui/UBFloatingPalette.h | 12 +-
Sankore-3.1/src/gui/UBIconButton.cpp | 5 +-
Sankore-3.1/src/gui/UBIconButton.h | 5 +-
Sankore-3.1/src/gui/UBKeyboardPalette.cpp | 1480 +++---
Sankore-3.1/src/gui/UBKeyboardPalette.h | 42 +-
Sankore-3.1/src/gui/UBKeyboardPalette_linux.cpp | 5 +-
Sankore-3.1/src/gui/UBKeyboardPalette_mac.cpp | 19 +-
Sankore-3.1/src/gui/UBKeyboardPalette_win.cpp | 157 +-
Sankore-3.1/src/gui/UBLeftPalette.cpp | 78 +-
Sankore-3.1/src/gui/UBLeftPalette.h | 5 +-
Sankore-3.1/src/gui/UBMagnifer.cpp | 851 ++--
Sankore-3.1/src/gui/UBMagnifer.h | 195 +-
Sankore-3.1/src/gui/UBMainWindow.cpp | 37 +-
Sankore-3.1/src/gui/UBMainWindow.h | 9 +-
Sankore-3.1/src/gui/UBMessageWindow.cpp | 5 +-
Sankore-3.1/src/gui/UBMessageWindow.h | 5 +-
Sankore-3.1/src/gui/UBMessagesDialog.cpp | 5 +-
Sankore-3.1/src/gui/UBMessagesDialog.h | 5 +-
Sankore-3.1/src/gui/UBMousePressFilter.cpp | 5 +-
Sankore-3.1/src/gui/UBMousePressFilter.h | 5 +-
Sankore-3.1/src/gui/UBNavigatorPalette.cpp | 269 +-
Sankore-3.1/src/gui/UBNavigatorPalette.h | 109 +-
Sankore-3.1/src/gui/UBPageNavigationWidget.cpp | 320 +-
Sankore-3.1/src/gui/UBPageNavigationWidget.h | 125 +-
Sankore-3.1/src/gui/UBPropertyPalette.cpp | 5 +-
Sankore-3.1/src/gui/UBPropertyPalette.h | 5 +-
Sankore-3.1/src/gui/UBResources.cpp | 5 +-
Sankore-3.1/src/gui/UBResources.h | 5 +-
Sankore-3.1/src/gui/UBRightPalette.cpp | 102 +-
Sankore-3.1/src/gui/UBRightPalette.h | 7 +-
Sankore-3.1/src/gui/UBRubberBand.cpp | 5 +-
Sankore-3.1/src/gui/UBRubberBand.h | 5 +-
Sankore-3.1/src/gui/UBScreenMirror.cpp | 5 +-
Sankore-3.1/src/gui/UBScreenMirror.h | 5 +-
Sankore-3.1/src/gui/UBSpinningWheel.cpp | 5 +-
Sankore-3.1/src/gui/UBSpinningWheel.h | 5 +-
Sankore-3.1/src/gui/UBStartupHintsPalette.cpp | 122 +
Sankore-3.1/src/gui/UBStartupHintsPalette.h | 67 +
Sankore-3.1/src/gui/UBStylusPalette.cpp | 5 +-
Sankore-3.1/src/gui/UBStylusPalette.h | 5 +-
Sankore-3.1/src/gui/UBTeacherGuideWidget.cpp | 70 +-
Sankore-3.1/src/gui/UBTeacherGuideWidget.h | 5 +-
Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.cpp | 136 +-
Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.h | 7 +-
Sankore-3.1/src/gui/UBThumbnailView.cpp | 5 +-
Sankore-3.1/src/gui/UBThumbnailView.h | 5 +-
Sankore-3.1/src/gui/UBThumbnailWidget.cpp | 1908 ++++----
Sankore-3.1/src/gui/UBThumbnailWidget.h | 793 ++--
Sankore-3.1/src/gui/UBToolWidget.cpp | 5 +-
Sankore-3.1/src/gui/UBToolWidget.h | 5 +-
Sankore-3.1/src/gui/UBToolbarButtonGroup.cpp | 5 +-
Sankore-3.1/src/gui/UBToolbarButtonGroup.h | 5 +-
Sankore-3.1/src/gui/UBUpdateDlg.cpp | 5 +-
Sankore-3.1/src/gui/UBUpdateDlg.h | 5 +-
Sankore-3.1/src/gui/UBVideoPlayer.cpp | 5 +-
Sankore-3.1/src/gui/UBVideoPlayer.h | 5 +-
Sankore-3.1/src/gui/UBWebToolsPalette.cpp | 9 +-
Sankore-3.1/src/gui/UBWebToolsPalette.h | 5 +-
Sankore-3.1/src/gui/UBWidgetMirror.cpp | 5 +-
Sankore-3.1/src/gui/UBWidgetMirror.h | 5 +-
Sankore-3.1/src/gui/UBZoomPalette.cpp | 11 +-
Sankore-3.1/src/gui/UBZoomPalette.h | 5 +-
Sankore-3.1/src/gui/gui.pri | 12 +-
Sankore-3.1/src/interfaces/IDataStorage.h | 5 +-
Sankore-3.1/src/network/UBAutoSaver.cpp | 5 +-
Sankore-3.1/src/network/UBAutoSaver.h | 5 +-
Sankore-3.1/src/network/UBCookieJar.cpp | 5 +-
Sankore-3.1/src/network/UBCookieJar.h | 5 +-
Sankore-3.1/src/network/UBHttpFileDownloader.cpp | 5 +-
Sankore-3.1/src/network/UBHttpFileDownloader.h | 5 +-
Sankore-3.1/src/network/UBHttpGet.cpp | 5 +-
Sankore-3.1/src/network/UBHttpGet.h | 5 +-
Sankore-3.1/src/network/UBNetworkAccessManager.cpp | 5 +-
Sankore-3.1/src/network/UBNetworkAccessManager.h | 5 +-
Sankore-3.1/src/network/UBServerXMLHttpRequest.cpp | 5 +-
Sankore-3.1/src/network/UBServerXMLHttpRequest.h | 5 +-
Sankore-3.1/src/pdf-merger/ASCII85Decode.cpp | 5 +-
Sankore-3.1/src/pdf-merger/ASCII85Decode.h | 5 +-
Sankore-3.1/src/pdf-merger/ASCIIHexDecode.cpp | 5 +-
Sankore-3.1/src/pdf-merger/ASCIIHexDecode.h | 5 +-
.../src/pdf-merger/AbstractBoxElementHandler.h | 5 +-
Sankore-3.1/src/pdf-merger/AnnotsHandler.cpp | 5 +-
Sankore-3.1/src/pdf-merger/AnnotsHandler.h | 5 +-
Sankore-3.1/src/pdf-merger/CCITTFaxDecode.cpp | 5 +-
Sankore-3.1/src/pdf-merger/CCITTFaxDecode.h | 5 +-
Sankore-3.1/src/pdf-merger/Config.h | 5 +-
Sankore-3.1/src/pdf-merger/ContentHandler.cpp | 5 +-
Sankore-3.1/src/pdf-merger/ContentHandler.h | 5 +-
Sankore-3.1/src/pdf-merger/CropBoxElementHandler.h | 5 +-
Sankore-3.1/src/pdf-merger/DCTDecode.cpp | 5 +-
Sankore-3.1/src/pdf-merger/DCTDecode.h | 5 +-
Sankore-3.1/src/pdf-merger/Decoder.h | 5 +-
Sankore-3.1/src/pdf-merger/Document.cpp | 5 +-
Sankore-3.1/src/pdf-merger/Document.h | 5 +-
Sankore-3.1/src/pdf-merger/Exception.h | 5 +-
Sankore-3.1/src/pdf-merger/FileIsAbsentException.h | 5 +-
Sankore-3.1/src/pdf-merger/Filter.cpp | 5 +-
Sankore-3.1/src/pdf-merger/Filter.h | 5 +-
Sankore-3.1/src/pdf-merger/FilterPredictor.cpp | 5 +-
Sankore-3.1/src/pdf-merger/FilterPredictor.h | 5 +-
Sankore-3.1/src/pdf-merger/FlateDecode.cpp | 5 +-
Sankore-3.1/src/pdf-merger/FlateDecode.h | 5 +-
Sankore-3.1/src/pdf-merger/JBIG2Decode.cpp | 5 +-
Sankore-3.1/src/pdf-merger/JBIG2Decode.h | 5 +-
Sankore-3.1/src/pdf-merger/LZWDecode.cpp | 5 +-
Sankore-3.1/src/pdf-merger/LZWDecode.h | 5 +-
.../src/pdf-merger/MediaBoxElementHandler.h | 5 +-
Sankore-3.1/src/pdf-merger/MergePageDescription.h | 5 +-
Sankore-3.1/src/pdf-merger/Merger.cpp | 5 +-
Sankore-3.1/src/pdf-merger/Merger.h | 5 +-
Sankore-3.1/src/pdf-merger/Object.cpp | 5 +-
Sankore-3.1/src/pdf-merger/Object.h | 5 +-
.../src/pdf-merger/OverlayDocumentParser.cpp | 5 +-
Sankore-3.1/src/pdf-merger/OverlayDocumentParser.h | 5 +-
Sankore-3.1/src/pdf-merger/Page.cpp | 5 +-
Sankore-3.1/src/pdf-merger/Page.h | 5 +-
Sankore-3.1/src/pdf-merger/PageElementHandler.cpp | 5 +-
Sankore-3.1/src/pdf-merger/PageElementHandler.h | 5 +-
Sankore-3.1/src/pdf-merger/PageParser.h | 5 +-
Sankore-3.1/src/pdf-merger/Parser.cpp | 5 +-
Sankore-3.1/src/pdf-merger/Parser.h | 5 +-
Sankore-3.1/src/pdf-merger/Rectangle.cpp | 5 +-
Sankore-3.1/src/pdf-merger/Rectangle.h | 5 +-
Sankore-3.1/src/pdf-merger/RemoveHimSelfHandler.h | 5 +-
.../src/pdf-merger/RemoveHimselfHandler.cpp | 5 +-
Sankore-3.1/src/pdf-merger/RotationHandler.h | 5 +-
Sankore-3.1/src/pdf-merger/RunLengthDecode.cpp | 5 +-
Sankore-3.1/src/pdf-merger/RunLengthDecode.h | 5 +-
Sankore-3.1/src/pdf-merger/Transformation.h | 5 +-
Sankore-3.1/src/pdf-merger/TypeElementHandler.h | 5 +-
Sankore-3.1/src/pdf-merger/Utils.cpp | 5 +-
Sankore-3.1/src/pdf-merger/Utils.h | 5 +-
Sankore-3.1/src/pdf/GraphicsPDFItem.cpp | 5 +-
Sankore-3.1/src/pdf/GraphicsPDFItem.h | 5 +-
Sankore-3.1/src/pdf/PDFRenderer.cpp | 5 +-
Sankore-3.1/src/pdf/PDFRenderer.h | 5 +-
Sankore-3.1/src/pdf/UBWebPluginPDFWidget.cpp | 5 +-
Sankore-3.1/src/pdf/UBWebPluginPDFWidget.h | 5 +-
Sankore-3.1/src/pdf/XPDFRenderer.cpp | 5 +-
Sankore-3.1/src/pdf/XPDFRenderer.h | 5 +-
Sankore-3.1/src/podcast/UBAbstractVideoEncoder.cpp | 5 +-
Sankore-3.1/src/podcast/UBAbstractVideoEncoder.h | 5 +-
Sankore-3.1/src/podcast/UBPodcastController.cpp | 5 +-
Sankore-3.1/src/podcast/UBPodcastController.h | 5 +-
.../src/podcast/UBPodcastRecordingPalette.cpp | 5 +-
.../src/podcast/UBPodcastRecordingPalette.h | 5 +-
.../intranet/UBIntranetPodcastPublisher.cpp | 5 +-
.../podcast/intranet/UBIntranetPodcastPublisher.h | 5 +-
.../src/podcast/quicktime/UBAudioQueueRecorder.cpp | 5 +-
.../src/podcast/quicktime/UBAudioQueueRecorder.h | 5 +-
.../src/podcast/quicktime/UBQuickTimeFile.cpp | 5 +-
.../src/podcast/quicktime/UBQuickTimeFile.h | 5 +-
.../podcast/quicktime/UBQuickTimeVideoEncoder.cpp | 5 +-
.../podcast/quicktime/UBQuickTimeVideoEncoder.h | 5 +-
.../src/podcast/windowsmedia/UBWaveRecorder.cpp | 5 +-
.../src/podcast/windowsmedia/UBWaveRecorder.h | 5 +-
.../podcast/windowsmedia/UBWindowsMediaFile.cpp | 5 +-
.../src/podcast/windowsmedia/UBWindowsMediaFile.h | 5 +-
.../windowsmedia/UBWindowsMediaVideoEncoder.cpp | 5 +-
.../windowsmedia/UBWindowsMediaVideoEncoder.h | 5 +-
.../src/podcast/youtube/UBYouTubePublisher.cpp | 5 +-
.../src/podcast/youtube/UBYouTubePublisher.h | 5 +-
Sankore-3.1/src/tools/UBAbstractDrawRuler.cpp | 5 +-
Sankore-3.1/src/tools/UBAbstractDrawRuler.h | 5 +-
Sankore-3.1/src/tools/UBGraphicsAristo.cpp | 12 +-
Sankore-3.1/src/tools/UBGraphicsAristo.h | 12 +-
Sankore-3.1/src/tools/UBGraphicsCache.cpp | 171 +-
Sankore-3.1/src/tools/UBGraphicsCache.h | 45 +-
Sankore-3.1/src/tools/UBGraphicsCompass.cpp | 5 +-
Sankore-3.1/src/tools/UBGraphicsCompass.h | 5 +-
Sankore-3.1/src/tools/UBGraphicsCurtainItem.cpp | 5 +-
Sankore-3.1/src/tools/UBGraphicsCurtainItem.h | 5 +-
.../src/tools/UBGraphicsCurtainItemDelegate.cpp | 5 +-
.../src/tools/UBGraphicsCurtainItemDelegate.h | 5 +-
Sankore-3.1/src/tools/UBGraphicsProtractor.cpp | 5 +-
Sankore-3.1/src/tools/UBGraphicsProtractor.h | 5 +-
Sankore-3.1/src/tools/UBGraphicsRuler.cpp | 5 +-
Sankore-3.1/src/tools/UBGraphicsRuler.h | 5 +-
Sankore-3.1/src/tools/UBGraphicsTriangle.cpp | 5 +-
Sankore-3.1/src/tools/UBGraphicsTriangle.h | 5 +-
Sankore-3.1/src/tools/UBToolsManager.cpp | 5 +-
Sankore-3.1/src/tools/UBToolsManager.h | 5 +-
.../src/transition/UniboardSankoreTransition.cpp | 5 +-
.../src/transition/UniboardSankoreTransition.h | 5 +-
Sankore-3.1/src/web/UBOEmbedParser.cpp | 5 +-
Sankore-3.1/src/web/UBOEmbedParser.h | 5 +-
Sankore-3.1/src/web/UBTrapFlashController.cpp | 529 ++-
Sankore-3.1/src/web/UBTrapFlashController.h | 61 +-
Sankore-3.1/src/web/UBWebController.cpp | 79 +-
Sankore-3.1/src/web/UBWebController.h | 24 +-
Sankore-3.1/src/web/UBWebKitUtils.cpp | 235 +-
Sankore-3.1/src/web/UBWebKitUtils.h | 29 +-
Sankore-3.1/src/web/UBWebPage.cpp | 5 +-
Sankore-3.1/src/web/UBWebPage.h | 5 +-
Sankore-3.1/src/web/UBWebPluginWidget.cpp | 5 +-
Sankore-3.1/src/web/UBWebPluginWidget.h | 5 +-
Sankore-3.1/src/web/browser/WBBrowserWindow.cpp | 5 +-
Sankore-3.1/src/web/browser/WBBrowserWindow.h | 5 +-
Sankore-3.1/src/web/browser/WBChaseWidget.cpp | 5 +-
Sankore-3.1/src/web/browser/WBChaseWidget.h | 5 +-
Sankore-3.1/src/web/browser/WBDownloadManager.cpp | 5 +-
Sankore-3.1/src/web/browser/WBDownloadManager.h | 5 +-
Sankore-3.1/src/web/browser/WBEditTableView.cpp | 5 +-
Sankore-3.1/src/web/browser/WBEditTableView.h | 5 +-
Sankore-3.1/src/web/browser/WBHistory.cpp | 5 +-
Sankore-3.1/src/web/browser/WBHistory.h | 5 +-
Sankore-3.1/src/web/browser/WBModelMenu.cpp | 5 +-
Sankore-3.1/src/web/browser/WBModelMenu.h | 5 +-
Sankore-3.1/src/web/browser/WBSearchLineEdit.cpp | 5 +-
Sankore-3.1/src/web/browser/WBSearchLineEdit.h | 5 +-
Sankore-3.1/src/web/browser/WBSqueezeLabel.cpp | 5 +-
Sankore-3.1/src/web/browser/WBSqueezeLabel.h | 5 +-
Sankore-3.1/src/web/browser/WBTabWidget.cpp | 76 +-
Sankore-3.1/src/web/browser/WBTabWidget.h | 11 +-
Sankore-3.1/src/web/browser/WBToolBarSearch.cpp | 5 +-
Sankore-3.1/src/web/browser/WBToolBarSearch.h | 5 +-
.../src/web/browser/WBTrapWebPageContent.cpp | 193 +
Sankore-3.1/src/web/browser/WBTrapWebPageContent.h | 67 +
Sankore-3.1/src/web/browser/WBUrlLineEdit.cpp | 5 +-
Sankore-3.1/src/web/browser/WBUrlLineEdit.h | 5 +-
Sankore-3.1/src/web/browser/WBWebTrapWebView.cpp | 101 +-
Sankore-3.1/src/web/browser/WBWebTrapWebView.h | 22 +-
Sankore-3.1/src/web/browser/WBWebView.cpp | 5 +-
Sankore-3.1/src/web/browser/WBWebView.h | 5 +-
Sankore-3.1/src/web/web.pri | 7 +-
.../CrashReporterSymbolSupplier.cpp | 17 +-
.../CrashReporterSymbolSupplier.h | 18 +-
.../tools/CrashReportViewer/CrashWindow.cpp | 18 +-
Sankore-3.1/tools/CrashReportViewer/CrashWindow.h | 17 +-
Sankore-3.1/tools/CrashReportViewer/main.cpp | 18 +-
.../tools/pdf2image/core/UBPlatformUtils.cpp | 17 +-
Sankore-3.1/tools/pdf2image/core/UBPlatformUtils.h | 18 +-
Sankore-3.1/tools/pdf2image/pdf2image.cpp | 17 +-
835 files changed, 77631 insertions(+), 57028 deletions(-)
create mode 100644 Sankore-3.1/C++StandardHeaderFile.txt
create mode 100644 Sankore-3.1/LICENSE.txt
delete mode 100644 Sankore-3.1/lgplC++StandardHeaderFile.txt
delete mode 100644 Sankore-3.1/release.win7.vc9.64.bat
create mode 100644 Sankore-3.1/resources/i18n/sankore_co.ts
create mode 100644 Sankore-3.1/resources/i18n/sankore_eu.ts
create mode 100644 Sankore-3.1/resources/i18n/sankore_hi.ts
create mode 100644 Sankore-3.1/resources/images/circle.svg
create mode 100644 Sankore-3.1/resources/images/createLinkPalette/LinkPage.svg
create mode 100644 Sankore-3.1/resources/images/createLinkPalette/LinkWeb.svg
create mode 100644 Sankore-3.1/resources/images/createLinkPalette/PlayAudio.svg
create mode 100644 Sankore-3.1/resources/images/libpalette/BookmarkCategory.svg
create mode 100644 Sankore-3.1/resources/images/libpalette/bookmarkIcon.svg
create mode 100644 Sankore-3.1/resources/images/roundeRrectangle.svg
delete mode 100644 Sankore-3.1/resources/images/teacher_close_disabled.png
delete mode 100644 Sankore-3.1/resources/images/teacher_open_disabled.png
create mode 100644 Sankore-3.1/resources/images/toolbar/bookmark.png
create mode 100644 Sankore-3.1/resources/images/toolbar/bookmark.svg
create mode 100644 Sankore-3.1/resources/images/trapFlashPalette/downloadToBoard.svg
create mode 100644 Sankore-3.1/resources/images/trapFlashPalette/downloadToLibrary.svg
create mode 100644 Sankore-3.1/resources/images/trapFlashPalette/linkToBoard.svg
create mode 100644 Sankore-3.1/resources/images/trapFlashPalette/linkToLibrary.svg
create mode 100644 Sankore-3.1/resources/images/trapFlashPalette/trappedFlashIcon.svg
create mode 100644 Sankore-3.1/resources/images/trapFlashPalette/trappedIcon.svg
create mode 100644 Sankore-3.1/resources/images/trapFlashPalette/trappedSoundIcon.svg
create mode 100644 Sankore-3.1/resources/images/trapFlashPalette/trappedVideoIcon.svg
delete mode 100644 Sankore-3.1/resources/library/interactivities/Ass images.wgt/js/script.js
rename Sankore-3.1/resources/library/interactivities/Ass images.wgt/{ => locales/en}/img/drop_img.png (100%)
create mode 100644 Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/js/script.js
delete mode 100644 Sankore-3.1/resources/library/interactivities/Ass sons.wgt/js/script.js
rename Sankore-3.1/resources/library/interactivities/Ass sons.wgt/{ => locales/en}/img/drop_img.png (100%)
create mode 100644 Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/js/script.js
delete mode 100644 Sankore-3.1/resources/library/interactivities/Cat images.wgt/js/script.js
create mode 100644 Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/en/js/script.js
delete mode 100644 Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/fr/img/drop_img.png
delete mode 100644 Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/ru/img/drop_img.png
delete mode 100644 Sankore-3.1/resources/library/interactivities/Cat text.wgt/js/script.js
create mode 100644 Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/en/js/script.js
create mode 100644 Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/en/scripts/selQuestionApp.js
delete mode 100644 Sankore-3.1/resources/library/interactivities/Choisir.wgt/scripts/selQuestionApp.js
create mode 100644 Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/en/index.html
rename Sankore-3.1/resources/library/interactivities/Contraste.wgt/{ => locales/en}/scripts/blackYellow.js (100%)
delete mode 100644 Sankore-3.1/resources/library/interactivities/Etudier.wgt/js/script.js
create mode 100644 Sankore-3.1/resources/library/interactivities/Etudier.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Etudier.wgt/locales/en/js/script.js
delete mode 100644 Sankore-3.1/resources/library/interactivities/Ordre images.wgt/js/script.js
rename Sankore-3.1/resources/library/interactivities/Ordre images.wgt/{ => locales/en}/img/drop_img.png (100%)
create mode 100644 Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/js/script.js
delete mode 100644 Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/js/script.js
create mode 100644 Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/en/js/script.js
rename Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/objects/{beep.mp3 => example_en.mp3} (100%)
copy Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/{locales/fr/objects/exemple.mp3 => objects/example_fr.mp3} (100%)
copy Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/{locales/ru/objects/example.mp3 => objects/example_ru.mp3} (100%)
copy Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/locales/{fr => en}/index.html (100%)
create mode 100644 Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/locales/en/scripts/template2.js
delete mode 100644 Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/scripts/template2.js
create mode 100644 Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/locales/en/index.html
rename Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/{scripts => locales/en/script}/template2.js (100%)
delete mode 100644 Sankore-3.1/resources/library/interactivities/Selectionner.wgt/js/script.js
create mode 100644 Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/en/js/script.js
copy Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/{fr => en}/index.html (100%)
rename Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/{ => locales/en}/scripts/wcontainer.js (100%)
copy Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/{fr => en}/index.html (100%)
create mode 100644 Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/en/scripts/wcontainer.js
delete mode 100644 Sankore-3.1/resources/library/interactivities/Separe texte.wgt/scripts/wcontainer.js
create mode 100644 Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/en/index.html
create mode 100644 Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/en/scripts/wcontainer.js
delete mode 100644 Sankore-3.1/resources/library/interactivities/Syllabes.wgt/scripts/wcontainer.js
copy Sankore-3.1/resources/library/{pictures/Animaux => interactivities/Transformation.wgt/images}/boeuf.png (100%)
copy Sankore-3.1/resources/library/{pictures/Animaux => interactivities/Transformation.wgt/images}/coq.png (100%)
copy Sankore-3.1/resources/library/{pictures/Animaux => interactivities/Transformation.wgt/images}/poule.png (100%)
copy Sankore-3.1/resources/library/{pictures/Animaux => interactivities/Transformation.wgt/images}/vache.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/config.xml (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/css/basic.css (100%)
create mode 100644 Sankore-3.1/resources/library/search/Application Planete.wgs/icon.png
create mode 100644 Sankore-3.1/resources/library/search/Application Planete.wgs/icon.thumbnail.png
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/images/down.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/images/greySquare.png (100%)
copy Sankore-3.1/resources/library/{interactivities/Contraste.wgt => search/Application Planete.wgs}/images/icon-close.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/images/popupBack.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/images/search.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/images/search_app.png (100%)
create mode 100644 Sankore-3.1/resources/library/search/Application Planete.wgs/images/thumbnail_icon.png
copy Sankore-3.1/resources/library/{interactivities/Contraste.wgt => search/Application Planete.wgs}/images/trgDown.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/images/trgUp.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/images/up.png (100%)
create mode 100644 Sankore-3.1/resources/library/search/Application Planete.wgs/index.html
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Application Planete.wgs}/scripts/jquery-1.6.2.min.js (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/config.xml (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/css/basic.css (100%)
create mode 100644 Sankore-3.1/resources/library/search/Interactivite Planete.wgs/icon.png
create mode 100644 Sankore-3.1/resources/library/search/Interactivite Planete.wgs/icon.thumbnail.png
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/images/down.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/images/greySquare.png (100%)
copy Sankore-3.1/resources/library/{interactivities/Contraste.wgt => search/Interactivite Planete.wgs}/images/icon-close.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/images/popupBack.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/images/search.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/images/search_app.png (100%)
create mode 100644 Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/thumbnail_icon.png
copy Sankore-3.1/resources/library/{interactivities/Contraste.wgt => search/Interactivite Planete.wgs}/images/trgDown.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/images/trgUp.png (100%)
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/images/up.png (100%)
create mode 100644 Sankore-3.1/resources/library/search/Interactivite Planete.wgs/index.html
copy Sankore-3.1/resources/library/search/{Audio Planete.wgs => Interactivite Planete.wgs}/scripts/jquery-1.6.2.min.js (100%)
create mode 100644 Sankore-3.1/resources/startupHints/config.xml
create mode 100644 Sankore-3.1/resources/startupHints/css/basic.css
copy Sankore-3.1/resources/{library/interactivities/Ass images.wgt => startupHints}/icon.svg (100%)
create mode 100644 Sankore-3.1/resources/startupHints/images/left.png
create mode 100644 Sankore-3.1/resources/startupHints/images/right.png
create mode 100644 Sankore-3.1/resources/startupHints/index.html
copy Sankore-3.1/resources/{library/search/Audio Planete.wgs/scripts => startupHints/js}/jquery-1.6.2.min.js (100%)
create mode 100644 Sankore-3.1/resources/startupHints/js/jquery-ui-1.8.9.custom.min.js
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/1.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/2.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/3.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/4.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/5.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/error.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0021.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0022.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0033.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0041.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0051.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0052.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0061.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0071.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0081.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0091.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0101.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0102.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0111.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0121.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0122.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0131.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image01401.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0141.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0142.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0151.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0152.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0161.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0171.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0172.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0181.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0191.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0201.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0211.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0241.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0261.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/en/images/image0271.png
copy Sankore-3.1/resources/{etc/Tutorial/tutorial_en/images/logo_open_sankore.png => startupHints/locales/en/images/opensankore.png} (100%)
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/1.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/10.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/11.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/12.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/13.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/14.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/14_01.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/15.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/16.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/17.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/18.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/19.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/2.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/20.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/21.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/22.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/23.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/24.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/25.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/26.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/3.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/4.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/5.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/6.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/7.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/8.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/9.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/error.html
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0021.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0022.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0033.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0041.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0051.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0052.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0061.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0071.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0081.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0091.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0101.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0102.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0111.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0121.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0122.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0131.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image01401.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0141.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0142.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0151.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0152.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0161.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0171.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0172.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0181.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0191.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0201.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0211.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0241.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0261.png
create mode 100644 Sankore-3.1/resources/startupHints/locales/fr/images/image0271.png
copy Sankore-3.1/resources/{etc/Tutorial/tutorial_en/images/logo_open_sankore.png => startupHints/locales/fr/images/opensankore.png} (100%)
copy Sankore-3.1/resources/{library/interactivities/Ass images.wgt => startupHints}/objects/0.gif (100%)
copy Sankore-3.1/resources/{library/interactivities/Ass images.wgt => startupHints}/objects/1.gif (100%)
copy Sankore-3.1/resources/{library/interactivities/Ass images.wgt => startupHints}/objects/2.gif (100%)
copy Sankore-3.1/resources/{library/interactivities/Ass images.wgt => startupHints}/objects/3.gif (100%)
copy Sankore-3.1/resources/{library/interactivities/Ass images.wgt => startupHints}/objects/4.gif (100%)
create mode 100644 Sankore-3.1/src/adaptors/UBExportDocumentSetAdaptor.cpp
create mode 100644 Sankore-3.1/src/adaptors/UBExportDocumentSetAdaptor.h
create mode 100644 Sankore-3.1/src/adaptors/UBImportDocumentSetAdaptor.cpp
create mode 100644 Sankore-3.1/src/adaptors/UBImportDocumentSetAdaptor.h
create mode 100644 Sankore-3.1/src/customWidgets/UBGraphicsItemAction.cpp
create mode 100644 Sankore-3.1/src/customWidgets/UBGraphicsItemAction.h
create mode 100644 Sankore-3.1/src/gui/UBCreateLinkPalette.cpp
create mode 100644 Sankore-3.1/src/gui/UBCreateLinkPalette.h
create mode 100644 Sankore-3.1/src/gui/UBStartupHintsPalette.cpp
create mode 100644 Sankore-3.1/src/gui/UBStartupHintsPalette.h
create mode 100644 Sankore-3.1/src/web/browser/WBTrapWebPageContent.cpp
create mode 100644 Sankore-3.1/src/web/browser/WBTrapWebPageContent.h
The diff of changes is:
diff --git a/Sankore-3.1/C++StandardHeaderFile.txt b/Sankore-3.1/C++StandardHeaderFile.txt
new file mode 100644
index 0000000..f55fd45
--- /dev/null
+++ b/Sankore-3.1/C++StandardHeaderFile.txt
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
diff --git a/Sankore-3.1/COPYING b/Sankore-3.1/COPYING
index 94a9ed0..e6eb58d 100644
--- a/Sankore-3.1/COPYING
+++ b/Sankore-3.1/COPYING
@@ -1,674 +1,495 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
Preamble
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ In addition, as a special exception, the Open-Sankoré authors
+give permission to link the code of its release of Open-Sankoré with the
+OpenSSL project's "OpenSSL" library (or with modified versions of it
+that use the same license as the "OpenSSL" library), and distribute
+the linked executables. You must obey the GNU Library General Public License
+in all respects for all of the code used other than "OpenSSL". If you
+modify this file, you may extend this exception to your version of the
+file, but you are not obligated to do so. If you do not wish to do
+so, delete this exception statement from your version.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
- How to Apply These Terms to Your New Programs
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) [year] Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
+ This file is part of Open-Sankoré.
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ Open-Sankoré is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation, version 2,
+ with a specific linking exception for the OpenSSL project's
+ "OpenSSL" library (or with modified versions of it that use the
+ same license as the "OpenSSL" library).
- This program is distributed in the hope that it will be useful,
+ 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
- GNU General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
+ You should have received a copy of the GNU Library General Public
+ License along with Open-Sankoré, if not, see
+ <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- <program> Copyright (C) <year> <name of author>
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/Sankore-3.1/JournalDesModifications.pdf b/Sankore-3.1/JournalDesModifications.pdf
index a889a67..d04bd45 100644
Binary files a/Sankore-3.1/JournalDesModifications.pdf and b/Sankore-3.1/JournalDesModifications.pdf differ
diff --git a/Sankore-3.1/LICENSE.txt b/Sankore-3.1/LICENSE.txt
new file mode 100644
index 0000000..c60ab7c
--- /dev/null
+++ b/Sankore-3.1/LICENSE.txt
@@ -0,0 +1,687 @@
+Copyright (C) 2013 Groupement d'Intert Public pour l'Education Numrique en Afrique (GIP ENA)
+
+Open-Sankor is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 3 of the License,
+with a specific linking exception for the OpenSSL project's
+"OpenSSL" library (or with modified versions of it that use the
+same license as the "OpenSSL" library).
+
+Here is the full text of the GNU General Public License version 3.
+
+--8<---------------cut here---------------start------------->8---
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+--8<---------------cut here---------------end--------------->8---
diff --git a/Sankore-3.1/ReleaseNotes.pdf b/Sankore-3.1/ReleaseNotes.pdf
index 68bb159..205b450 100644
Binary files a/Sankore-3.1/ReleaseNotes.pdf and b/Sankore-3.1/ReleaseNotes.pdf differ
diff --git a/Sankore-3.1/Sankore_3.1.pro b/Sankore-3.1/Sankore_3.1.pro
index 2a70422..f72a52b 100644
--- a/Sankore-3.1/Sankore_3.1.pro
+++ b/Sankore-3.1/Sankore_3.1.pro
@@ -9,9 +9,9 @@ CONFIG += debug_and_release \
VERSION_MAJ = 2
-VERSION_MIN = 00
+VERSION_MIN = 1
VERSION_TYPE = r # a = alpha, b = beta, r = release, other => error
-VERSION_PATCH = 00
+VERSION_PATCH = 0
VERSION = "$${VERSION_MAJ}.$${VERSION_MIN}.$${VERSION_TYPE}.$${VERSION_PATCH}"
VERSION = $$replace(VERSION, "\\.r", "")
@@ -96,7 +96,7 @@ BUILD_DIR = build
macx:BUILD_DIR = $$BUILD_DIR/macx
win32:BUILD_DIR = $$BUILD_DIR/win32
-linux-g++*:BUILD_DIR = $$BUILD_DIR/linux
+linux-*:BUILD_DIR = $$BUILD_DIR/linux
CONFIG(debug, debug|release):BUILD_DIR = $$BUILD_DIR/debug
CONFIG(release, debug|release) {
@@ -352,7 +352,25 @@ macx {
TRANSLATION_mg.path = "$$RESOURCES_DIR/mg.lproj"
QMAKE_BUNDLE_DATA += TRANSLATION_mg
}
-
+ exists(resources/i18n/sankore_hi.qm) {
+ TRANSLATION_hi.files = resources/i18n/sankore_hi.qm \
+ resources/i18n/localizable.strings
+ TRANSLATION_hi.path = "$$RESOURCES_DIR/hi.lproj"
+ QMAKE_BUNDLE_DATA += TRANSLATION_hi
+ }
+ exists(resources/i18n/sankore_co.qm) {
+ TRANSLATION_co.files = resources/i18n/sankore_co.qm \
+ resources/i18n/localizable.strings
+ TRANSLATION_co.path = "$$RESOURCES_DIR/co.lproj"
+ QMAKE_BUNDLE_DATA += TRANSLATION_co
+ }
+ exists(resources/i18n/sankore_eu.qm) {
+ TRANSLATION_eu.files = resources/i18n/sankore_eu.qm \
+ resources/i18n/localizable.strings
+ TRANSLATION_eu.path = "$$RESOURCES_DIR/eu.lproj"
+ QMAKE_BUNDLE_DATA += TRANSLATION_eu
+ }
+
QMAKE_BUNDLE_DATA += UB_ETC \
UB_LIBRARY \
UB_FONTS \
@@ -372,7 +390,7 @@ macx {
system(printf "%02x%02x%02x%02x" `printf $$VERSION_RC | cut -d ',' -f 1` `printf $$VERSION_RC | cut -d ',' -f 2` `printf $$VERSION_RC | cut -d ',' -f 3` `printf $$VERSION_RC | cut -d ',' -f 4` | xxd -r -p > "$$VERSION_RC_PATH")
}
-linux-g++* {
+linux-* {
CONFIG += link_prl
LIBS += -lcrypto
LIBS += -lX11
@@ -387,6 +405,11 @@ linux-g++* {
system(echo "$$VERSION" > $$BUILD_DIR/version)
system(echo "$$LONG_VERSION" > $$BUILD_DIR/longversion)
system(echo "$$SVN_VERSION" > $$BUILD_DIR/svnversion)
+
+ linux-clang {
+ QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas
+ QMAKE_CXXFLAGS_WARN_ON += -Wno-overloaded-virtual
+ }
}
RESOURCES += resources/sankore.qrc
@@ -421,7 +444,10 @@ TRANSLATIONS = resources/i18n/sankore_en.ts \
resources/i18n/sankore_el.ts \
resources/i18n/sankore_tr.ts \
resources/i18n/sankore_cs.ts \
- resources/i18n/sankore_mg.ts
+ resources/i18n/sankore_mg.ts \
+ resources/i18n/sankore_hi.ts \
+ resources/i18n/sankore_co.ts \
+ resources/i18n/sankore_eu.ts
INSTALLS = UB_ETC \
UB_I18N \
diff --git a/Sankore-3.1/buildDebianPackage.sh b/Sankore-3.1/buildDebianPackage.sh
index d093931..e798a5d 100644
--- a/Sankore-3.1/buildDebianPackage.sh
+++ b/Sankore-3.1/buildDebianPackage.sh
@@ -179,7 +179,7 @@ else
LAST_COMMITED_VERSION="`git describe $(git rev-list --tags --max-count=1)`"
if [ "v$VERSION" != "$LAST_COMMITED_VERSION" ]; then
if [ $MAKE_TAG == true ]; then
- git tag -a "v$VERSION" -m "Generating setup for v$VERSION"
+ git tag -a "v${VERSION}" -m "Generating setup for v$VERSION"
git push origin --tags
fi
fi
@@ -196,6 +196,9 @@ cp -R $PLUGINS_PATH $PRODUCT_PATH/
# copying customization
cp -R resources/customizations $PRODUCT_PATH/
+# copying startup hints
+cp -R resources/startupHints $PRODUCT_PATH/
+
if [ $STANDARD_QT_USED == false ]; then
#copying custom qt library
mkdir -p $QT_LIBRARY_DEST_PATH
@@ -387,7 +390,7 @@ if [ $CREATE_DIENA_DISTRIBUTION_ZIP == true ]; then
ZIP_NAME="Open-Sankoré_`lsb_release -is`_`lsb_release -rs`_${VERSION}_${ARCHITECTURE}.zip"
cd install/linux
- $ZIP_PATH -1 --junk-paths ${ZIP_NAME} ${DEBIAN_PACKAGE_NAME} ../../ReleaseNotes.pdf ../../JournalDesModifications.pdf
+ $ZIP_PATH -1 --junk-paths ${ZIP_NAME} ${DEBIAN_PACKAGE_NAME} ../../ReleaseNotes.pdf ../../JournalDesModifications.pdf ../../LICENSE.txt
cd -
notifyProgress "Open-Sankore" "Build Diena zip file for distribution"
fi
diff --git a/Sankore-3.1/lgplC++StandardHeaderFile.txt b/Sankore-3.1/lgplC++StandardHeaderFile.txt
deleted file mode 100644
index b738626..0000000
--- a/Sankore-3.1/lgplC++StandardHeaderFile.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2012 Webdoc SA
- *
- * This file is part of Open-Sankoré.
- *
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
- * with a specific linking exception for the OpenSSL project's
- * "OpenSSL" library (or with modified versions of it that use the
- * same license as the "OpenSSL" library).
- *
- * 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 GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
- */
-
diff --git a/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor.cpp b/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor.cpp
index 771be29..b9a135a 100644
--- a/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor.cpp
+++ b/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBCFFAdaptor.h"
#include <QtCore>
diff --git a/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor.h b/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor.h
index da14d40..99f5739 100644
--- a/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor.h
+++ b/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor.h
@@ -1,23 +1,22 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
diff --git a/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor_global.h b/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor_global.h
index cb21a4a..3f060b9 100644
--- a/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor_global.h
+++ b/Sankore-3.1/plugins/cffadaptor/src/UBCFFAdaptor_global.h
@@ -1,23 +1,22 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
diff --git a/Sankore-3.1/plugins/cffadaptor/src/UBCFFConstants.h b/Sankore-3.1/plugins/cffadaptor/src/UBCFFConstants.h
index 8968fda..588ea69 100644
--- a/Sankore-3.1/plugins/cffadaptor/src/UBCFFConstants.h
+++ b/Sankore-3.1/plugins/cffadaptor/src/UBCFFConstants.h
@@ -1,23 +1,22 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
diff --git a/Sankore-3.1/plugins/cffadaptor/src/UBGlobals.h b/Sankore-3.1/plugins/cffadaptor/src/UBGlobals.h
index 46c3940..1c2864d 100644
--- a/Sankore-3.1/plugins/cffadaptor/src/UBGlobals.h
+++ b/Sankore-3.1/plugins/cffadaptor/src/UBGlobals.h
@@ -1,23 +1,22 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
diff --git a/Sankore-3.1/release.macx.sh b/Sankore-3.1/release.macx.sh
index 44fc5ee..2790d86 100644
--- a/Sankore-3.1/release.macx.sh
+++ b/Sankore-3.1/release.macx.sh
@@ -124,6 +124,7 @@ $LRELEASE $BASE_QT_TRANSLATIONS_DIRECTORY/translations.pro
addQtTranslations
cp -R resources/customizations $PRODUCT_DIR/Open-Sankore.app/Contents/Resources
+cp -R resources/startupHints $PRODUCT_DIR/Open-Sankore.app/Contents/Resources
notify "Tagging ..."
VERSION=`cat "$BUILD_DIR/version"`
@@ -134,8 +135,8 @@ else
LAST_COMMITED_VERSION="`git describe $(git rev-list --tags --max-count=1)`"
if [ "v$VERSION" != "$LAST_COMMITED_VERSION" ]; then
echo creating a tag with the version $VERSION
- #git tag -a "v$VERSION" -m "Generated setup for v$VERSION"
- #git push origin --tags
+ git tag -a "v$VERSION" -m "Generated setup for v$VERSION"
+ git push origin --tags
fi
fi
@@ -204,15 +205,17 @@ umount "$VOLUME" 2> /dev/null
$DMGUTIL --open --volume="$NAME" "$DMG"
cp *.pdf "$VOLUME"
+cp LICENSE.txt "$VOLUME"
cp -R "$APP" "$VOLUME"
ln -s /Applications "$VOLUME"
$DMGUTIL --set --iconsize=96 --toolbar=false --icon=resources/macx/UniboardDmg.icns "$VOLUME"
-$DMGUTIL --set --x=20 --y=60 --width=580 --height=440 "$VOLUME"
-$DMGUTIL --set --x=180 --y=120 "$VOLUME/`basename \"$APP\"`"
-$DMGUTIL --set --x=400 --y=120 "$VOLUME/Applications"
-$DMGUTIL --set --x=180 --y=280 "$VOLUME/ReleaseNotes.pdf"
-$DMGUTIL --set --x=400 --y=280 "$VOLUME/JournalDesModifications.pdf"
+$DMGUTIL --set --x=20 --y=60 --width=580 --height=520 "$VOLUME"
+$DMGUTIL --set --x=180 --y=80 "$VOLUME/`basename \"$APP\"`"
+$DMGUTIL --set --x=400 --y=80 "$VOLUME/Applications"
+$DMGUTIL --set --x=180 --y=240 "$VOLUME/ReleaseNotes.pdf"
+$DMGUTIL --set --x=400 --y=240 "$VOLUME/JournalDesModifications.pdf"
+$DMGUTIL --set --x=180 --y=400 "$VOLUME/LICENSE.txt"
$DMGUTIL --close --volume="$NAME" "$DMG"
diff --git a/Sankore-3.1/release.win7.vc9.64.bat b/Sankore-3.1/release.win7.vc9.64.bat
deleted file mode 100644
index b344d2f..0000000
--- a/Sankore-3.1/release.win7.vc9.64.bat
+++ /dev/null
@@ -1,74 +0,0 @@
-REM --------------------------------------------------------------------
-REM This program is free software: you can redistribute it and/or modify
-REM it under the terms of the GNU General Public License as published by
-REM the Free Software Foundation, either version 3 of the License, or
-REM (at your option) any later version.
-REM
-REM This program is distributed in the hope that it will be useful,
-REM but WITHOUT ANY WARRANTY; without even the implied warranty of
-REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-REM GNU General Public License for more details.
-REM
-REM You should have received a copy of the GNU General Public License
-REM along with this program. If not, see <http://www.gnu.org/licenses/>.
-REM ---------------------------------------------------------------------
-
-set QT_DIR=..\Qt-sankore3.1
-set QT_BIN=%QT_DIR%\bin
-
-set PROGRAMS_FILE_PATH=C:\Program Files (x86)
-
-set GIT_BIN=%PROGRAMS_FILE_PATH%\Git\bin
-set VS_BIN=%PROGRAMS_FILE_PATH%\Microsoft Visual Studio 9.0\VC\bin
-set WIN_SDK_BIN=%PROGRAMS_FILE_PATH%\Microsoft SDKs\Windows\v6.0A\Bin
-set INNO_EXE=%PROGRAMS_FILE_PATH%\Inno Setup 5\iscc.exe
-set BUILD_DIR=build\win32\release
-set LRELEASE=%QT_DIR%\bin\lrelease
-set BASE_QT_TRANSLATIONS_DIRECTORY=%QT_DIR%\translations
-
-set PATH=%QT_BIN%;%PATH%;%WIN_SDK_BIN%;%GIT_BIN%
-
-call "%VS_BIN%\vcvars32.bat"
-
-echo %PATH%
-
-REM this checks if the custom qt directory path
-REM is correct. This is important because installer
-REM pick up dll from this directory
-IF NOT EXIST "..\Qt-sankore3.1\lib\QtCore4.dll" GOTO EXIT_WITH_ERROR
-
-REM rmdir /S /Q %BUILD_DIR%
-
-set EDITION=MNEMIS_EDITION
-
-"%QT_BIN%\qmake.exe" "DEFINES+=%EDITION%"
-
-%LRELEASE% Sankore_3.1.pro
-
-set /p VERSION= < build\win32\release\version
-git rev-list --tags --max-count=1 > tmp
-set /p LAST_TAG= < tmp
-erase tmp
-git describe %LAST_TAG% > tmp
-set /p LAST_TAG_VERSION=< tmp
-erase tmp
-
-echo %VERSION%
-echo %LAST_TAG_VERSION%
-
-REM if not v%VERSION%==%LAST_TAG_VERSION% GOTO EXIT_WITH_ERROR
-
-nmake release-install
-copy %BASE_QT_TRANSLATIONS_DIRECTORY%\qt_*.qm build\win32\release\product\i18n\
-del build\win32\release\product\i18n\qt_help*
-
-del "build\win32\release\product\Sankore.pdb"
-
-set INSTALLER_NAME=Open-Sankore
-
-set INSTALLER_PATH=.\install\win32\%INSTALLER_NAME%.exe
-
-call "%INNO_EXE%" "Sankore 3.1.iss" /F"%INSTALLER_NAME%"
-
-:EXIT_WITH_ERROR
- echo ERROR
diff --git a/Sankore-3.1/release.win7.vc9.bat b/Sankore-3.1/release.win7.vc9.bat
index fd45308..74af74b 100644
--- a/Sankore-3.1/release.win7.vc9.bat
+++ b/Sankore-3.1/release.win7.vc9.bat
@@ -70,6 +70,10 @@ set CUSTOMIZATIONS=build\win32\release\product\customizations
mkdir %CUSTOMIZATIONS%
xcopy /s resources\customizations %CUSTOMIZATIONS%
+set STARTUP_HINTS=build\win32\release\product\startupHints
+mkdir %STARTUP_HINTS%
+xcopy /s resources\startupHints %STARTUP_HINTS%
+
set I18n=build\win32\release\product\i18n
xcopy /s %BASE_QT_TRANSLATIONS_DIRECTORY%\qt_*.qm %I18n%\
@@ -85,8 +89,9 @@ call "%INNO_EXE%" "Sankore 3.1.iss" /F"%INSTALLER_NAME%"
set INSTALL_DIRECTORY=install\win32\
xcopy *.pdf %INSTALL_DIRECTORY%
+xcopy LICENSE.txt %INSTALL_DIRECTORY%
cd %INSTALL_DIRECTORY%
-call %SEVEN_ZIP_EXE% a Open-Sankor_Windows_%VERSION%.zip *.exe *.pdf
+call %SEVEN_ZIP_EXE% a Open-Sankor_Windows_%VERSION%.zip *.exe *.pdf *.txt
cd ..\..\
GOTO END
diff --git a/Sankore-3.1/resources/etc/Tutorial/tutorial_en/index.html b/Sankore-3.1/resources/etc/Tutorial/tutorial_en/index.html
index c47a787..f7ea5a1 100644
--- a/Sankore-3.1/resources/etc/Tutorial/tutorial_en/index.html
+++ b/Sankore-3.1/resources/etc/Tutorial/tutorial_en/index.html
@@ -44,15 +44,15 @@ body {
<div class="g200">
-<a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/User+manual+EN+2.00" target="_blank"><img src="images/manuel.png" style="width: 188px; border: 1px solid #999"/></a>
-<br/><br/><a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/User+manual+EN+2.00" target="_blank">
+<a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/User+manual+EN+2.10" target="_blank"><img src="images/manuel.png" style="width: 188px; border: 1px solid #999"/></a>
+<br/><br/><a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/User+manual+EN+2.10" target="_blank">
<h5 style="text-align: center;">The user manual</h5></a>
</div>
<div class="g200">
<a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/WebHome_EN" target="_blank"><img src="images/pedago.png" style="width: 188px; border: 1px solid #999"/></a>
-<br/><br/><a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/Tutoriels" target="_blank">
+<br/><br/><a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/WebHome_EN" target="_blank">
<h5 style="text-align: center;">The teaching space</h5></a>
</div>
diff --git a/Sankore-3.1/resources/etc/Tutorial/tutorial_fr/index.html b/Sankore-3.1/resources/etc/Tutorial/tutorial_fr/index.html
index 66467cf..bf25537 100644
--- a/Sankore-3.1/resources/etc/Tutorial/tutorial_fr/index.html
+++ b/Sankore-3.1/resources/etc/Tutorial/tutorial_fr/index.html
@@ -44,15 +44,15 @@ body {
<div class="g200">
-<a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/Le+manuel+du+logiciel+FR+2.00" target="_blank"><img src="images/manuel.png" style="width: 188px; border: 1px solid #999"/></a>
-<br/><br/><a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/Le+manuel+du+logiciel+FR+2.00" target="_blank">
+<a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/Le+manuel+du+logiciel+FR+2.10" target="_blank"><img src="images/manuel.png" style="width: 188px; border: 1px solid #999"/></a>
+<br/><br/><a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/Le+manuel+du+logiciel+FR+2.10" target="_blank">
<h5 style="text-align: center;">Le manuel d'utilisation</h5></a>
</div>
<div class="g200">
<a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/WebHome" target="_blank"><img src="images/pedago.png" style="width: 188px; border: 1px solid #999"/></a>
-<br/><br/><a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/Tutoriels" target="_blank">
+<br/><br/><a href="http://planete.sankore.org/xwiki/bin/view/Pedagogique/WebHome" target="_blank">
<h5 style="text-align: center;">L'espace pédagogique</h5></a>
</div>
diff --git a/Sankore-3.1/resources/etc/Uniboard.css b/Sankore-3.1/resources/etc/Uniboard.css
index 935c028..de3b10f 100644
--- a/Sankore-3.1/resources/etc/Uniboard.css
+++ b/Sankore-3.1/resources/etc/Uniboard.css
@@ -193,6 +193,11 @@ QToolButton#ubActionPaletteButton
margin: 0px;
}
+WBTrapBar QToolButton
+{
+ color: black;
+}
+
QFrame#newDocumentFolderFrame,
QFrame#newDocumentFrame,
QFrame#newFolderFrame
diff --git a/Sankore-3.1/resources/forms/documents.ui b/Sankore-3.1/resources/forms/documents.ui
index fc72345..0eefdf3 100644
--- a/Sankore-3.1/resources/forms/documents.ui
+++ b/Sankore-3.1/resources/forms/documents.ui
@@ -63,6 +63,46 @@
<number>0</number>
</property>
<item>
+ <widget class="UBDocumentTreeView" name="documentTreeView">
+ <property name="minimumSize">
+ <size>
+ <width>400</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>400</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Plain</enum>
+ </property>
+ <property name="autoScroll">
+ <bool>true</bool>
+ </property>
+ <property name="autoScrollMargin">
+ <number>65</number>
+ </property>
+ <property name="selectionBehavior">
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <property name="verticalScrollMode">
+ <enum>QAbstractItemView::ScrollPerItem</enum>
+ </property>
+ <property name="animated">
+ <bool>true</bool>
+ </property>
+ <property name="headerHidden">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="UBDocumentTreeWidget" name="documentTreeWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Expanding">
@@ -242,9 +282,12 @@
<extends>QTreeWidget</extends>
<header>gui/UBDocumentTreeWidget.h</header>
</customwidget>
+ <customwidget>
+ <class>UBDocumentTreeView</class>
+ <extends>QTreeView</extends>
+ <header>document/UBDocumentController.h</header>
+ </customwidget>
</customwidgets>
- <resources>
- <include location="../sankore.qrc"/>
- </resources>
+ <resources/>
<connections/>
</ui>
diff --git a/Sankore-3.1/resources/forms/mainWindow.ui b/Sankore-3.1/resources/forms/mainWindow.ui
index 06ea51a..e3064f5 100644
--- a/Sankore-3.1/resources/forms/mainWindow.ui
+++ b/Sankore-3.1/resources/forms/mainWindow.ui
@@ -111,6 +111,7 @@
<addaction name="actionWebReload"/>
<addaction name="actionStopLoading"/>
<addaction name="actionHome"/>
+ <addaction name="actionBookmark"/>
<addaction name="separator"/>
<addaction name="actionWebBigger"/>
<addaction name="actionWebSmaller"/>
@@ -558,7 +559,7 @@
<property name="text">
<string>Bookmark</string>
</property>
- <property name="toolTip">
+ <property name="iconText">
<string>Add Bookmark</string>
</property>
</action>
@@ -1462,18 +1463,6 @@
<string>Configure Podcast Recording</string>
</property>
</action>
- <action name="actionWebTrapFlash">
- <property name="icon">
- <iconset resource="../sankore.qrc">
- <normaloff>:/images/toolbar/addToolToLibrary.png</normaloff>:/images/toolbar/addToolToLibrary.png</iconset>
- </property>
- <property name="text">
- <string>Flash Trap</string>
- </property>
- <property name="toolTip">
- <string>Trap Flash Content</string>
- </property>
- </action>
<action name="actionWebTrap">
<property name="checkable">
<bool>true</bool>
@@ -1514,21 +1503,6 @@
<string>Capture a Window</string>
</property>
</action>
- <action name="actionWebOEmbed">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="icon">
- <iconset resource="../sankore.qrc">
- <normaloff>:/images/extraPalette/oEmbed.png</normaloff>:/images/extraPalette/oEmbed.png</iconset>
- </property>
- <property name="text">
- <string>Embed Web Content</string>
- </property>
- <property name="toolTip">
- <string>Capture Embeddable Web Content</string>
- </property>
- </action>
<action name="actionWebShowHideOnDisplay">
<property name="checkable">
<bool>true</bool>
@@ -1678,6 +1652,90 @@
<string>Remove the backgound</string>
</property>
</action>
+ <action name="actionBookmark">
+ <property name="icon">
+ <iconset resource="../sankore.qrc">
+ <normaloff>:/images/toolbar/bookmark.png</normaloff>:/images/toolbar/bookmark.png</iconset>
+ </property>
+ <property name="text">
+ <string>Bookmark</string>
+ </property>
+ <property name="iconText">
+ <string comment="tooltip">Bookmark</string>
+ </property>
+ <property name="toolTip">
+ <string extracomment="tooltip">Bookmark</string>
+ </property>
+ </action>
+ <action name="actionWebTrapContent">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="icon">
+ <iconset resource="../sankore.qrc">
+ <normaloff>:/images/toolbar/addToolToLibrary.png</normaloff>:/images/toolbar/addToolToLibrary.png</iconset>
+ </property>
+ <property name="text">
+ <string>Web Trap</string>
+ </property>
+ <property name="toolTip">
+ <string>Trap Web Content</string>
+ </property>
+ </action>
+ <action name="actionWebTrapToLibrary">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="icon">
+ <iconset resource="../sankore.qrc">
+ <normaloff>:/images/trapFlashPalette/downloadToLibrary.svg</normaloff>:/images/trapFlashPalette/downloadToLibrary.svg</iconset>
+ </property>
+ <property name="text">
+ <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></string>
+ </property>
+ <property name="toolTip">
+ <string>Download to library</string>
+ </property>
+ </action>
+ <action name="actionWebTrapToCurrentPage">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="icon">
+ <iconset resource="../sankore.qrc">
+ <normaloff>:/images/trapFlashPalette/downloadToBoard.svg</normaloff>:/images/trapFlashPalette/downloadToBoard.svg</iconset>
+ </property>
+ <property name="text">
+ <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></string>
+ </property>
+ <property name="toolTip">
+ <string>Download to current page</string>
+ </property>
+ </action>
+ <action name="actionWebTrapLinkToLibrary">
+ <property name="icon">
+ <iconset resource="../sankore.qrc">
+ <normaloff>:/images/trapFlashPalette/linkToLibrary.svg</normaloff>:/images/trapFlashPalette/linkToLibrary.svg</iconset>
+ </property>
+ <property name="text">
+ <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></string>
+ </property>
+ <property name="toolTip">
+ <string>Add link to library</string>
+ </property>
+ </action>
+ <action name="actionWebTrapLinkToPage">
+ <property name="icon">
+ <iconset resource="../sankore.qrc">
+ <normaloff>:/images/trapFlashPalette/linkToBoard.svg</normaloff>:/images/trapFlashPalette/linkToBoard.svg</iconset>
+ </property>
+ <property name="text">
+ <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></string>
+ </property>
+ <property name="toolTip">
+ <string>Add link to current page</string>
+ </property>
+ </action>
</widget>
<resources>
<include location="../sankore.qrc"/>
diff --git a/Sankore-3.1/resources/forms/preferences.ui b/Sankore-3.1/resources/forms/preferences.ui
index a87956c..e2729ac 100644
--- a/Sankore-3.1/resources/forms/preferences.ui
+++ b/Sankore-3.1/resources/forms/preferences.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>601</width>
- <height>686</height>
+ <width>829</width>
+ <height>694</height>
</rect>
</property>
<property name="windowTitle">
@@ -21,6 +21,55 @@
</property>
</widget>
</item>
+ <item row="3" column="0">
+ <widget class="QFrame" name="frame">
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="defaultSettingsButton">
+ <property name="text">
+ <string>Default Settings</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="bottomHSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="closeButton">
+ <property name="text">
+ <string>Close</string>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
<item row="1" column="0">
<widget class="QTabWidget" name="mainTabWidget">
<property name="currentIndex">
@@ -30,28 +79,142 @@
<attribute name="title">
<string>Display</string>
</attribute>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="3" column="0">
- <spacer name="toolbarSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_10">
+ <item>
+ <widget class="QGroupBox" name="languageGroupBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Language</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <spacer name="horizontalSpacer_7">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Preferred</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="2">
+ <layout class="QVBoxLayout" name="languageVerticalLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetFixedSize</enum>
+ </property>
+ <item>
+ <layout class="QHBoxLayout" name="languageHAlert">
+ <item>
+ <widget class="QLabel" name="languageLabel">
+ <property name="text">
+ <string>Select a language</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="languageComboBox">
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_8">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="alertHLayout">
+ <item>
+ <widget class="QLabel" name="closeOpenSankoreAlertLabel">
+ <property name="text">
+ <string>The new language will be loaded on next restart</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="quitOpenSankorePushButton">
+ <property name="text">
+ <string>Close Open-Sankoré</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="startupGroupBox">
+ <property name="title">
+ <string>Start up tips</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_5">
+ <item>
+ <layout class="QGridLayout" name="gridLayout_17">
+ <item row="1" column="0">
+ <spacer name="horizontalSpacer_9">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="startupTipsCheckBox">
+ <property name="text">
+ <string>Show start up tips</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
</item>
- <item row="9" column="0">
- <spacer name="keyboardSpacer">
+ <item>
+ <spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
- <property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
- </property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
@@ -60,7 +223,7 @@
</property>
</spacer>
</item>
- <item row="2" column="0">
+ <item>
<widget class="QGroupBox" name="multiDisplayGroupBox">
<property name="title">
<string>Multi display</string>
@@ -112,8 +275,8 @@
</layout>
</widget>
</item>
- <item row="12" column="0">
- <spacer name="modeSpacer">
+ <item>
+ <spacer name="toolbarSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
@@ -125,210 +288,217 @@
</property>
</spacer>
</item>
- <item row="8" column="0">
- <widget class="QGroupBox" name="toolbarGroupBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Toolbar</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_9">
- <item row="0" column="1">
- <layout class="QGridLayout" name="gridLayout_10">
- <item row="0" column="0">
- <widget class="QRadioButton" name="toolbarAtTopRadioButton">
- <property name="text">
- <string>Positioned at the Top (recommended for tablets)</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QRadioButton" name="toolbarAtBottomRadioButton">
- <property name="text">
- <string>Positioned at the Bottom (recommended for white boards)</string>
- </property>
- </widget>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_12">
+ <item>
+ <widget class="QGroupBox" name="toolbarGroupBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Toolbar</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_9">
+ <item row="0" column="1">
+ <layout class="QGridLayout" name="gridLayout_10">
+ <item row="0" column="0">
+ <widget class="QRadioButton" name="toolbarAtTopRadioButton">
+ <property name="text">
+ <string>Positioned at the Top (recommended for tablets)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QRadioButton" name="toolbarAtBottomRadioButton">
+ <property name="text">
+ <string>Positioned at the Bottom (recommended for white boards)</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
</item>
- <item row="2" column="0">
- <spacer name="verticalSpacer">
+ <item row="0" column="0">
+ <spacer name="toolbarLSpacer">
<property name="orientation">
- <enum>Qt::Vertical</enum>
+ <enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>20</width>
+ <width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
- </layout>
- </item>
- <item row="0" column="0">
- <spacer name="toolbarLSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Preferred</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="0" column="2">
- <spacer name="toolbarRSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="1" column="1">
- <widget class="QCheckBox" name="toolbarDisplayTextCheckBox">
- <property name="text">
- <string>Display Text Under Button</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="7" column="0">
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="4" column="0" rowspan="2">
- <widget class="QGroupBox" name="stylusPaletteGroupBox">
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
- <property name="title">
- <string>Stylus Palette</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_14">
- <property name="leftMargin">
- <number>12</number>
- </property>
- <item row="0" column="1">
- <layout class="QGridLayout" name="gridLayout_5">
- <property name="sizeConstraint">
- <enum>QLayout::SetDefaultConstraint</enum>
- </property>
- <item row="0" column="0">
- <widget class="QRadioButton" name="horizontalChoice">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <item row="0" column="2">
+ <spacer name="toolbarRSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
</property>
- <property name="minimumSize">
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
<size>
- <width>0</width>
- <height>0</height>
+ <width>40</width>
+ <height>20</height>
</size>
</property>
+ </spacer>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="toolbarDisplayTextCheckBox">
<property name="text">
- <string>Horizontal</string>
- </property>
- <property name="checked">
- <bool>false</bool>
+ <string>Display Text Under Button</string>
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QRadioButton" name="verticalChoice">
- <property name="text">
- <string>Vertical</string>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="stylusPaletteGroupBox">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Stylus Palette</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_14">
+ <property name="leftMargin">
+ <number>12</number>
+ </property>
+ <item row="0" column="1">
+ <layout class="QGridLayout" name="gridLayout_5">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetDefaultConstraint</enum>
+ </property>
+ <item row="2" column="0">
+ <spacer name="verticalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="0">
+ <widget class="QRadioButton" name="horizontalChoice">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Horizontal</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QRadioButton" name="verticalChoice">
+ <property name="text">
+ <string>Vertical</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="0" column="2">
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
</property>
- <property name="checked">
- <bool>true</bool>
+ <property name="sizeType">
+ <enum>QSizePolicy::Preferred</enum>
</property>
- </widget>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
</item>
- <item row="2" column="0">
- <spacer name="verticalSpacer_5">
+ <item row="0" column="0">
+ <spacer name="horizontalSpacer_4">
<property name="orientation">
- <enum>Qt::Vertical</enum>
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Preferred</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
- <width>20</width>
- <height>40</height>
+ <width>40</width>
+ <height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
- </item>
- <item row="0" column="2">
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Preferred</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="0" column="0">
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Preferred</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="keyboardSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
</item>
- <item row="10" column="0">
+ <item>
<widget class="QGroupBox" name="keyboardGroupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
@@ -386,34 +556,31 @@
</layout>
</widget>
</item>
- <item row="13" column="0">
- <widget class="QGroupBox" name="modeGroupBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <item>
+ <spacer name="modeSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
</property>
- <property name="title">
- <string>Mode</string>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
</property>
- <layout class="QGridLayout" name="gridLayout_15">
- <item row="0" column="0">
- <spacer name="horizontalSpacer_5">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Preferred</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="modeGroupBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Mode</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_15">
<item row="0" column="1" rowspan="2">
<layout class="QGridLayout" name="gridLayout_16">
<item row="0" column="0">
@@ -452,11 +619,27 @@
</item>
</layout>
</item>
+ <item row="0" column="0">
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Preferred</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
</layout>
</widget>
</item>
- <item row="14" column="0">
- <spacer name="verticalSpacer_7">
+ <item>
+ <spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
@@ -752,11 +935,11 @@
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></string>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></string>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@@ -784,6 +967,9 @@ p, li { white-space: pre-wrap; }
<property name="acceptDrops">
<bool>false</bool>
</property>
+ <property name="documentTitle">
+ <string notr="true"/>
+ </property>
<property name="undoRedoEnabled">
<bool>false</bool>
</property>
@@ -931,6 +1117,9 @@ p, li { white-space: pre-wrap; }
<property name="acceptDrops">
<bool>false</bool>
</property>
+ <property name="documentTitle">
+ <string notr="true"/>
+ </property>
<property name="undoRedoEnabled">
<bool>false</bool>
</property>
@@ -973,318 +1162,644 @@ jloup at gzip.org madler at alumni.caltech.edu</string>
<property name="acceptDrops">
<bool>false</bool>
</property>
+ <property name="documentTitle">
+ <string notr="true"/>
+ </property>
<property name="undoRedoEnabled">
<bool>false</bool>
</property>
<property name="plainText">
<string notr="true">Copyright (C) 1996-2011 Glyph & Cog, LLC.
-Xpdf is licensed under the GNU General Public License (GPL), version
-2. In my opinion, the GPL is a convoluted, confusing, ambiguous mess.
-But it's also pervasive, and I'm sick of arguing. And even if it is
-confusing, the basic idea is good.
-
-In order to cut down on the confusion a little bit, here are some
-informal clarifications:
-
-- I don't mind if you redistribute xpdf in source and/or binary form,
- as long as you include all of the documentation: README, man pages
- (or help files), and COPYING. (Note that the README file contains a
- pointer to a web page with the source code.)
-
-- Selling a CD-ROM that contains xpdf is fine with me, as long as it
- includes the documentation. I wouldn't mind receiving a sample
- copy, but it's not necessary.
+Xpdf is licensed under the GNU General Public License (GPL), version 2
+or 3. This means that you can distribute derivatives of Xpdf under
+any of the following:
+ - GPL v2 only
+ - GPL v3 only
+ - GPL v2 or v3
-- If you make useful changes to xpdf, please make the source code
- available -- post it on a web site, email it to me, whatever.
-
-For information on commercial licensing and consulting, please see the
-Glyph & Cog web site:
-
- http://www.glyphandcog.com/
-
-Here is the full text of the GNU General Public License version 2.
+Here is the full text of the GNU General Public License version 3.
--8<---------------cut here---------------start------------->8---
GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
+ Version 3, 29 June 2007
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
- NO WARRANTY
+ The precise terms and conditions for copying, distribution and
+modification follow.
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
@@ -1296,55 +1811,50 @@ free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
+state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
- This program is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License.
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
This program 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
GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--8<---------------cut here---------------end--------------->8---</string>
</property>
<property name="textInteractionFlags">
@@ -1364,12 +1874,21 @@ Public License instead of this License.
<property name="acceptDrops">
<bool>false</bool>
</property>
+ <property name="documentTitle">
+ <string notr="true"/>
+ </property>
<property name="undoRedoEnabled">
<bool>false</bool>
</property>
<property name="plainText">
<string notr="true">Copyright (C) 2005-2007 Sergey A. Tachenov
+QuaZIP is licensed under the GNU General Pulbic License (GPL), either
+version 2 or (at your option) any later version.
+
+Here is the full text of the GNU General Public License version 2.
+
+--8<---------------cut here---------------start------------->8---
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
@@ -1708,7 +2227,8 @@ This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.</string>
+Public License instead of this License.
+--8<---------------cut here---------------end--------------->8---</string>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@@ -1727,504 +2247,700 @@ Public License instead of this License.</string>
<property name="acceptDrops">
<bool>false</bool>
</property>
+ <property name="documentTitle">
+ <string notr="true"/>
+ </property>
+ <property name="undoRedoEnabled">
+ <bool>false</bool>
+ </property>
<property name="plainText">
- <string notr="true">Copyright (C) 2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ <string notr="true">Copyright (C) 2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
- GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
+Open-Sankoré is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 3 of the License,
+with a specific linking exception for the OpenSSL project's
+"OpenSSL" library (or with modified versions of it that use the
+same license as the "OpenSSL" library).
+
+Here is the full text of the GNU General Public License version 3.
+
+--8<---------------cut here---------------start------------->8---
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
Preamble
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- In addition, as a special exception, the Open-Sankoré authors
-give permission to link the code of its release of Open-Sankoré with the
-OpenSSL project's "OpenSSL" library (or with modified versions of it
-that use the same license as the "OpenSSL" library), and distribute
-the linked executables. You must obey the GNU Library General Public License
-in all respects for all of the code used other than "OpenSSL". If you
-modify this file, you may extend this exception to your version of the
-file, but you are not obligated to do so. If you do not wish to do
-so, delete this exception statement from your version.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
+modification follow.
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
this License.
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
+ How to Apply These Terms to Your New Programs
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> Webdoc SA
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
- This file is part of Open-Sankoré.
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
- Open-Sankoré is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation, version 2,
- with a specific linking exception for the OpenSSL project's
- "OpenSSL" library (or with modified versions of it that use the
- same license as the "OpenSSL" library).
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- Open-Sankoré is distributed in the hope that it will be useful,
+ This program 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 GNU
- Library General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with Open-Sankoré, if not, see
- <http://www.gnu.org/licenses/>.
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
-That's all there is to it!</string>
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+--8<---------------cut here---------------end--------------->8---</string>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@@ -2247,16 +2963,22 @@ That's all there is to it!</string>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTextBrowser" name="copyrightTextBrowser">
+ <property name="acceptDrops">
+ <bool>false</bool>
+ </property>
<property name="html">
- <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+ <string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 2.0, Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></string>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Open-Sankoré version 2.1.0, Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />Open-Sankoré est un logiciel libre : vous pouvez le redistribuer et/ou le modifier en respectant les termes de la GNU General Public Licence (GNU GPL) telle que publiée par la Free Software Foundation en version 3, avec une exception OpenSSL.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu';"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu';">.<br /><br />Open-Sankoré is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License, with a specific linking exception for the OpenSSL project's "OpenSSL" library (or with modified versions of it that use the same license as the "OpenSSL" library). You can find the source code of this software at </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu';"><br />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 GNU General Public License below for more details.<br /><br /></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu';">"</span></p></td></tr></table></body></html></string>
+ </property>
+ <property name="openLinks">
+ <bool>false</bool>
</property>
</widget>
</item>
@@ -2308,62 +3030,55 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="QTextBrowser" name="credentialTextBrowser">
<property name="html">
- <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+ <string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></string>
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></string>
</property>
<property name="textInteractionFlags">
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@@ -2385,25 +3100,29 @@ p, li { white-space: pre-wrap; }
<string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Translations</span></p>
-<p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;">A special thanks to:</span></p>
-<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" font-size:medium; font-weight:600;" style=" margin-top:16px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium; font-weight:400;">Alexander Angelov and Iva Ninova for Bulgarian</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Francesc Busquets for Catalan</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Jaroslav KrejÄÃ, Janek Wagner for Czech</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Geert Kraeye and Derk Klomp for Dutch</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Christian Oïhénart and François Bocquet for French</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Hans-Peter Zahno and Klaus Tenner for German</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Yannis Kiolalis for Greek</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Antonello Comi and Marco Menardi for Italian</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Didier Clerc for Japanese</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Faraniaina Domoina Rabarijaona for Malagasy</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Patricia Fisch and César Marques for Portuguese</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Ilia Ryabokon for Russian</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Anki Chen for Traditional Chinese</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Jaroslav RynÃk for Slovak</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Dorian Fuentes and Juan José Gutiérrez Aparicio for Spanish</span></li>
-<li style=" font-size:medium;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:medium;">Ferhat Ozkasgarli for Turkish</span></li></ul></body></html></string>
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt; font-weight:600;">Translations</span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:12pt; font-weight:600;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A special thanks to:</p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Alexander Angelov and Iva Ninova for Bulgarian</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Francesc Busquets and Toni Hortal for Catalan</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Christophe Gallego for Corsican</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Jaroslav KrejÄÃ, Janek Wagner for Czech</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Geert Kraeye and Derk Klomp for Dutch</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Christian Oïhénart and François Bocquet for French</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Hans-Peter Zahno and Klaus Tenner for German</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Yannis Kaskamanidis for Greek</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Lalit Mohan for Hindi</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Antonello Comi and Marco Menardi for Italian</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Didier Clerc for Japanese</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Faraniaina Domoina Rabarijaona for Malagasy</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Patricia Fisch and César Marques for Portuguese</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Ilia Ryabokon for Russian</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Anki Chen for Traditional Chinese</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Jaroslav RynÃk for Slovak</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Dorian Fuentes and Juan José Gutiérrez Aparicio for Spanish</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> ⢠Ferhat Ozkasgarli for Turkish</p></body></html></string>
</property>
</widget>
</item>
@@ -2411,55 +3130,6 @@ p, li { white-space: pre-wrap; }
</widget>
</widget>
</item>
- <item row="3" column="0">
- <widget class="QFrame" name="frame">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="margin">
- <number>0</number>
- </property>
- <item>
- <widget class="QPushButton" name="defaultSettingsButton">
- <property name="text">
- <string>Default Settings</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="bottomHSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QPushButton" name="closeButton">
- <property name="text">
- <string>Close</string>
- </property>
- <property name="default">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </item>
</layout>
</widget>
<tabstops>
diff --git a/Sankore-3.1/resources/i18n/sankore_ar.ts b/Sankore-3.1/resources/i18n/sankore_ar.ts
index 71d422a..d885669 100644
--- a/Sankore-3.1/resources/i18n/sankore_ar.ts
+++ b/Sankore-3.1/resources/i18n/sankore_ar.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>اشارة Ù
رجعÙØ©</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>ضبط تسجÙ٠اÙبÙدÙاست</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>ÙÙاش تراب</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Ù
ØتÙÙ ÙÙاش تراب</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>ÙÙب تراب</translation>
</message>
@@ -728,14 +721,6 @@
<translation>اÙتÙاط ÙاÙذة</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>تضÙ
ÙÙ Ù
ØتÙÙ ÙÙب</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>اÙتÙاط Ù
ØتÙÙ ÙÙب Ùاب٠ÙÙتضÙ
ÙÙ</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>اظÙار اÙعرض</translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>تجÙ
Ùع</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">اÙتÙزÙ٠إÙÙ</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">اÙÙ
Ùتبة</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>اÙتÙزÙ٠إÙ٠اÙÙ
Ùتبة</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">اÙتÙزÙ٠إÙÙ</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">اÙصÙØØ© اÙØاÙÙØ©</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>اÙتÙزÙÙ Ù٠اÙصÙØØ© اÙØاÙÙØ©</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">إضاÙØ© اÙرابط Ø¥ÙÙ</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">اÙÙ
Ùتبة</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>اضاÙØ© اÙرابط Ø¥Ù٠اÙÙ
Ùتبة</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">إضاÙØ© اÙرابط Ø¥ÙÙ</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">اÙصÙØØ© اÙØاÙÙØ©</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>إضاÙØ© اÙرابط Ø¥Ù٠اÙصÙØØ© اÙØاÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">اشارة Ù
رجعÙØ©</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,13 +1010,110 @@
<translation>اÙØ´ÙÙ:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>اÙØجÙ
:</translation>
+ <source>Alpha:</source>
+ <translation>Ø£ÙÙا:</translation>
</message>
<message>
- <source>Close</source>
- <translatorcomment>اغÙاÙ:</translatorcomment>
- <translation>Close</translation>
+ <source>Geometry:</source>
+ <translation>اÙÙÙدسة:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>اÙعرض:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>اÙارتÙاع:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>اÙØÙاظ عÙ٠اÙÙسب</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>ÙسÙ:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Ù
عاÙÙØ©:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>اغÙا٠اÙتخزÙ٠اÙÙ
ؤÙت</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><إسÙاط اÙÙ
ØتÙÙ></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>ÙÙ
ÙÙع ÙبÙ٠اÙصÙر </translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Ùا ÙÙ
Ù٠عرض اÙبÙاÙات</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>ÙÙ
ÙÙع اÙتعرÙ٠عÙ٠اÙÙ
Ù٠اÙÙ
سÙØ· ÙÙ
ÙÙ٠صÙتÙ</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>تشغÙÙ Ù
Ù٠صÙتÙ</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>إضاÙØ© رابط Ø¥Ù٠اÙصÙØØ©</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>إضاÙØ© رابط Ø¥Ù٠صÙØØ© اÙÙÙب</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>سØب اÙÙ
Ù٠اÙصÙت٠Ù
٠اÙÙ
Ùتبة ÙإسÙاط٠ÙÙ Ùذا اÙصÙدÙÙ</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ù
ÙاÙÙ</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>اÙصÙØØ© اÙتاÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>اÙصÙØØ© اÙسابÙØ©</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>صÙØØ© اÙعÙÙاÙ</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>اÙصÙØØ© اÙأخÙرة</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>رÙÙ
اÙصÙØØ©</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>ادخا٠Ùص Ù
Øدد Ù
ÙÙع اÙÙ
عÙÙÙ
ات ÙÙا</translation>
</message>
</context>
<context>
@@ -1059,42 +1178,6 @@
<translation>ازاÙØ© اÙصÙØØ©</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>ازاÙØ© اÙÙØ«ÙÙØ©</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Ù٠ترÙدÙÙ ØÙا ازاÙØ© اÙÙØ«ÙÙØ© '1%'Ø</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Ø¥Ùراغ سÙØ© اÙÙ
ÙÙ
Ùات</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Ù٠ترÙدÙÙ ØÙا Ø¥Ùراغ سÙØ© اÙÙ
ÙÙ
ÙاتØ</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Ùجر٠اÙراغ سÙØ© اÙÙ
ÙÙ
Ùات</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>تÙ
٠اÙراغ سÙØ© اÙÙ
ÙÙ
Ùات</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>ازاÙØ© Ù
جÙد</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Ù٠ترÙدÙÙ ØÙا ازاÙØ© اÙÙ
جÙد '1%' ÙÙÙ Ù
ØتÙÙاتÙØ</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>ÙÙ
ÙÙع اختÙار ÙØ«ÙÙØ©!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>ÙØªØ Ø§ÙÙ
Ù٠اÙÙ
دعÙÙ
</translation>
</message>
@@ -1165,6 +1248,14 @@
<source>Untitled Documents</source>
<translation>Ùثائ٠غÙر Ù
عÙÙÙØ©</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>Ùذ٠عÙ
ÙÙØ© Ùا رجعة ÙÙÙا! </translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1252,6 +1343,64 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Ù
ÙاÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>تعÙÙض</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Ø¥Ùغاء </translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Ø¥Ù٠اÙاسÙ
%1 ÙÙ ÙÙد اÙاستعÙ
اÙ.
+Ø¥Ù٠اÙØÙاظ عÙÙ Ùذا اÙاسÙ
سÙعÙÙض اÙÙØ«ÙÙØ©.
+سÙترتÙب ع٠تÙدÙÙ
اسÙ
جدÙد Ø¥Ùشاء ÙØ«ÙÙØ© جدÙدة.
+</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>ÙثائÙÙ</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>ÙÙ
اذج</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>سÙØ© اÙÙ
ÙÙ
Ùات</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Ùثائ٠غÙر Ù
عÙÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Ùسخ اÙصÙØØ© 1% / 2%</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 صÙØØ© Ù
ÙسÙخة</numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1274,6 +1423,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Ùش٠اÙتÙزÙÙ.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>ÙÙد رÙض اÙÙ
ÙÙÙ
اÙبعÙد اÙاتصا٠(Ùا ÙÙب٠اÙÙ
ÙÙÙ
اÙØ·Ùبات)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ÙÙد أغÙ٠اÙÙ
ÙÙÙ
اÙبعÙد اÙاتصا٠بصÙرة Ù
بÙÙØ±Ø©Ø Ùب٠استÙاÙ
ÙاÙ
٠اÙإجابة ÙÙ
عاÙجتÙا</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>ÙÙ
ÙÙع اÙعثÙر عÙ٠اسÙ
اÙÙ
ضÙ٠اÙبعÙد (اسÙ
Ù
ضÙ٠غÙر صاÙØ)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>ÙÙد اÙتÙت اÙÙ
دة اÙÙ
Øددة ÙÙاتصا٠باÙÙ
ÙÙÙ
اÙبعÙد </translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>تÙ
Ø¥Ùغاء اÙعÙ
ÙÙØ© عبر Ø·Ùبات ÙØ¥Ùغاء() أ٠إغÙاÙ() Ùب٠أ٠تÙتÙÙ.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>ÙÙد Ùش٠اÙتعار٠SSL/TLS ÙÙÙ
ÙÙع Ø¥Ùشاء ÙÙاة Ù
Ø´ÙÙرة. ÙÙا٠Ù
٠اÙÙ
ÙرÙض بث٠إشارة sslErrors().</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>تÙ
Ùطع اÙاتصا٠بسبب اÙÙطاع ع٠اÙشبÙØ©Ø ÙÙ٠أطÙ٠اÙÙظاÙ
اÙتجÙا٠ÙØÙ ÙÙطة دخÙ٠أخرÙ. Ùجب إعادة تÙدÙÙ
اÙØ·Ùب ÙستتÙ
Ù
عاÙجت٠بÙ
جرد إعادة ربط اÙاتصاÙ.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>تÙ
رÙض اÙاتصا٠باÙÙ
ÙÙÙ
اÙÙÙÙÙ (Ùا ÙÙب٠اÙÙ
ÙÙÙ
اÙÙÙÙ٠اÙØ·Ùبات)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ÙÙد أغÙ٠اÙÙ
ÙÙÙ
اÙÙÙÙ٠اÙاتصا٠بصÙرة Ù
بÙÙØ±Ø©Ø Ùب٠استÙاÙ
ÙاÙ
٠اÙإجابة ÙÙ
عاÙجتÙا</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>ÙÙ
ÙÙع اÙعثÙر عÙ٠اسÙ
اÙÙ
ضÙ٠اÙÙÙÙÙ (اسÙ
Ù
ضÙ٠اÙÙÙÙ٠غÙر صاÙØ)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>ÙÙد اÙتÙت اÙÙ
دة اÙÙ
Øددة ÙÙاتصا٠باÙÙ
ÙÙÙ
اÙÙÙÙ٠أ٠اÙÙ
ÙÙÙ
اÙÙÙÙÙ ÙÙ
Ùجب Ù٠اÙÙÙت اÙÙ
Øدد عÙ٠اÙØ·Ùب اÙÙ
رسÙ</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>ÙØ·Ùب اÙÙ
ÙÙÙ
اÙÙÙÙÙ Ù
صادÙØ© Ùصد تÙبÙØ© اÙØ·Ùب ÙÙÙÙÙ ÙÙ
ÙÙب٠بÙاÙات اÙاعتÙ
اد اÙÙ
ÙدÙ
Ø© (Ø¥Ù Ùجدت)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>تÙ
رÙض اÙÙصÙ٠إÙ٠اÙÙ
ØتÙ٠اÙبعÙد (عÙ٠غرار HTTP error 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>اÙعÙ
ÙÙØ© اÙÙ
Ø·ÙÙبة عÙ٠اÙÙ
ØتÙ٠اÙبعÙد غÙر Ù
سÙ
ÙØ Ø¨Ùا</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>ÙÙ
ÙÙع اÙعثÙر عÙ٠اÙÙ
ØتÙ٠اÙبعÙد Ù٠اÙÙ
ÙÙÙ
(عÙ٠غرار HTTP error 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>ÙØ·Ùب اÙÙ
ÙÙÙ
اÙبعÙد Ù
صادÙØ© Ùصد تÙدÙÙ
اÙÙ
ØتÙÙ ÙÙÙ ÙÙ
ÙتÙ
ÙبÙ٠بÙاÙات اÙاعتÙ
اد اÙÙ
ÙدÙ
Ø© (Ø¥Ù Ùجدت)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>Ùجب إرسا٠اÙØ·Ùب Ù
رة أخرÙØ ÙÙÙ Ùذا اÙØ·Ùب Ùش٠عÙ٠سبÙ٠اÙÙ
ثا٠بسبب عدÙ
Ø¥Ù
ÙاÙÙØ© Ùراءة بÙاÙات اÙتØÙ
ÙÙ ÙÙÙ
رة اÙثاÙÙØ©.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Ùا ÙÙ
ÙÙ ÙشبÙØ© اÙاتصا٠API اÙاستجابة ÙÙطب٠ÙØ£Ù٠اÙبرÙتÙÙÙ٠غÙر Ù
عرÙÙ</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>اÙعÙ
ÙÙØ© اÙÙ
Ø·ÙÙبة غÙر صاÙØØ© ÙÙذا اÙبرÙتÙÙÙÙ</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>تÙ
٠اÙتشا٠خطأ Ù
جÙÙÙ Ù
تعÙÙ٠باÙشبÙØ©</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>تÙ
٠اÙتشا٠خطأ Ù
جÙÙÙ Ù
تعÙÙ٠باÙÙÙÙÙ</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>تÙ
٠اÙتشا٠خطأ Ù
جÙÙÙ Ù
تعÙÙ٠باÙÙ
ØتÙ٠اÙبعÙد</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>تÙ
اÙتشا٠عط٠Ù٠اÙبرÙتÙÙÙÙ (خطأ تØÙÙÙØ Ø¥Ø¬Ø§Ø¨Ø§Øª غÙر صاÙØØ© أ٠غÙر Ù
تÙÙعة...)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1342,6 +1590,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>ÙØ´Ù Ù٠تصدÙر... </translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>اÙتصدÙر ÙÙ
ÙÙ UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>تصدÙر اÙÙØ«ÙÙØ©...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>تصدÙر ÙاجØ.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Ùش٠اÙتصدÙر.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>اÙتصدÙر Ø¥ÙÙ Ø´ÙÙ Sankore UBX</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1428,6 +1703,10 @@
<source>Object informations</source>
<translation>Ù
عÙÙÙ
ات ØÙ٠اÙأشÙاء</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>اضاÙØ©</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1510,6 +1789,14 @@
<source>Trash</source>
<translation>سÙØ© اÙÙ
ÙÙ
Ùات</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>اشارات Ù
رجعÙØ©</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>اÙÙÙب</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1543,6 +1830,22 @@
<source>Visible on Extended Screen</source>
<translation>Ù
رئ٠عÙ٠اÙشاشة اÙÙبÙرة</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>اضاÙØ© عÙ
ÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>إزاÙØ© اÙرابط Ø¥Ù٠اÙصÙت</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>إزاÙØ© اÙرابط Ø¥Ù٠اÙصÙØØ©</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>إزاÙØ© اÙرابط Ø¥Ù٠عÙÙا٠اÙÙÙب</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1558,6 +1861,22 @@
<source>Go to Content Source</source>
<translation>اÙØ°Ùاب اÙÙ Ù
صدر اÙÙ
ØتÙÙ</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>اضاÙØ© عÙ
ÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>إزاÙØ© اÙرابط Ø¥Ù٠اÙصÙت</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>إزاÙØ© اÙرابط Ø¥Ù٠اÙصÙØØ©</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>إزاÙØ© اÙرابط Ø¥Ù٠عÙÙا٠اÙÙÙب</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1578,13 +1897,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>اÙÙÙب</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1645,6 +1957,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (Ù
جÙ
Ùعة اÙÙثائÙ) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1853,6 +2172,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>اÙعÙاÙ
Ø© Øساسة ÙÙضغط</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>إعداد أصÙÙ</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>اÙعربÙØ©</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>اÙبÙغارÙØ©</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>اÙÙاتاÙÙÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>اÙتشÙÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>اÙدÙÙ
ارÙÙØ©</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>اÙØ£ÙÙ
اÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>اÙÙÙÙاÙÙØ©</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>اÙاÙجÙÙزÙØ©</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>اÙاÙجÙÙزÙØ© اÙÙ
Ù
ÙÙØ© اÙÙ
تØدة</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>اÙاسباÙÙØ©</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>اÙÙرÙسÙØ©</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>اÙÙرÙسÙØ© اÙسÙÙسرÙØ©</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>اÙاÙطاÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>اÙعبرÙØ©</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>اÙÙاباÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>اÙÙÙرÙØ©</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>اÙÙ
ÙغاشÙØ©</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>اÙÙرÙÙجÙØ©</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>اÙÙÙÙÙدÙØ©</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>اÙبÙÙÙÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>اÙرÙÙ
اÙØ´ÙØ©</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>اÙرÙÙ
اÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>اÙرÙسÙØ©</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>اÙسÙÙÙاÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>اÙسÙÙدÙØ©</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>اÙترÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>اÙصÙÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>اÙصÙÙÙØ© اÙÙ
بسطة</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>اÙصÙÙÙØ© اÙتÙÙÙدÙØ©</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>اÙÙÙرسÙØ©</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>اÙÙÙدÙØ©</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1894,6 +2349,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>Ø£ÙÙاÙ
Ù</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Ù
رئ٠Ù٠اÙÙ
رÙØ© اÙÙادÙ
Ø©</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2014,27 +2480,27 @@ Do you want to ignore these errors for this host?</source>
</message>
<message>
<source>Attribution CC BY</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution CC BY</translation>
</message>
<message>
<source>Attribution-NoDerivs CC BY-ND</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-NoDerivs CC BY-ND</translation>
</message>
<message>
<source>Attribution-ShareAlike CC BY-SA</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-ShareAlike CC BY-SA</translation>
</message>
<message>
<source>Attribution-NonCommercial CC BY-NC</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-NonCommercial CC BY-NC</translation>
</message>
<message>
<source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</translation>
</message>
<message>
<source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</translation>
</message>
<message>
<source>Public domain</source>
@@ -2107,21 +2573,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>تخزÙÙ Ù
ؤÙت</translation>
</message>
- <message>
- <source>Aristo</source>
- <translatorcomment>More context needed</translatorcomment>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>صÙØØ© ÙاÙ
ÙØ©</translation>
</message>
<message>
- <source>Web</source>
- <translation>اÙÙÙب</translation>
+ <source>Embed </source>
+ <translation>تضÙ
ÙÙ</translation>
</message>
</context>
<context>
@@ -2469,6 +2930,49 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>اختÙار Ù
ØتÙÙ ÙÙاÙ
سا٠بÙ:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>اسÙ
اÙتطبÙÙ</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>تÙÙÙد ÙإخÙاء اÙÙ
سؤÙÙÙØ©.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>تÙ
تطÙÙر Ùذ٠اÙÙظÙÙØ© ÙÙعÙ
٠عÙ٠صÙØات اÙÙÙب اÙØ£Ùثر Ø´ÙÙعا.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Ùرج٠اØتراÙ
ØÙÙ٠اÙتأÙÙÙ ÙاÙÙشر ÙÙÙ
ا ÙتعÙ٠بإÙشاء رÙابط أ٠استعÙ
ا٠Ù
ØتÙÙات Ù
٠شبÙØ© اÙØ¥ÙترÙت.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>اÙتÙزÙ٠إÙ٠اÙÙ
Ùتبة</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>اÙتÙزÙÙ Ù٠اÙصÙØØ© اÙØاÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>اضاÙØ© اÙرابط Ø¥Ù٠اÙÙ
Ùتبة</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>إضاÙØ© اÙرابط Ø¥Ù٠اÙصÙØØ© اÙØاÙÙØ©</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download PDF Document: would you prefer to download the PDF file or add it to the current Sankore document?</source>
@@ -2545,6 +3049,10 @@ p, li { white-space: pre-wrap; }
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">باÙضغط عÙÙ 'تØÙ
ÙÙ'Ø ØªØ´ÙدÙ٠أÙÙÙ
تÙ
ÙÙÙÙ ÙÙ ØÙÙ٠اÙÙ
ØتÙ٠أ٠أÙÙÙ
تÙ
ÙÙÙ٠رخصة Ù
Ù Ù
اÙ٠اÙØÙÙÙ ÙÙشر اÙÙ
ØتÙ٠عÙ٠اÙÙÙتÙØ¨Ø ÙØ£ÙÙ ÙخترÙ
شرÙØ· استعÙ
ا٠ÙبÙÙتÙب اÙÙ
ÙجÙدة ÙÙ </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html>
</translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>استعادة بÙاÙات اÙاعتÙ
اد عÙد إعادة اÙتÙ
ÙÙد</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2725,22 +3233,10 @@ p, li { white-space: pre-wrap; }
<translation>رخص</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>About</source>
<translation>ØÙÙ</translation>
</message>
@@ -2800,10 +3296,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>اÙÙ
رÙر:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>Ù
عرÙÙ ÙÙÙب Sankoré </translation>
- </message>
<message>
<source>User:</source>
<translation>اÙÙ
ستعÙ
Ù:</translation>
@@ -2813,558 +3305,72 @@ p, li { white-space: pre-wrap; }
<translation>اÙÙ
رÙر:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Credits</source>
<translation>اÙØ´Ùر Ø¥ÙÙ</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>إطÙا٠اÙإرشادات</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> ÙÙدÙÙ
اÙبرÙاÙ
ج ÙÙ
ا ÙÙØ Ø¯Ù٠أ٠ضÙ
ا٠صرÙØ Ø£Ù Ø¶Ù
ÙÙ. ÙÙÙ ÙÙÙÙ Ù
Ø·Ùر٠اÙبرÙاÙ
ج Ù
سؤÙÙÙÙ Ù٠أ٠Øا٠Ù
٠اÙØ£ØÙا٠ع٠أÙØ© أضرار Ùاتجة ع٠اÙاستعÙ
اÙ.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> ÙرخÙص Ùأ٠شخص استعÙ
ا٠Ùذا اÙبرÙاÙ
ج Ùأ٠غرض ÙاÙØ Ø¨Ù
ا ÙÙ Ø°Ù٠اÙاستعÙ
اÙات اÙتجارÙØ© ÙتغÙÙر٠Ùإعادة تÙزÙع٠بØرÙØ© ÙÙÙ Ù
ع اØتراÙ
اÙشرÙØ· اÙتاÙÙØ©:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 1. Ùجب عدÙ
إخÙاء Ù
صدر اÙبرÙاÙ
Ø¬Ø Ùا ÙÙ
ÙÙÙÙ
ادعاء Ø£ÙÙÙ
Ù
Ù Ø·ÙرتÙ
اÙبرÙاÙ
ج اÙأصÙÙ. ÙÙ Øا٠استعÙ
اÙÙÙ
ÙÙبرÙاÙ
ج ÙÙ Ù
Ùتج Ù
Ø§Ø Ù
٠اÙÙ
ستØس٠ذÙر Ø°ÙÙ Ù٠دÙÙ٠اÙÙ
Ùتج ÙÙÙÙ ÙبÙÙ Ø°Ù٠اختÙارÙا.
-</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Ùجب اÙإعÙا٠صراØØ© ع٠اÙÙسخ اÙأصÙÙØ© اÙت٠ÙÙع تغÙÙرÙا ÙÙجب عدÙ
تÙدÙÙ
Ùا بصÙتÙا اÙÙ
Ùتج اÙأصÙÙ.
-</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3.Ùا ÙÙ
Ù٠إزاÙØ© Ùذ٠اÙÙØ«ÙÙØ© أ٠تغÙÙرÙا Ù٠أ٠تÙزÙع ÙÙبرÙاÙ
ج.
-</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html>
-</translation>
+ <source>Show start up tips</source>
+ <translation>إظÙار إطÙا٠اÙإرشادات</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>اÙÙغة</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>اختÙار اÙÙغة</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>سÙتÙ
٠تØÙ
Ù٠اÙÙغة اÙجدÙدة عÙد تشغÙ٠اÙبرÙاÙ
ج Ù
٠جدÙد</translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>إغÙا٠Open-Sankoré</translation>
</message>
<message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>ÙÙÙØ© Planète Sankoré ÙتصدÙر اÙÙØ«ÙÙØ©</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>استعادة بÙاÙات اÙاعتÙ
اد عÙد إعادة اÙتÙ
ÙÙد</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré Ùسخة 1.4 Ø ØÙÙ٠اÙتأÙÙÙ 2010-2012 ÙÙGroupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
-(GIP ENA)<br /><br />Open-Sankoré Ù٠برÙاÙ
ج ØرÙ: ÙÙ
ÙÙÙÙ
إعادة تÙزÙع٠Ù/أ٠تغÙÙر شرط اØتراÙ
شرÙØ· Lesser GNU general Public Licence (GNU LGPL) ÙÙ
ا ÙÙ Ù
ÙØ´Ùرة Ù
Ù Ùب٠Free Software Foundation Ù٠اÙÙسخة اÙثاÙÙØ© ÙاÙÙسخ اÙتاÙÙØ©.
-<br />ÙÙ
ÙÙÙÙ
اÙاطÙاع عÙÙ Ù
صدر اÙتعÙÙÙ
ات اÙبرÙ
جÙØ© ÙÙبرÙاÙ
ج ÙتØÙ
ÙÙ٠عÙÙ</span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />ÙÙع تÙزÙع Open-Sankoré بأÙ
٠أ٠ÙÙÙÙ Ù
ÙÙدا ÙÙ٠دÙ٠أ٠ضÙ
اÙØ Ù
٠دÙÙ Øت٠ضÙ
ا٠ضÙ
ÙÙ ÙÙتسÙÙ٠أ٠اÙتÙÙÙÙ Ù
ع Ù
Ùتج بعÙÙÙ.<br />ÙÙ
ÙÙÙÙ
اÙاطÙاع عÙ٠رخصة Lesser GNU General Public Licence اÙÙ
ÙجÙد Ù٠باب اÙرخص أ٠زÙارة اÙÙ
ÙÙع </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />اÙÙاتÙ: 01 43 17 68 08<br />اÙبرÙد اÙØ¥ÙÙترÙÙÙ: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Ø¥Ù٠اÙتراخÙص Ù٠باÙÙغة اÙاÙجÙÙزÙØ© ÙاØتراÙ
اÙترجÙ
Ø© اÙرسÙ
ÙØ© ÙاÙÙاÙÙÙÙØ© اÙÙ
صاد٠عÙÙÙا.</span></p></td></tr></table></body></html>
</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
<name>trapFlashDialog</name>
diff --git a/Sankore-3.1/resources/i18n/sankore_bg.ts b/Sankore-3.1/resources/i18n/sankore_bg.ts
index e96f00b..13e5681 100644
--- a/Sankore-3.1/resources/i18n/sankore_bg.ts
+++ b/Sankore-3.1/resources/i18n/sankore_bg.ts
@@ -189,6 +189,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>ÐÑмеÑка</translation>
</message>
<message>
@@ -708,14 +709,6 @@
<translation>ÐонÑигÑÑаÑии на запиÑа на подкаÑÑ</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>ÐнÑÑÑÑÐ¼ÐµÐ½Ñ Ð·Ð° Flash ÑÑдÑÑжание</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>СÑдÑÑжание на Flash</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>ÐнÑÑÑÑÐ¼ÐµÐ½Ñ Ð·Ð° ÑÑдÑÑжание Ð¾Ñ Ð¼ÑежаÑа</translation>
</message>
@@ -736,14 +729,6 @@
<translation>Снимане на пÑозоÑеÑ</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>ÐмÑкване на ÑÑдÑÑжание Ð¾Ñ Ð¼ÑежаÑа</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Снимане на ÑÑдÑÑжание Ð¾Ñ Ð¼ÑежаÑа</translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation>Ðокажи Ð³Ð»Ð°Ð²Ð½Ð¸Ñ ÐµÐºÑан </translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>ÐÑÑпиÑай</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation>ÐзÑегли в библиоÑекаÑа</translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>ÐзÑегли в библиоÑекаÑа</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation>ÐзÑегли на ÑекÑÑаÑа ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>ÐзÑегли на ÑекÑÑаÑа ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation>Ðобави линка кÑм библиоÑекаÑа</translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Ðобави линка кÑм библиоÑекаÑа</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation>Ðобави линка кÑм ÑекÑÑаÑа ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Ðобави линка кÑм ÑекÑÑаÑа ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">ÐÑмеÑка</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1010,110 @@
<translation>ФоÑма:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>РазмеÑ:</translation>
+ <source>Alpha:</source>
+ <translation>ÐлÑа</translation>
</message>
<message>
- <source>Close</source>
- <translation>ÐаÑвоÑи</translation>
+ <source>Geometry:</source>
+ <translation>ÐеомеÑÑиÑ</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>ШиÑина</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>ÐиÑоÑина</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Ðапази пÑопоÑÑийÑе</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Ðид</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>ÐÑедваÑиÑелен пÑеглед</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>ÐаÑвоÑи кеÑа</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation>пÑÑни ÑÑдÑÑжаниеÑо</translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>ÐзобÑажениÑÑа не Ñа пÑиеÑи</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Ðе може да покаже данни</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>ÐÑÑнаÑиÑÑ Ñайл не е ÑÐ°Ð·Ð¿Ð¾Ð·Ð½Ð°Ñ ÐºÐ°Ñо аÑдио Ñайл</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>ÐÑзпÑоизвеждане на аÑдио Ñайл</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>ÐобавÑне на вÑÑзка кÑм ÑÑÑаниÑаÑа</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>ÐобавÑне на вÑÑзка кÑм Уеб ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>ÐлÑзнеÑе и пÑÑнеÑе аÑдио Ñайла Ð¾Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекаÑа в Ñова поле</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>ÐобÑе</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>СледваÑа ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>ÐÑедиÑна ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Ðаглавна ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>ÐоÑледна ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>СÑÑаниÑа номеÑ</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>ÐмÑкнеÑе URL ÑекÑÑ ÑÑк</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>ÐÑемаÑ
ни ÑÑÑаниÑаÑа</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>ÐÑемаÑ
ни докÑменÑа</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>СигÑÑни ли ÑÑе, Ñе иÑкаÑе да пÑемаÑ
неÑе докÑменÑа '%1'?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>ÐзпÑазни коÑÑеÑо</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>СигÑÑни ли ÑÑе, Ñе иÑкаÑе да изпÑазниÑе коÑÑеÑо?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>ÐзпÑазване на коÑÑе</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>ÐоÑÑеÑо е изпÑазнено</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>ÐÑемаÑ
ни папка</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>СигÑÑни ли ÑÑе, Ñе иÑкаÑе да пÑемаÑ
неÑе папка '%1' и вÑиÑко коеÑо ÑÑдÑÑжа? </translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Ðе е избÑан докÑменÑ!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>ÐÑвоÑи поддÑÑжани Ñайлове</translation>
</message>
@@ -1161,6 +1245,14 @@
<source>Untitled Documents</source>
<translation>Ðеозаглавени докÑменÑи</translation>
</message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1248,6 +1340,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>ÐÑиеми</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Смени</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>ÐÑкажи</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>ÐмеÑо %1 е веÑе изпозлвано.
+ÐапазванеÑо на имеÑо Ñе замени докÑменÑа.
+ÐÑигÑÑÑванеÑо на ново име Ñе ÑÑздаде нов докÑменÑ.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>ÐоиÑе докÑменÑи</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Ðодели</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>ÐоÑÑе</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Ðеозаглавени докÑменÑи</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">ÐопиÑане на ÑÑÑаниÑа %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 ÑÑÑаниÑа копиÑана</numerusform>
+ <numerusform>%1 ÑÑÑаниÑи копиÑани</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1266,6 +1411,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>ÐзÑеглÑнеÑо Ñе пÑовали</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>оÑдалеÑениÑÑ ÑÑÑвÑÑ Ð¾Ñказа ÑвÑÑзване(ÑÑÑвÑÑÑÑ Ð½Ðµ пÑиема заÑвки)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>оÑдалеÑениÑÑ ÑÑÑвÑÑ Ð·Ð°ÑвоÑи вÑÑзкаÑа пÑеждевÑеменно, пÑеди ÑелиÑÑ Ð¾ÑÐ³Ð¾Ð²Ð¾Ñ Ð´Ð° бÑде пÑÐ¸ÐµÑ Ð¸ обÑабоÑен</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>оÑдалеÑеноÑо Ñ
оÑÑ Ð¸Ð¼Ðµ не беÑе намеÑено(невалидно Ñ
оÑÑ Ð¸Ð¼Ðµ)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>вÑÑзкаÑа Ñ Ð¾ÑдалеÑÐµÐ½Ð¸Ñ ÑÑÑвÑÑ Ð¸Ð·ÑеÑе</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>опеÑаÑиÑÑа беÑе оÑменена пÑез Ð¿Ð¾Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° abort() или close() пÑеди да бÑде завÑÑÑена.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>SSL/TLS ÑÑкоÑÑиÑканеÑо Ñе пÑовали и кÑипÑиÑаниÑÑ ÐºÐ°Ð½Ð°Ð» не може да бÑде доÑÑигнаÑ. СигналÑÑ sslErrors() е ÑÑÑбвало да бÑде оÑвободен.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>вÑÑзкаÑа беÑе пÑекÑÑнаÑа поÑади изклÑÑване Ð¾Ñ Ð¼ÑежаÑа, обаÑе ÑиÑÑемаÑа иниÑииÑа ÑоÑминг до дÑÑга доÑÑÑпна ÑоÑка. ÐаÑвкаÑа ÑÑÑбва да бÑде пÑепÑаÑена и Ñе бÑде обÑабоÑена веднага Ñлед каÑо вÑÑзкаÑа бÑде пÑеÑÑÑановена.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>вÑÑзкаÑа кÑм proxy ÑÑÑвÑÑа беÑе оÑказана(proxy ÑÑÑвÑÑа не пÑиема заÑвки)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>proxy ÑÑÑвÑÑÑÑ Ð·Ð°ÑвоÑи вÑÑзкаÑа пÑеждевÑеменно, пÑеди ÑелиÑÑ Ð¾ÑÐ³Ð¾Ð²Ð¾Ñ Ð´Ð° бÑде пÑÐ¸ÐµÑ Ð¸ обÑабоÑен</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>proxy Ñ
оÑÑ Ð¸Ð¼ÐµÑо не беÑе намеÑено (невалидно proxy Ñ
оÑÑ Ð¸Ð¼Ðµ)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>вÑÑзкаÑа кÑм proxy изÑеÑе или proxy ÑÑÑвÑÑÑÑ Ð½Ðµ е оÑговоÑил на вÑеме на изпÑаÑенаÑа заÑвка</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>proxy ÑÑÑвÑÑÑÑ Ð¸Ð·Ð¸Ñква ÑдоÑÑовеÑение, за да Ñважи заÑвкаÑа, но не пÑиема никакви пÑедложени пÑлномоÑиÑ(ако има Ñакива)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>доÑÑÑпÑÑ Ð´Ð¾ диÑÑанÑионноÑо ÑÑдÑÑжание е оÑказан(подобно на HTTP гÑеÑка 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>изиÑкана опеÑаÑÐ¸Ñ Ð²ÑÑÑ
Ñ Ð´Ð¸ÑÑанÑÐ¸Ð¾Ð½Ð½Ð¾Ñ ÑÑдÑÑжание не е ÑазÑеÑена</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>диÑÑанÑионноÑо ÑÑдÑÑжание не беÑе намеÑено на ÑÑÑвÑÑа(подобно на HTTP гÑеÑка 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>диÑÑанÑионниÑÑ ÑÑÑвÑÑ Ð¸Ð·Ð¸Ñква ÑдоÑÑовеÑение да пÑедоÑÑави ÑÑдÑÑжаниеÑо, но пÑедоÑÑавениÑе пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ бÑÑ
а пÑиеÑи(ако има Ñакива)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>заÑвкаÑа ÑÑÑбваÑе да бÑде изпÑаÑена оÑново, но изпÑаÑанеÑо Ñе пÑовали заÑоÑо каÑенаÑа инÑоÑмаÑÐ¸Ñ Ð½Ðµ можа да Ñе пÑоÑеÑе вÑоÑи пÑÑ.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>API мÑежаÑа за доÑÑÑп не може да Ñважи заÑвкаÑа, заÑоÑо пÑоÑколÑÑ Ðµ непознаÑ.</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>изиÑкана опеÑаÑÐ¸Ñ Ðµ невалидна за Ñози пÑоÑокол</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>непознаÑ, ÑвÑÑзан Ñ Ð¼ÑежаÑа пÑоблем, беÑе заÑеÑен</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>непознаÑ, ÑвÑÑзан Ñ proxy ÑÑÑвÑÑа пÑоблем, беÑе заÑеÑен</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>непознаÑ, ÑвÑÑзан Ñ Ð´Ð¸ÑÑанÑионноÑо ÑÑдÑÑжание пÑоблем, беÑе заÑеÑен</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>ÑÑÑпване в пÑоÑокола, беÑе заÑеÑено (ÑазбоÑна гÑеÑка, невалидни или неоÑаквани оÑговоÑи и Ñ.н.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1334,6 +1578,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Ðе можа да Ñе екÑпоÑÑиÑа...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>ÐкÑпоÑÑиÑай каÑо UBX Ñайл</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>ÐкÑпоÑÑиÑане на докÑменÑа...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>ÐкÑпоÑÑиÑанеÑо беÑе ÑÑпеÑно.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>ÐкÑпоÑÑиÑанеÑо Ñе пÑовали.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>ÐкÑпоÑÑиÑай каÑо Sankore UBX Format</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1420,6 +1691,10 @@
<source>Object informations</source>
<translation>ÐнÑоÑмаÑÐ¸Ñ Ð·Ð° обекÑа</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Ðобави</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1502,6 +1777,14 @@
<source>Trash</source>
<translation>ÐоÑÑе</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>ÐÑмеÑки</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>ÐÑежа</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1535,6 +1818,22 @@
<source>Visible on Extended Screen</source>
<translation>Ðидим на вÑоÑÐ¸Ñ ÐµÐºÑан</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>ÐÑведеÑе дейÑÑвие</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>ÐÑемаÑ
ни аÑдио линк</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>ÐÑемаÑ
ни линк кÑм ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>ÐÑемаÑ
ни линк кÑм Ñеб ÑÑÑаниÑа</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1550,6 +1849,22 @@
<source>Go to Content Source</source>
<translation>ÐÑиди кÑм изÑоÑника на ÑÑдÑÑжаниеÑо</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>ÐÑведеÑе дейÑÑвие</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>ÐÑемаÑ
ни аÑдио линк</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>ÐÑемаÑ
ни линк кÑм ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>ÐÑемаÑ
ни линк кÑм Ñеб ÑÑÑаниÑа</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1570,13 +1885,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>ÐÑежа</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1637,6 +1945,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>ÐÑвоÑи-Sankore (поÑеди Ð¾Ñ Ð´Ð¾ÐºÑменÑи) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1851,6 +2166,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>ЧÑвÑÑвиÑелен на наÑиÑк маÑкеÑ</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>ÐÑабÑки</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>ÐÑлгаÑÑки</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>ÐаÑалонÑки</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>ЧеÑки</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>ÐаÑÑки</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>ÐемÑки</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>ÐÑÑÑки</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>ÐнглийÑки</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>ÐнгийÑки ÐбединеноÑо кÑалÑÑво</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>ÐÑпанÑки</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>ФÑенÑки</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>ЩвейÑаÑÑки ÑÑенÑки</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>ÐÑалианÑки</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>ÐвÑиÑ</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>ЯпонÑки</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>ÐоÑейÑки</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>ÐадагаÑкаÑÑки</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>ÐоÑвежки</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>ХоландÑки</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>ÐолÑки</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Ð ÑмÑнÑки</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Ð ÑÑки</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>СловаÑки</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>ШведÑки</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>ТÑÑÑки</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ÐиÑайÑки</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ÐпÑоÑÑен ÐиÑайÑки</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>ТÑадиÑионен ÐиÑайÑки</translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1882,15 +2333,26 @@ Do you want to ignore these errors for this host?</source>
<translation>ÐпиÑание:</translation>
</message>
<message>
- <source>Publish</source>
- <translation>ÐÑбликÑвай</translation>
+ <source>Publish</source>
+ <translation>ÐÑбликÑвай</translation>
+ </message>
+</context>
+<context>
+ <name>UBSettings</name>
+ <message>
+ <source>My Movies</source>
+ <translation>ÐоиÑе Ñилми</translation>
+ </message>
+ <message>
+ <source>/Web</source>
+ <translation>/Уеб</translation>
</message>
</context>
<context>
- <name>UBSettings</name>
+ <name>UBStartupHintsPalette</name>
<message>
- <source>My Movies</source>
- <translation>ÐоиÑе Ñилми</translation>
+ <source>Visible next time</source>
+ <translation>Ðидим ÑледваÑÐ¸Ñ Ð¿ÑÑ</translation>
</message>
</context>
<context>
@@ -2105,20 +2567,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>ÐеÑ</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation type="obsolete">ÐÑиÑÑо</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>ЦÑлаÑа ÑÑÑаниÑа</translation>
</message>
<message>
- <source>Web</source>
- <translation>ÐÑежа</translation>
+ <source>Embed </source>
+ <translation>ÐгÑади</translation>
</message>
</context>
<context>
@@ -2464,6 +2922,49 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>ÐзбеÑеÑе ÑÑдÑÑжание, коеÑо да заемеÑе:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Ðме на пÑиложениеÑо</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>ÐгÑаниÑаване и поемане на оÑговоÑноÑÑ</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Тази ÑÑнкÑÐ¸Ñ Ðµ ÑазÑабоÑена да ÑабоÑи Ñ Ð½Ð°Ð¹ - ÑазпÑоÑÑÑанениÑе Ñеб ÑÑÑаниÑи.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>ÐолÑ, ÑпазвайÑе авÑоÑÑкиÑе пÑава за ÑÑздаване на вÑÑзки или заемане на ÑÑдÑÑжание Ð¾Ñ Ð¼ÑежаÑа.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2541,7 +3042,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>ÐÑзÑÑановÑване на пÑлномоÑиÑÑа пÑи ÑеÑÑаÑÑиÑане</translation>
</message>
</context>
<context>
@@ -2739,22 +3240,10 @@ p, li { white-space: pre-wrap; }
<translation>ÐиÑенз</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>ÐÑвоÑенSSI</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>мÑежа</translation>
</message>
@@ -2798,10 +3287,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>ÐаÑола:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">Planete СанкоÑе ID</translation>
- </message>
<message>
<source>User:</source>
<translation>ÐоÑÑебиÑел:</translation>
@@ -2811,1034 +3296,62 @@ p, li { white-space: pre-wrap; }
<translation>ÐаÑола:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS</translation>
- </message>
- <message>
<source>Credits</source>
<translation>ÐзгоÑвили</translation>
</message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ID - за екÑпоÑÑиÑане на Ñайл</translation>
+ </message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">ÐиÑензиÑе Ñа на английÑки език, за да Ñе запази пÑÐ»Ð½Ð¸Ñ ÑмиÑÑл на одобÑÐµÐ½Ð¸Ñ ÑекÑÑ.</span></p></td></tr></table></body></html></translation>
+ <source>Restore credentials on reboot </source>
+ <translation>ÐÑзÑÑановÑване на пÑлномоÑиÑÑа пÑи ÑеÑÑаÑÑиÑане </translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Този ÑоÑÑÑÐµÑ Ðµ пÑедоÑÑавен вÑв вида в койÑо го виждаÑе, без гаÑанÑии. РникакÑв ÑлÑÑай авÑоÑиÑе не Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð´ÑÑжани оÑговоÑни за вÑеди поÑодени Ð¾Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½ÐµÑо на Ñози ÑоÑÑÑеÑ.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Ðава Ñе ÑазÑеÑение за ползване на Ñози ÑоÑÑÑеÑ, ÑазÑеÑениеÑо Ñе дава на вÑеки и за вÑÑкакви Ñели, вкл. комеÑÑиални Ñели, какÑо Ñвободна пÑомÑна на ÑÑдÑÑжаниеÑо и Ñвободно копиÑане и ÑазпÑоÑÑÑанение. СÑÑеÑÑвÑÐ²Ð°Ñ ÑледниÑе огÑаниÑениÑ:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 1. ÐзÑоÑника на ÑоÑÑÑеÑа ÑÑÑбва да бÑде пÑедÑÑавен, Ñой не може да бÑде злепоÑÑавÑн, нÑмаÑе пÑаво да Ñи пÑиÑвоÑваÑе пÑаваÑа за авÑоÑÑÑво на Ñози ÑоÑÑÑеÑ. Ðко ползваÑе Ñози ÑоÑÑÑеÑ, ÑиÑиÑанеÑо на неговиÑе авÑоÑи Ñе бÑде пÑиеÑо добÑе, но не е задÑлжиÑелно.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Ðко ÑÑздадеÑе ÑазлиÑна веÑÑÐ¸Ñ Ð½Ð° Ñози ÑоÑÑÑÐµÑ ÑÑÑбва да го обÑвиÑе видно, и да не пÑедÑÑавÑÑе ÑвоÑÑа веÑÑÐ¸Ñ Ð·Ð° оÑигиналнаÑа.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. Това ÑÑобÑение не може да бÑде пÑемаÑ
вано Ð¾Ñ Ð²Ð°ÑаÑа нова веÑÑÐ¸Ñ Ð¸Ð»Ð¸ модиÑикаÑÐ¸Ñ Ð½Ð° Ñози ÑоÑÑÑеÑ.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Start up tips</source>
+ <translation>СÑвеÑи пÑи ÑÑÑаÑиÑане</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré веÑÑÐ¸Ñ 1.4 , ÐÑиÑки пÑава Ñа запазени (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
+ <message>
+ <source>Show start up tips</source>
+ <translation>Ðоказване на ÑÑвеÑи пÑи ÑÑÑаÑиÑане</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Ðзик</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>ÐзбеÑи език</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>ÐовиÑÑ ÐµÐ·Ð¸Ðº Ñе бÑде заÑеден на ÑледваÑиÑÑ ÑеÑÑаÑÑ</translation>
</message>
<message utf8="true">
- <source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <source>Close Open-Sankoré</source>
+ <translation>ÐаÑовÑи ÐÑвоÑи-Sankoré</translation>
</message>
<message>
- <source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <source>OpenSSL</source>
+ <translation>ÐÑвоÑи SSL</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
- <message utf8="true">
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_ca.ts b/Sankore-3.1/resources/i18n/sankore_ca.ts
index b7ee62c..97e68d3 100644
--- a/Sankore-3.1/resources/i18n/sankore_ca.ts
+++ b/Sankore-3.1/resources/i18n/sankore_ca.ts
@@ -265,6 +265,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Adreça d'interès</translation>
</message>
<message>
@@ -628,14 +629,6 @@
<translation>Captura una finestra</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Incrusta contingut web</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Captura contingut web incrustable</translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation>Mostra la pantalla principal a la pantalla</translation>
</message>
@@ -736,14 +729,6 @@
<translation>Configura l'enregistrament del podcast</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Captura d'objectes Flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Captura un objecte Flash</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Captura de contingut web</translation>
</message>
@@ -823,6 +808,44 @@
<source>Group</source>
<translation>Agrupa</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Descarrega-ho a</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">biblioteca</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translatorcomment>Descarrega-ho a la biblioteca</translatorcomment>
+ <translation>Download to library</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Descarrega-ho a</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">pà gina actual</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Descarrega-ho a la pà gina actual</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Afegeix un enllaç a</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">biblioteca</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Afegeix un enllaç a la biblioteca</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Afegeix un enllaç a</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">pà gina actual</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Afegeix un enllaç a la pà gina actual</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Adreça d'interès</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1011,110 @@
<translation>Forma:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Mida:</translation>
+ <source>Alpha:</source>
+ <translation>Opacitat:</translation>
</message>
<message>
- <source>Close</source>
- <translation>Tanca</translation>
+ <source>Geometry:</source>
+ <translation>Geometria:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Amplada:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Alçada:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Mantén les proporcions</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Modalitat:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Previsualització:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Tanca la memòria cau</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><deixa-hi caure quelcom></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>No s'accepten imatges</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Les dades no es poden mostrar</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>El fitxer que heu deixat caure no és de so digital</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Reprodueix un fitxer de so</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Afegeix un enllaç a la pà gina</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Afegeix un enllaç a una pà gina web</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Arrossega i deixa caure un fitxer de so de la llibreria dins d'aquesta caixa</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>D'acord</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Pà gina següent</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>PÃ gina anterior</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>PÃ gina de tÃtol</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Darrera pà gina</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Número de pà gina</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Inseriu aquà el text de l'URL</translation>
</message>
</context>
<context>
@@ -1058,42 +1179,6 @@
<translation>Suprimeix la pà gina</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Suprimeix el document</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Esteu segur que voleu eliminar el document '%1'?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Buida la paperera</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Esteu segur que voleu buidar la paperera?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>S'està buidant la paperera</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>S'ha buidat la paperera</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Suprimeix la carpeta</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Esteu segur que voleu suprimir la carpeta '%1' i tot el seu contingut?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>No hi ha cap document seleccionat!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Obre un fitxer acceptat</translation>
</message>
@@ -1161,6 +1246,14 @@
<source>Untitled Documents</source>
<translation>Documents sense tÃtol</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1248,6 +1341,60 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>D'acord</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Reemplaça</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancel·la</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>El nom %1 ja s'està utilitzant.
+Si manteniu aquest nom es reemplaçarà el document.
+Si indiqueu un nom diferent es crearà un document nou.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Els meus documents</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Models</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Paperera</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Documents sense nom</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">S'està copiant la pà gina %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 pà gina copiada</numerusform>
+ <numerusform>%1 pà gines copiades</numerusform>
+ <numerusform>%1 pà gines copiades</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1267,6 +1414,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>No s'ha pogut baixar.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>el servidor remot ha refusat la connexió (el servidor no està acceptant peticions)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>el servidor remot ha tancat la connexió de manera prematura, abans que la resposta pogués ser rebuda i processada del tot</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>no s'ha trobat el nom del servidor remot (invalid hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>la connexió al servidor remot ha caducat</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>l'operació ha estat cancel·lada mitjançant crides a les funcions avorta() o tanca() abans de finalitzar.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>la conformitat de connexió SSL/TLS ha fallat i no s'ha pogut establir el canal de comunicació encriptada. S'hauria d'haver emès el senyal sslErrors().</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>la connexió s'ha tallat degut a una desconnexió de la xarxa, però el sistema ha iniciat l'itinerari cap a un altre punt d'accés. La petició s'ha de tornar a enviar i serà processada tan aviat com es restableixi la connexió.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>la connexió amb el servidor intermediari ha estat refusada (el servidor intermediari no està acceptant peticions)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>el servidor intermediari ha tallat la connexió prematurament, abans que la resposta pogués ser rebuda i processada del tot</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>no s'ha trobat el nom del servidor intermediari (invalid proxy hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>la connexió amb el servidor intermediari ha caducat, o el servidor no ha respost a temps a la petició enviada</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>el servidor intermediari requereix d'autenticació per tal d'acceptar la petició, però no ha acceptat cap de les credencials que li heu presentat (si és que n'heu presentat alguna)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>l'accés al contingut remot ha estat denegat (semblant a l'error HTTP 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>l'operació sol·licitada al contingut remot no està permesa</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>el contingut remot no s'ha trobat al servidor (similar a l'error HTTP 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>el servidor remot requereix d'autenticació per tal d'acceptar la petició, però no ha acceptat cap de les credencials que li heu presentat (si és que n'heu presentat alguna)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>la petició s'ha de tornar a enviar, però això no és possible (per exemple perquè les dades que s'havien d'enviar no es poden llegir per segona vegada).</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>el servei d'accés a la xarxa no pot acceptar la petició perquè el protocol és desconegut</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>l'operació sol·licitada és invà lida per a aquest protocol</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>s'ha detectat un error desconegut relacionat amb la xarxa</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>s'ha detectat un error desconegut relacionat amb el servidor intermediari</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>s'ha detectat un error desconegut relacionat amb el contingut remot</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>s'ha detectat un trencament en el protocol (error d'à nà lisi, respostes invà lides o inesperades, etc.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1335,6 +1581,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Ha fallat l'exportació...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exporta com a fitxer UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>S'està exportant el document...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>L'exportació ha estat correcta.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>L'exportació ha fallat.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exporta al format UBX del Sankoré</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1421,6 +1694,10 @@
<source>Object informations</source>
<translation>Informacions de l'objecte</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Afegeix</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1503,6 +1780,14 @@
<source>Trash</source>
<translation>Paperera</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Adreces d'interès</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1536,6 +1821,22 @@
<source>Visible on Extended Screen</source>
<translation>Visible a la pantalla estesa</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Afegeix una acció</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Elimina l'enllaç al so</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Elimina l'enllaç a la pà gina</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Elimina l'enllaç a l'adreça web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1551,6 +1852,22 @@
<source>Go to Content Source</source>
<translation>Ves a la font de contingut</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Afegeix una acció</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Elimina l'enllaç al so</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Elimina l'enllaç a la pà gina</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Elimina l'enllaç a l'adreça web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1571,13 +1888,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1638,7 +1948,14 @@
</message>
</context>
<context>
- <name>UBImportImage</name>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open Sankoré (conjunt de documents) (*.ubx)</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportImage</name>
<message>
<source>Image Format (</source>
<translation>Format d'imatge (</translation>
@@ -1852,6 +2169,142 @@ Voleu ignorar aquests errors per a aquest amfitrió?</translation>
<source>Marker is pressure sensitive</source>
<translation>El marcador és sensible a la pressió</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Per defecte</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Ãrab</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Búlgar</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Català </translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Txec</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Danès</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Alemany</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grec</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Anglès</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Anglès (UK)</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Espanyol</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Francès</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Francès de Suïssa</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italià </translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebreu</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japonès</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Coreà </translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malgaix</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Noruec</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Neerlandès</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polonès</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Romanx</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Romanès</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Rus</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Eslovac</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Suec</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turc</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Xinès</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Xinès simplificat</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Xinès tradicional</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1893,6 +2346,17 @@ Voleu ignorar aquests errors per a aquest amfitrió?</translation>
<source>My Movies</source>
<translation>Les meves pel·lÃcules</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Visible la propera vegada</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2101,20 +2565,16 @@ Voleu ignorar aquests errors per a aquest amfitrió?</translation>
<source>Cache</source>
<translation>Memòria cau</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation type="obsolete">Cartabó Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>PÃ gina sencera</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Incrustat </translation>
</message>
</context>
<context>
@@ -2461,6 +2921,49 @@ Reinicieu l'aplicació per accedir als documents actualitzats.</translation
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Seleccioneu el contingut a capturar:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nom de l'aplicació</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Restricció i renúncia a drets.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Aquesta funcionalitat s'ha desenvolupat per funcionar a la majoria de pà gines web.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Si us plau, respecteu els drets d'autor quan creeu enllaços o captureu continguts de la web.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2538,7 +3041,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>Restableix les credencials en tornar a arrencar</translation>
</message>
</context>
<context>
@@ -2736,22 +3239,10 @@ p, li { white-space: pre-wrap; }
<translation>Llicències</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSL</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Xarxa</translation>
</message>
@@ -2791,10 +3282,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Contrasenya:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">Planète Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Usuari:</translation>
@@ -2808,1135 +3295,62 @@ p, li { white-space: pre-wrap; }
<translation>Open-Sankoré</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</translation>
- </message>
- <message>
<source>Credits</source>
<translation>Crèdits</translation>
</message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Identificador del Planète Sankoré per al fitxer a exportar</translation>
+ </message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Les llicències es mostren en anglès per respectar la traducció legalment aprovada.</span></p></td></tr></table></body></html></translation>
+ <source>Restore credentials on reboot </source>
+ <translation>Restableix les credencials quan tornis a engegar</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Start up tips</source>
+ <translation>Consells a l'inici</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />Open-Sankoré és programari lliure : podeu redistribuir-lo i/o modificar-lo sempre que respecteu els termes de la Lesser GNU general Public Licence (GNU LGPL) tal com ha estat publicada per la Free Software Foundation en la seva versió 2 o qualsevol versió més recent.<br />podeu consultar i descarregar el codi font del programari des de </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré es distribueix amb l'esperança de ser útil, però SENSE CAP GARANTIA, ni tan sols la garantia implÃcita de COMERCIALITZACIà o D'ADAPTACIà A UN OBJECTIU PARTICULAR.<br />Consulteu la llicència Lesser GNU General Public Licence situada a la pestanya Llicències o bé el lloc web </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contacte : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
+ <message>
+ <source>Show start up tips</source>
+ <translation>Mostra consells a l'inici</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crèdits del tipus de lletra escolar Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">El tipus de lletra Andika Basic disposa d'una llicència Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Font http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Llicència OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Els tipus de lletra escolars que s'esmenten tot seguit són obra de Jean-Marie Douteau i disposen d'una llicència OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Font : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Els tipus de lletra escolars que s'esmenten tot seguit són obra de Jean-Marie Douteau i disposen d'una llicència Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Font : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Els tipus de lletra lligada són obra d'Antoine Fetet (antoine.fetet at laposte.net) a partir d'un tipus de lletra proposat per Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Font : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'autor m'autoritza l'ús en el marc del programari open-Sankoré, sempre que es tracti d'un ús no comercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Els tipus de lletra lligada (Ecole et CaseEcole) són obra d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Font : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Font : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Se n'autoritza l'ús no comercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Font : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">El tipus de lletra fonètica Alphonet és obra d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Font : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Se n'autoritza l'ús no comercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Font : http://pointecole.free.fr/polices.html</span></p></body></html></translation>
+ <message>
+ <source>Language</source>
+ <translation>Idioma</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Seleccioneu un idioma</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>El nou idioma es carregarà quan reinicieu</translation>
</message>
<message utf8="true">
- <source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <source>Close Open-Sankoré</source>
+ <translation>Tanca l'Open-Sankoré</translation>
</message>
<message>
- <source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
- <message utf8="true">
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_co.ts b/Sankore-3.1/resources/i18n/sankore_co.ts
new file mode 100644
index 0000000..0d5e634
--- /dev/null
+++ b/Sankore-3.1/resources/i18n/sankore_co.ts
@@ -0,0 +1,3407 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr_FR">
+<context>
+ <name>BlackoutWidget</name>
+ <message>
+ <source>Click to Return to Application</source>
+ <translation>Cliccà par vultà à l'appiicazione</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadDialog</name>
+ <message>
+ <source>Downloads</source>
+ <translation>Caricamenti</translation>
+ </message>
+ <message>
+ <source>Clean Up</source>
+ <translation>Nittà </translation>
+ </message>
+ <message>
+ <source>0 Items</source>
+ <translation>0 item</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>Form</source>
+ <translation>Furmulariu</translation>
+ </message>
+ <message>
+ <source>Filename</source>
+ <translation>Nome di schedariu</translation>
+ </message>
+ <message>
+ <source>Try Again</source>
+ <translation>Pruvà torna</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Piantà </translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Apre</translation>
+ </message>
+</context>
+<context>
+ <name>IntranetPodcastPublishingDialog</name>
+ <message>
+ <source>Publish Podcast to YouTube</source>
+ <translation>Publicà Podcast nantu à YouTube</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titulu</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Descrizzione</translation>
+ </message>
+ <message>
+ <source>Author</source>
+ <translation>Autore</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>Board</source>
+ <translation>Tavulone </translation>
+ </message>
+ <message>
+ <source>Stylus</source>
+ <translation>Stile </translation>
+ </message>
+ <message>
+ <source>Backgrounds</source>
+ <translation>Fondi </translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation>Annuli </translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>Rifà </translation>
+ </message>
+ <message>
+ <source>Previous</source>
+ <translation>Nanzu</translation>
+ </message>
+ <message>
+ <source>PgUp</source>
+ <translation>Pagina alta</translation>
+ </message>
+ <message>
+ <source>Next</source>
+ <translation>Dopu
+</translation>
+ </message>
+ <message>
+ <source>PgDown</source>
+ <translation>Pagina bassa</translation>
+ </message>
+ <message>
+ <source>Documents</source>
+ <translation>Ducumenti </translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web </translation>
+ </message>
+ <message>
+ <source>Ctrl+T</source>
+ <translation>Ctrl+T </translation>
+ </message>
+ <message>
+ <source>Grid Light Background</source>
+ <translation>Quatratura nantu à fondu chjaru</translation>
+ </message>
+ <message>
+ <source>Grid Dark Background</source>
+ <translation>Quatratura nantu à fondu scuru</translation>
+ </message>
+ <message>
+ <source>Start Screen Recording</source>
+ <translation>Principià l'arregistramentu di u screnu </translation>
+ </message>
+ <message>
+ <source>Marker</source>
+ <translation>Segnu</translation>
+ </message>
+ <message>
+ <source>Selector</source>
+ <translation>Scigliadore</translation>
+ </message>
+ <message>
+ <source>Hand</source>
+ <translation>Manu </translation>
+ </message>
+ <message>
+ <source>Zoom In</source>
+ <translatorcomment>Avvicinera/Zoom +</translatorcomment>
+ <translation>Avvicinera </translation>
+ </message>
+ <message>
+ <source>Zoom Out</source>
+ <translation>Alluntanera/zoom - </translation>
+ </message>
+ <message>
+ <source>Text</source>
+ <translation>Scrittu </translation>
+ </message>
+ <message>
+ <source>Capture</source>
+ <translation>ChjappÃ
+ </translation>
+ </message>
+ <message>
+ <source>Add To Current Page</source>
+ <translation>Aghjunghje à a pagina in via</translation>
+ </message>
+ <message>
+ <source>Add To New Page</source>
+ <translation>Aghjunghje à a pagina nova</translation>
+ </message>
+ <message>
+ <source>Add To Library</source>
+ <translation>Aghjunghje à a bibbiuteca </translation>
+ </message>
+ <message>
+ <source>Pages</source>
+ <translation>Pagine </translation>
+ </message>
+ <message>
+ <source>New Page</source>
+ <translation>Pagina nova </translation>
+ </message>
+ <message>
+ <source>Configure Podcast Recording</source>
+ <translation>Cunfigurà u podcast </translation>
+ </message>
+ <message>
+ <source>Web Trap</source>
+ <translation>Piglià Web </translation>
+ </message>
+ <message>
+ <source>Trap Web Content</source>
+ <translation>Piglià u cuntinutu Web </translation>
+ </message>
+ <message>
+ <source>Window Capture</source>
+ <translation>Chjappà a finestra</translation>
+ </message>
+ <message>
+ <source>Show on Display</source>
+ <translation>Mustrà à l'affissera</translation>
+ </message>
+ <message>
+ <source>Ctrl+D</source>
+ <translation>Ctrl+D </translation>
+ </message>
+ <message>
+ <source>Ctrl+W</source>
+ <translation>Ctrl+W </translation>
+ </message>
+ <message>
+ <source>Line</source>
+ <translation>Linea diritta </translation>
+ </message>
+ <message>
+ <source>Quit</source>
+ <translation>Lascià </translation>
+ </message>
+ <message>
+ <source>Pen</source>
+ <translation>Penna /stilò</translation>
+ </message>
+ <message>
+ <source>Eraser</source>
+ <translation>Squassaghjola </translation>
+ </message>
+ <message>
+ <source>Change Background</source>
+ <translation>Cambià u fon' di screnu</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Pagina nanzu</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Pagina dopu </translation>
+ </message>
+ <message>
+ <source>Manage Documents</source>
+ <translation>Gestisce i ducumenti</translation>
+ </message>
+ <message>
+ <source>Web Browsing</source>
+ <translation>Percorre u Web </translation>
+ </message>
+ <message>
+ <source>Small Line</source>
+ <translation>Linea fine</translation>
+ </message>
+ <message>
+ <source>Medium Line</source>
+ <translation>Linea media </translation>
+ </message>
+ <message>
+ <source>Large Line</source>
+ <translation>Linea larga </translation>
+ </message>
+ <message>
+ <source>Smalle Eraser</source>
+ <translation>Squassaghjola fine </translation>
+ </message>
+ <message>
+ <source>Medium Eraser</source>
+ <translation>Squassaghjola media </translation>
+ </message>
+ <message>
+ <source>Large Eraser</source>
+ <translation>Squassaghjola larga </translation>
+ </message>
+ <message>
+ <source>Color</source>
+ <translation>Culore </translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>Nanzu </translation>
+ </message>
+ <message>
+ <source>Left</source>
+ <translation>Manca </translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translation>Dopu </translation>
+ </message>
+ <message>
+ <source>Right</source>
+ <translation>Diritta </translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <translation>Ricaricà </translation>
+ </message>
+ <message>
+ <source>Reload Current Page</source>
+ <translation>Ricaricà a pagina in via</translation>
+ </message>
+ <message>
+ <source>Load Home Page</source>
+ <translation>Caricà a pagina d'accolta </translation>
+ </message>
+ <message>
+ <source>Show Bookmarks</source>
+ <translation>Affissà prascelti/preferiti</translation>
+ </message>
+ <message>
+ <source>Add Bookmark</source>
+ <translation>Aghjunghje prasceltu/preferitu</translation>
+ </message>
+ <message>
+ <source>Display Board</source>
+ <translation>Affissà u tavulone </translation>
+ </message>
+ <message>
+ <source>Ctrl+B</source>
+ <translation>Ctrl+B </translation>
+ </message>
+ <message>
+ <source>Erase</source>
+ <translation>Squassà </translation>
+ </message>
+ <message>
+ <source>Erase Content</source>
+ <translation>Squassà u cuntinutu </translation>
+ </message>
+ <message>
+ <source>Display Preferences</source>
+ <translation>Affissà e preferenze </translation>
+ </message>
+ <message>
+ <source>Show Library</source>
+ <translation>Affissà a bibbiuteca </translation>
+ </message>
+ <message>
+ <source>Show Computer Desktop</source>
+ <translation>Affissà u scagnu di l'ordinatore </translation>
+ </message>
+ <message>
+ <source>Create a New Folder</source>
+ <translation>Crià un cartulare novu </translation>
+ </message>
+ <message>
+ <source>Create a New Document</source>
+ <translation>Crià un ducumentu novu </translation>
+ </message>
+ <message>
+ <source>Import a Document</source>
+ <translation>Impurtà un ducumentu </translation>
+ </message>
+ <message>
+ <source>Export a Document</source>
+ <translation>Spurtà un ducumentu </translation>
+ </message>
+ <message>
+ <source>Open Page in Board</source>
+ <translation>Apre a pagina nantu à u tavulone </translation>
+ </message>
+ <message>
+ <source>Duplicate Selected Content</source>
+ <translation>Cupià u cuntinutu sceltu </translation>
+ </message>
+ <message>
+ <source>Delete Selected Content</source>
+ <translation>Squassà u cuntinutu sceltu </translation>
+ </message>
+ <message>
+ <source>Add Content to Document</source>
+ <translation>Aghjunghje u cuntinutu à u ducumentu </translation>
+ </message>
+ <message>
+ <source>Tutorial</source>
+ <translation>Tuturiali </translation>
+ </message>
+ <message>
+ <source>Show Desktop</source>
+ <translation>Affissà Scagnu </translation>
+ </message>
+ <message>
+ <source>Ctrl+Shift+H</source>
+ <translation>Ctrl+Maj+H </translation>
+ </message>
+ <message>
+ <source>Rename Content</source>
+ <translation>Dà un antru nome à u cuntinutu </translation>
+ </message>
+ <message>
+ <source>Display Tools</source>
+ <translation>Affissà l'attrazzi </translation>
+ </message>
+ <message>
+ <source>Use Document Wide Size (16/9)</source>
+ <translation>Aduprà un furmatu largu/una sesta larga (16/9)</translation>
+ </message>
+ <message>
+ <source>Use Document Regular Size (4/3)</source>
+ <translation>Aduprà un furmatu/una sesta nurmale (4/3)</translation>
+ </message>
+ <message>
+ <source>Use Custom Document Size</source>
+ <translation>Aduprà un furmatu/una sesta di ducumentu persunalizatu/persunalizata </translation>
+ </message>
+ <message>
+ <source>Stop Loading Web Page</source>
+ <translation>Arrestà /piantà u caricamentu di a pagina Web </translation>
+ </message>
+ <message>
+ <source>Put Presentation to Sleep</source>
+ <translation>FÃ una arretta in a prisentazione</translation>
+ </message>
+ <message>
+ <source>Display Virtual Keyboard</source>
+ <translation>Affissà a tastera virtuale </translation>
+ </message>
+ <message>
+ <source>Record Presentation to Video</source>
+ <translation>Arrigistrà a prisentazione in video</translation>
+ </message>
+ <message>
+ <source>Erase Items</source>
+ <translation>Squassà l'item</translation>
+ </message>
+ <message>
+ <source>Erase All Items</source>
+ <translation>Squassà tutti l'item</translation>
+ </message>
+ <message>
+ <source>Erase Annotations</source>
+ <translation>Squassà l'annutazione</translation>
+ </message>
+ <message>
+ <source>Erase All Annotations</source>
+ <translation>Squassà tutte l'annutazione</translation>
+ </message>
+ <message>
+ <source>Clear Page</source>
+ <translation>Squassà a pagina </translation>
+ </message>
+ <message>
+ <source>Clear All Elements</source>
+ <translation>Squassà tutti l'elementi</translation>
+ </message>
+ <message>
+ <source>Annotate Document</source>
+ <translation>Annutà u ducumentu</translation>
+ </message>
+ <message>
+ <source>Ctrl+I</source>
+ <translation>Ctrl+I </translation>
+ </message>
+ <message>
+ <source>Erase Annotation</source>
+ <translation>Squassà l'annutazione</translation>
+ </message>
+ <message>
+ <source>Ctrl+E</source>
+ <translation>Ctrl+E </translation>
+ </message>
+ <message>
+ <source>Highlight </source>
+ <translation>Sopralineà </translation>
+ </message>
+ <message>
+ <source>Ctrl+M</source>
+ <translation>Ctrl+M </translation>
+ </message>
+ <message>
+ <source>Select And Modify Objects</source>
+ <translation>Sceglie è mudificà l'ogetti </translation>
+ </message>
+ <message>
+ <source>Ctrl+F</source>
+ <translation>Ctrl+F </translation>
+ </message>
+ <message>
+ <source>Scroll Page</source>
+ <translation>Sbucinà a pagina</translation>
+ </message>
+ <message>
+ <source>Laser Pointer</source>
+ <translation>Puntatore laser" </translation>
+ </message>
+ <message>
+ <source>Virtual Laser Pointer</source>
+ <translation>Puntatore laser virtuale</translation>
+ </message>
+ <message>
+ <source>Ctrl+G</source>
+ <translation>Ctrl+G</translation>
+ </message>
+ <message>
+ <source>Draw Lines</source>
+ <translation>Traccià una linea</translation>
+ </message>
+ <message>
+ <source>Ctrl+J</source>
+ <translation>Ctrl+J </translation>
+ </message>
+ <message>
+ <source>Write Text</source>
+ <translation>Scrive </translation>
+ </message>
+ <message>
+ <source>Ctrl+K</source>
+ <translation>Ctrl+K </translation>
+ </message>
+ <message>
+ <source>Add Item To Current Page</source>
+ <translation>Aghjunghje l'item à a pagina in via</translation>
+ </message>
+ <message>
+ <source>Add Item To New Page</source>
+ <translation>Aghjunghje l'item à a pagina nova</translation>
+ </message>
+ <message>
+ <source>Add Item To Library</source>
+ <translation>Aghjunghje l'item à a bibbiuteca</translation>
+ </message>
+ <message>
+ <source>Create a New Page</source>
+ <translation>Crià una pagina nova </translation>
+ </message>
+ <message>
+ <source>Duplicate Page</source>
+ <translation>Cupià a pagina </translation>
+ </message>
+ <message>
+ <source>Duplicate the Current Page</source>
+ <translation>Cupià a pagina in via</translation>
+ </message>
+ <message>
+ <source>Import Page</source>
+ <translation>Impurtà a pagina </translation>
+ </message>
+ <message>
+ <source>Import an External Page</source>
+ <translation>Impurtà a pagina sterna </translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Arretta </translation>
+ </message>
+ <message>
+ <source>Pause Podcast Recording</source>
+ <translation>FÃ una arretta in l'arrigistramentu di u podcast
+</translation>
+ </message>
+ <message>
+ <source>Podcast Config</source>
+ <translation>Cunfigurazione di u podcast</translation>
+ </message>
+ <message>
+ <source>Open the tutorial</source>
+ <translation>Apre i tuturiali</translation>
+ </message>
+ <message>
+ <source>Check Update</source>
+ <translation>Cuntrullà l' aghjurnera</translation>
+ </message>
+ <message>
+ <source>Ctrl+H</source>
+ <translation>Ctrl+H </translation>
+ </message>
+ <message>
+ <source>Capture Part of the Screen</source>
+ <translation>Chjappà una parte di u screnu</translation>
+ </message>
+ <message>
+ <source>Custom Capture</source>
+ <translation>Chjappà persunalizatu</translation>
+ </message>
+ <message>
+ <source>Capture a Window</source>
+ <translation>Chjappà una finestra</translation>
+ </message>
+ <message>
+ <source>Show Main Screen on Display Screen</source>
+ <translation>Affissà u screnu principale nantu à u screnu d'afissera</translation>
+ </message>
+ <message>
+ <source>Erase all Annotations</source>
+ <translation>Squassà tutte l'annutazione</translation>
+ </message>
+ <message>
+ <source>eduMedia</source>
+ <translation>eduMedia</translation>
+ </message>
+ <message>
+ <source>Import eduMedia simulation</source>
+ <translation>Impurtà una simulazione eduMedia</translation>
+ </message>
+ <message>
+ <source>Del</source>
+ <translation>Squassà </translation>
+ </message>
+ <message>
+ <source>Add Selected Content to Open Document</source>
+ <translation>Aghjunghje u cuntinutu sceltu à u ducumentu apertu</translation>
+ </message>
+ <message>
+ <source>Stop Loading</source>
+ <translation>Piantà u caricamentu</translation>
+ </message>
+ <message>
+ <source>Sleep</source>
+ <translation>Vighjera</translation>
+ </message>
+ <message>
+ <source>Virtual Keyboard</source>
+ <translation>Tastera virtuale </translation>
+ </message>
+ <message>
+ <source>Plain Light Background</source>
+ <translation>Fondu chjaru paru</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Chjaru</translation>
+ </message>
+ <message>
+ <source>Plain Dark Background</source>
+ <translation>Fondu scuru paru</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>Scuru</translation>
+ </message>
+ <message>
+ <source>Podcast</source>
+ <translation>Podcast</translation>
+ </message>
+ <message>
+ <source>Record</source>
+ <translation>Arrigistrà </translation>
+ </message>
+ <message>
+ <source>Wide Size (16/9)</source>
+ <translation>Furmatu largu/Sesta larga (16/9)</translation>
+ </message>
+ <message>
+ <source>Regular Size (4/3)</source>
+ <translation>Furmatu nurmale/Sesta nurmale (4/3)</translation>
+ </message>
+ <message>
+ <source>Custom Size</source>
+ <translation>Furmatu persunalizatu/Sesta persunalizata</translation>
+ </message>
+ <message>
+ <source>Ctrl+L</source>
+ <translation>Ctrl+L</translation>
+ </message>
+ <message>
+ <source>Bigger</source>
+ <translation>Più maiò</translation>
+ </message>
+ <message>
+ <source>Ctrl++</source>
+ <translation>Ctrl++</translation>
+ </message>
+ <message>
+ <source>Smaller</source>
+ <translation>Più chjucu </translation>
+ </message>
+ <message>
+ <source>Ctrl+-</source>
+ <translation>Ctrl+-</translation>
+ </message>
+ <message>
+ <source>Open in Board</source>
+ <translation>Apre in u tavulone</translation>
+ </message>
+ <message>
+ <source>Ctrl+O</source>
+ <translation>Ctrl+O</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>Taglià </translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>Cupià </translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>Appiccicà </translation>
+ </message>
+ <message>
+ <source>Tools</source>
+ <translation>Attrazzi </translation>
+ </message>
+ <message>
+ <source>Multi Screen</source>
+ <translation>Multiscreni</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>Cartulare novu</translation>
+ </message>
+ <message>
+ <source>New Document</source>
+ <translation>Ducumentu novu</translation>
+ </message>
+ <message>
+ <source>Import</source>
+ <translation>Impurtà </translation>
+ </message>
+ <message>
+ <source>Export</source>
+ <translation>Spurtà </translation>
+ </message>
+ <message>
+ <source>Duplicate</source>
+ <translation>Cupià </translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Squassà </translation>
+ </message>
+ <message>
+ <source>Add to Working Document</source>
+ <translation>Aghjunghje à u ducumentu</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Aghjunghje
+</translation>
+ </message>
+ <message>
+ <source>Rename</source>
+ <translation>DÃ un antru nome</translation>
+ </message>
+ <message>
+ <source>Home</source>
+ <translation>Accolta</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Prascelti/Priferiti</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
+ <translation>Prasceltu/Preferitu</translation>
+ </message>
+ <message>
+ <source>Preferences</source>
+ <translation>Preferenze</translation>
+ </message>
+ <message>
+ <source>Library</source>
+ <translation>Bibbiuteca</translation>
+ </message>
+ <message>
+ <source>Ctrl+Z</source>
+ <translation>Ctrl+Z</translation>
+ </message>
+ <message>
+ <source>Ctrl+Y</source>
+ <translation>Ctrl+Y</translation>
+ </message>
+ <message utf8="true">
+ <source>Open-Sankoré</source>
+ <translation>Apre-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Quit Open-Sankoré</source>
+ <translation>Lascià Open-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Open-Sankoré Editor</source>
+ <translation>Apre Editore Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Show Open-Sankoré Widgets Editor</source>
+ <translation>Affissà l'editore di widget/appiichette Open-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Hide Open-Sankoré</source>
+ <translation>Piattà Open-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Hide Open-Sankoré Application</source>
+ <translation>Piattà l'appiicazione Open Sankoré</translation>
+ </message>
+ <message>
+ <source>Import Uniboard Documents</source>
+ <translation>Impurtà dcumenti Uniboard</translation>
+ </message>
+ <message>
+ <source>Import old Sankore or Uniboard documents</source>
+ <translation>Impurtà l'anziani ducumenti Sankorè o Uniboard</translation>
+ </message>
+ <message>
+ <source>Group items</source>
+ <translation>Aggruppà l'ogetti</translation>
+ </message>
+ <message>
+ <source>Play</source>
+ <translatorcomment>j'hésite avec Lancer (dépend du contexte d'usage)</translatorcomment>
+ <translation>Lancià </translation>
+ </message>
+ <message>
+ <source>Interact with items</source>
+ <translation>Interagisce cù l'item</translation>
+ </message>
+ <message>
+ <source>Erase Background</source>
+ <translation>Squassà u fondu</translation>
+ </message>
+ <message>
+ <source>Remove the backgound</source>
+ <translation>Caccià u fondu</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Aggruppà </translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Caricà in a bibbiuteca</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Caricà in a pagina aperta</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Aghjunghje à a bibbiuteca</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Aghjunghje à a pagina aperta</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Prasceltu/Preferitu</translation>
+ </message>
+</context>
+<context>
+ <name>PasswordDialog</name>
+ <message>
+ <source>Authentication Required</source>
+ <translation>Autentificazione chersa
+</translation>
+ </message>
+ <message>
+ <source>Username:</source>
+ <translation>Nome d'utilizatore</translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translation>Contrusegnu</translation>
+ </message>
+</context>
+<context>
+ <name>ProxyDialog</name>
+ <message>
+ <source>Proxy Authentication</source>
+ <translation>Autentificazione pè u proxy</translation>
+ </message>
+ <message>
+ <source>Connect to Proxy</source>
+ <translation>Cunnette si à u proxy </translation>
+ </message>
+ <message>
+ <source>Username:</source>
+ <translation>Nome d'utilizatore</translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translation>Mot de passe :</translation>
+ </message>
+ <message>
+ <source>Save username and password for future use</source>
+ <translation>Arrighjistrà u nome d'utulizatore è u contrasegnu per a prossima volta</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>Element ID = </source>
+ <translation>ID di l'elementu</translation>
+ </message>
+ <message>
+ <source>Content is not supported in destination format.</source>
+ <translation>U cuntinutu ùn si po apre in stu furmatu</translation>
+ </message>
+ <message>
+ <source>Remove Page</source>
+ <translation>Squassà a pagina</translation>
+ </message>
+ <message>
+ <source>Are you sure you want to remove 1 page from the selected document '%0'?</source>
+ <translation>Vulete da veru squassà 1 pagina da u ducumentu sceltu %0 ?</translation>
+ </message>
+</context>
+<context>
+ <name>UBApplication</name>
+ <message>
+ <source>Page Size</source>
+ <translation>Misura di a pagina</translation>
+ </message>
+ <message>
+ <source>Podcast</source>
+ <translation>Podcast</translation>
+ </message>
+</context>
+<context>
+ <name>UBApplicationController</name>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
+ <message>
+ <source>New update available, would you go to the web page ?</source>
+ <translation>Nuvella aghjurnera pussibule/dispunibule, vulete andà à a pagina web ?</translation>
+ </message>
+ <message>
+ <source>No update available</source>
+ <translation>Aghjurnera micca pussibule/dispunibule</translation>
+ </message>
+ <message>
+ <source>Update available</source>
+ <translation>Aghjurnera pussibule/dispunibule</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation>Aghjurnà </translation>
+ </message>
+</context>
+<context>
+ <name>UBBoardController</name>
+ <message>
+ <source>Downloading content %1 failed</source>
+ <translation>Sbagliu di caricamentu cù fiascu di 1%</translation>
+ </message>
+ <message>
+ <source>Download finished</source>
+ <translation>Caricamentu compiu</translation>
+ </message>
+ <message>
+ <source>Unknown tool type %1</source>
+ <translation>Tippu d'attrazzu scunnisciutu %1</translation>
+ </message>
+ <message>
+ <source>Add Item</source>
+ <translation>Aghjunghje un item</translation>
+ </message>
+ <message>
+ <source>All Supported (%1)</source>
+ <translation>Tutti accittati(%1)</translation>
+ </message>
+ <message>
+ <source>Unknown content type %1</source>
+ <translation>Tippu di cuntinutu scunnisciutu</translation>
+ </message>
+ <message>
+ <source>Delete page %1 from document</source>
+ <translation>Squassà a pagina %1 da u ducumentuSupprimer la page du document</translation>
+ </message>
+ <message>
+ <source>Page %1 deleted</source>
+ <translation>Pagina %1 squassata</translation>
+ </message>
+ <message>
+ <source>Add file operation failed: file copying error</source>
+ <translation>Fiascu pè aghjunghje u schedariu : sbagliu cupiendu u schedariu</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation>Aggruppà </translation>
+ </message>
+ <message>
+ <source>Ungroup</source>
+ <translation>Sgruppà </translation>
+ </message>
+</context>
+<context>
+ <name>UBBoardPaletteManager</name>
+ <message>
+ <source>Error Adding Image to Library</source>
+ <translation>Sbagliu per mette e maghjine in a bibbiuteca</translation>
+ </message>
+ <message>
+ <source>CapturedImage</source>
+ <translation>Image capturée</translation>
+ </message>
+</context>
+<context>
+ <name>UBCachePropertiesWidget</name>
+ <message>
+ <source>Cache Properties</source>
+ <translation>Prupietà di u cache/a tana</translation>
+ </message>
+ <message>
+ <source>Color:</source>
+ <translation>Culore :</translation>
+ </message>
+ <message>
+ <source>Shape:</source>
+ <translation>Forma :</translation>
+ </message>
+ <message>
+ <source>Alpha:</source>
+ <translation>Alfa</translation>
+ </message>
+ <message>
+ <source>Geometry:</source>
+ <translation>Geumetria</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Largezza</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Altezza</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Tene ste misure</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Modu</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Previsualizazione</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Chjode u cache/a tana</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation>Mette u cuntinutu</translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Un sò accettate e maghjine</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>I dati ùn si ponu affissà </translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>U schedariu ùn hè ricunnusciutu da schedariu audio</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Lancià un schedariu audio</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Aghjunghje a leia à a pagina</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Aghjunghje a leia à una pagina Web</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Arrecà u schedariu audio da a bibbiuteca è mette lu in sta scatula</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Pagina dopu </translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Pagina nanzu</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Titulu di a pagina</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Ultima pagina</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Numeru di a pagina</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Inserì u scrittu url quì</translation>
+ </message>
+</context>
+<context>
+ <name>UBDesktopPalette</name>
+ <message>
+ <source>Capture Part of the Screen</source>
+ <translation>Chjappà una parte di u screnu</translation>
+ </message>
+ <message>
+ <source>Capture the Screen</source>
+ <translation>Chjappà u screnu</translation>
+ </message>
+ <message>
+ <source>Show the stylus palette</source>
+ <translation>Affissà a paletta di u stilucciu</translation>
+ </message>
+ <message>
+ <source>Show Board on Secondary Screen</source>
+ <translation>Affissà u Tavulone nant'à u screnu sicondariu</translation>
+ </message>
+ <message>
+ <source>Show Desktop on Secondary Screen</source>
+ <translation>Affissà u scagnu nat'à u screnu sicondariu</translation>
+ </message>
+ <message>
+ <source>Show Open-Sankore</source>
+ <translation>Affissà Open-Sankoré</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentController</name>
+ <message>
+ <source>Open Supported File</source>
+ <translation>Apre un schedariu accettatu</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>Cartulare novu</translation>
+ </message>
+ <message>
+ <source>Add Folder of Images</source>
+ <translation>Aghjunghje un cartulare di maghjine</translation>
+ </message>
+ <message>
+ <source>Add Images</source>
+ <translation>Aghjunghje e maghjine</translation>
+ </message>
+ <message>
+ <source>Add Pages from File</source>
+ <translation>Aghjunghje pagine à parte da un schedariu</translation>
+ </message>
+ <message>
+ <source>Duplicating Document %1</source>
+ <translation>In via pè cupià u ducumentu %1</translation>
+ </message>
+ <message>
+ <source>Document %1 copied</source>
+ <translation>Ducumentu %1 cupiatu</translation>
+ </message>
+ <message>
+ <source>Remove Page</source>
+ <translation>Squassà a pagina</translation>
+ </message>
+ <message>
+ <source>Importing file %1...</source>
+ <translation>Importu di u schedariu %1...</translation>
+ </message>
+ <message>
+ <source>Failed to import file ... </source>
+ <translation>Fiascu pè impurtà u schedariu ...</translation>
+ </message>
+ <message>
+ <source>Import all Images from Folder</source>
+ <translation>Impurtà tutte e maghjine da un cartulare</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Squassà </translation>
+ </message>
+ <message>
+ <source>Empty</source>
+ <translation>Viutà </translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Biconzu</translation>
+ </message>
+ <message>
+ <source>Open Document</source>
+ <translation>Apre u ducumentu</translation>
+ </message>
+ <message>
+ <source>Add all Images to Document</source>
+ <translation>Aghjunghje tutte e maghjine à u ducumentu</translation>
+ </message>
+ <message>
+ <source>All Images (%1)</source>
+ <translation>Tutte e maghjine (%1)</translation>
+ </message>
+ <message>
+ <source>Selection does not contain any image files!</source>
+ <translation>Un ci hè nisun' schedariu di maghjina in sta scelta</translation>
+ </message>
+ <message>
+ <source>Page %1</source>
+ <translation>Pagina %1</translation>
+ </message>
+ <message>
+ <source>The document '%1' 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>U ducumentu '%1' hè statu criatu cù una versione di Sankoré menu anziana (%2). Si vo l'aprite pudete perde l'infurmazione. Vulete cuntinuvà ?</translation>
+ </message>
+ <message numerus="yes">
+ <source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
+ <translation>
+ <numerusform>Vulete da veru squassà %n pagina(e) da stu ducumentu '%1'?</numerusform>
+ <numerusform>Voulez-vous vraiment effacer %n pages de ce document '%1'?</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Title page</source>
+ <translation>Pagina di titulu</translation>
+ </message>
+ <message>
+ <source>Folder does not contain any image files</source>
+ <translation>Un ci hè nisun' schedariu di maghjine in u cartulare</translation>
+ </message>
+ <message>
+ <source>Untitled Documents</source>
+ <translation>Ducumenti senza tituli</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentManager</name>
+ <message>
+ <source>images</source>
+ <translation>maghjine
+</translation>
+ </message>
+ <message>
+ <source>videos</source>
+ <translation>video</translation>
+ </message>
+ <message>
+ <source>objects</source>
+ <translation>ogetti</translation>
+ </message>
+ <message>
+ <source>widgets</source>
+ <translation>widgets</translation>
+ </message>
+ <message>
+ <source>All supported files (*.%1)</source>
+ <translation>Tutti i schedarii so accittati(*.%1)</translation>
+ </message>
+ <message>
+ <source>File %1 saved</source>
+ <translation>Fichier %1 enregistré</translation>
+ </message>
+ <message>
+ <source>Inserting page %1 of %2</source>
+ <translation>Ajout de la page %1 sur %2</translation>
+ </message>
+ <message>
+ <source>Import successful.</source>
+ <translation>Importation réussie.</translation>
+ </message>
+ <message>
+ <source>Import of file %1 successful.</source>
+ <translation>Importation du document %1 réussie.</translation>
+ </message>
+ <message>
+ <source>Importing file %1</source>
+ <translatorcomment>j'ai raccourci la phrase pour eviter les soucis de place !</translatorcomment>
+ <translation>Importation de %1 en cours</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentNavigator</name>
+ <message>
+ <source>Page %0</source>
+ <translation>Pagina %0</translation>
+ </message>
+ <message>
+ <source>Title page</source>
+ <translation>Pagina di titulu</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentPublisher</name>
+ <message>
+ <source>Export failed.</source>
+ <translation>Fiascu di u sportu.</translation>
+ </message>
+ <message>
+ <source>Export canceled ...</source>
+ <translation>Sportu annulitu...</translation>
+ </message>
+ <message>
+ <source>Converting page %1/%2 ...</source>
+ <translation>Cunversione di a pagina %1/%2 ...</translation>
+ </message>
+ <message>
+ <source>Credentials has to not been filled out yet.</source>
+ <translation>L'identificanti ùn sò ancu stati pichjati</translation>
+ </message>
+ <message>
+ <source>Uploading Sankore File on Web.</source>
+ <translation>Schedariu Open-Sankoré in via di trasferu versu Pianeta Sankoré/Planète-Sankoré.</translation>
+ </message>
+ <message>
+ <source>Document uploaded correctly on the web.</source>
+ <translation>Ducumentu Open-Sankoré trasferitu propiu bè nant'à Pianeta Sankoré/Planète-Sankoré.</translation>
+ </message>
+ <message>
+ <source>Failed to upload document on the web.</source>
+ <translation>Fiascu di u trasferu di u ducumentu versu Pianeta Sankoré/Planète-Sankoré.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Accittà </translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Rimpiazzà </translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Squassà </translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Stu nome hè digià adupratu.
+U ducumentu serà rimpiazzatu s'ellu hè tenutu u listessu nome.
+Un nuvellu nome ferà un ducumentu novu.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>I mo ducumenti</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Mudelli</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Biconzu</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Ducumenti senza titulu</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Pagina in via di cupiera%1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 pagine cupiate</numerusform>
+ <numerusform>%1 pages copiées</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeWidget</name>
+ <message>
+ <source>%1 (copy)</source>
+ <translation>%1 (copia)</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation>Pagina in via di cupiera%1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation>
+ <numerusform>%1 pagine cupiate</numerusform>
+ <numerusform>%1 pages copiées</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Hè fiascatu u caricamentu</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>U servore distante hà ricusatu a cunnessione (u servore ùn accetta e dumande)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>U servore distante hà chjosu a cunnessione in avanza, nanzu ch'ella fussi ricevuta è tratta a risposta.</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>U nome di u servore distante ùn hè statu trovu (nome di servore micca validu)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>U tempu di cunnessione à u servore distante hè passatu</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>Hè stata annulita l'uperazione via e chjame pè piantà () o chjode () nanzu à a fine.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>hè fiascatu u neguziatu pè u SSL/TLS è ùn si pobbe stallà u canale crittatu. Ci vulia à lancià u signale di sbagliu() ssl </translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>Hè stata rotta a cunnessione per via di a scunnessione à a reta, ma u sistema hà iniziatu una ricerca pè un antru puntu d'accessu. Ci vole à rifà a dumanda da ch'ella sia trattata à quandu turnata a cunnessione.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>Hè stata ricusata a cunnessione à u servore proxy (u servore proxy ùn accetta e dumande)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>U servore proxy hà chjosu a cunnessione in avanza, nanzu ch'ella fussi ricevuta è tratta a risposta.</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>U nome di u servore proxy ùn hè statu trovu (u nome di u servore proxy ùn hè validu)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>U tempu di cunnessione à u proxy hè passatu o u proxy ùn pobbe risponde à tempu à a dumanda</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>U proxy chere l'autentificazione da risponde à a dumanda ma hà ricusatu l'identificanti pruposti </translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>Hè statu ricusatu l'accessu à u cuntinutu distante (listessu à u sbagliu HTTP 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>Hè pruibita l'uperazione dumandata nant'à u cuntinutu distante.</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>U cuntinutu distante ùn hè statu trovu à u servore (listessu à u sbagliu HTTP 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>u servore distante chere l'autentificazione pè prisentà u cuntinutu ma l'identificanti dati funu ricusati</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>ci vulia à turnà à mandà a dumanda, ma hè fiascata per via chi per un dettu u datu da caricamentu ùn si pobbe leghje una seconda volta.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>L'Accessu APi à a reta ùn pò risponda à a dumanda per via chì u prutucollu hè scunnusciutu.</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>l'uperazione chersa ùn hè valida pè stu prutucollu</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>Ci hè statu un sbagliu scunnusciutu in leia cù a reta</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>Ci hè statu un sbagliu scunnusciutu in leia cù u proxy</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>Ci hè statu un sbagliu scunnusciutu in leia cù u cuntinutu distante</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>Ci hè statu una rumpitura in u prutucollu (sbagliu in l'analisi sintassica, risposte false o inaspettate, ecc...)</translation>
+ </message>
+</context>
+<context>
+ <name>UBDownloadWidget</name>
+ <message>
+ <source>Downloading files</source>
+ <translation>In via di caricamentu di i schedarii</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Annuler</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportAdaptor</name>
+ <message>
+ <source>Warnings during export was appeared</source>
+ <translation>Avvertimentu pè u sportu</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportCFF</name>
+ <message>
+ <source>Export to IWB</source>
+ <translation>Spurtà à u furmatut/a sesta CFF (*.iwb)</translation>
+ </message>
+ <message>
+ <source>Export as IWB File</source>
+ <translation>Spurtà à u furmatu CFF (*.iwb)</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Sportu di u ducumentu...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Sportu riesciutu.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Fiascu di u sportu.</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportDocument</name>
+ <message>
+ <source>Export as UBZ File</source>
+ <translation>Spurtà à u furmatu UBZ (*.ubz)</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Sportu riesciutu.</translation>
+ </message>
+ <message>
+ <source>Page</source>
+ <translation>Pagina</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Sportu di u ducumentu...</translation>
+ </message>
+ <message>
+ <source>Exporting %1 %2 of %3</source>
+ <translation>Sportu %1 %2 sur %3</translation>
+ </message>
+ <message>
+ <source>Export to Sankore Format</source>
+ <translation>Spurtà à u furmatut Sankoré</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Fiascu di u sportu...
+</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Spurtà in tantu chì Schedariu UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Sportu di u ducumentu</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Sportu riesciutu.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Fiascu di u sportu.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Spurtà in u furmatu Sankore UBX</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportFullPDF</name>
+ <message>
+ <source>Export as PDF File</source>
+ <translation>Spurtà à u furmatut PDF (*.pdf)</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Sportu di u ducumentu...</translation>
+ </message>
+ <message>
+ <source>Export to PDF</source>
+ <translation>Spurtà in PDF</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Sportu riesciutu.</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportPDF</name>
+ <message>
+ <source>Export as PDF File</source>
+ <translation>Spurtà à u furmatuPDF (*.pdf)</translation>
+ </message>
+ <message>
+ <source>Exporting page %1 of %2</source>
+ <translation>Sportu di a pagina %1 sur %2</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Sportu riesciutu.</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Sportu di u ducumentu</translation>
+ </message>
+ <message>
+ <source>Export to PDF</source>
+ <translation>Spurtà in PDF (*.pdf)</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportWeb</name>
+ <message>
+ <source>Page</source>
+ <translation>Pagina</translation>
+ </message>
+ <message>
+ <source>Export as Web data</source>
+ <translation>Spurtà in tantu chè datu Web</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Sportu di u ducumentu</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Sportu riesciutu.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Fiascu di u sportu.</translation>
+ </message>
+ <message>
+ <source>Export to Web Browser</source>
+ <translation>Spurtà versu un navigatore web</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeatureProperties</name>
+ <message>
+ <source>Add to page</source>
+ <translatorcomment>j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
+ <translation>Aghjunghje à a pagina</translation>
+ </message>
+ <message>
+ <source>Set as background</source>
+ <translatorcomment>j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
+ <translation>Stallà cum'è fondu</translation>
+ </message>
+ <message>
+ <source>Add to library</source>
+ <translatorcomment>j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
+ <translation>Aghjunghje à a bibbiuteca</translation>
+ </message>
+ <message>
+ <source>Object informations</source>
+ <translation>Infurmazione nant'Ã l'ogettu</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Aghjunghje
+</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesActionBar</name>
+ <message>
+ <source>Add to favorites</source>
+ <translation>Aghjunghje à i preferiti</translation>
+ </message>
+ <message>
+ <source>Share</source>
+ <translation>Sparte</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>Ricercà </translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Squassà </translation>
+ </message>
+ <message>
+ <source>Back to folder</source>
+ <translation>Vultà à u cartulare</translation>
+ </message>
+ <message>
+ <source>Remove from favorites</source>
+ <translation>Caccià da i prascelti/preferiti</translation>
+ </message>
+ <message>
+ <source>Create new folder</source>
+ <translation>Crià un nuvellu cartulare</translation>
+ </message>
+ <message>
+ <source>Rescan file system</source>
+ <translation>Turnà à anlizà u sistema di schedarii </translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesController</name>
+ <message>
+ <source>ImportedImage</source>
+ <translation>Maghjina impurtata</translation>
+ </message>
+ <message>
+ <source>Audios</source>
+ <translation>Soni</translation>
+ </message>
+ <message>
+ <source>Movies</source>
+ <translation>Filmi</translation>
+ </message>
+ <message>
+ <source>Pictures</source>
+ <translation>Maghjine</translation>
+ </message>
+ <message>
+ <source>Animations</source>
+ <translation>Animazione</translation>
+ </message>
+ <message>
+ <source>Interactivities</source>
+ <translation>Interattività </translation>
+ </message>
+ <message>
+ <source>Applications</source>
+ <translation>Appiicazione</translation>
+ </message>
+ <message>
+ <source>Shapes</source>
+ <translation>Forme</translation>
+ </message>
+ <message>
+ <source>Favorites</source>
+ <translation>Prascelti/Preferiti</translation>
+ </message>
+ <message>
+ <source>Web search</source>
+ <translation>Ricerca Web</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Biconzu</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Prascelti/Priferiti</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesNewFolderDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Accittà </translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Annulì</translation>
+ </message>
+ <message>
+ <source>Enter a new folder name</source>
+ <translation>Pichjà u nome di u nuvellu cartulare</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesProgressInfo</name>
+ <message>
+ <source>Loading </source>
+ <translation>In via di caricamentu </translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsGroupContainerItemDelegate</name>
+ <message>
+ <source>Locked</source>
+ <translation>Chjosu</translation>
+ </message>
+ <message>
+ <source>Visible on Extended Screen</source>
+ <translation>Visibile nant'Ã u screnu stesu</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation>Aghjunghje una azzione</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Caccià a leia versu l'audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Caccià a leia versu a pagina</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Caccià a leia versu l'url web</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsItemDelegate</name>
+ <message>
+ <source>Locked</source>
+ <translation>Chjosu</translation>
+ </message>
+ <message>
+ <source>Visible on Extended Screen</source>
+ <translation>Visibile nant'Ã u screnu stesu</translation>
+ </message>
+ <message>
+ <source>Go to Content Source</source>
+ <translation>Andà à a fonte di u cuntinutu</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation>Aghjunghje una azzione</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Caccià a leia versu l'audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Caccià a leia versu a pagina</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Caccià a leia versu l'url web</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsTextItem</name>
+ <message>
+ <source><Type Text Here></source>
+ <translation>Pichjà u scrittu qui</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsTextItemDelegate</name>
+ <message>
+ <source>Text Color</source>
+ <translation>Culore di u scrittu</translation>
+ </message>
+ <message>
+ <source>Editable</source>
+ <translation>Si pò mudificà </translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsWidgetItem</name>
+ <message>
+ <source>Loading ...</source>
+ <translation>In via di caricamentu</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsWidgetItemDelegate</name>
+ <message>
+ <source>Frozen</source>
+ <translation>Fermu</translation>
+ </message>
+ <message>
+ <source>Transform as Tool </source>
+ <translation>Transformer en outil</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportCFF</name>
+ <message>
+ <source>Common File Format (</source>
+ <translation>Furmatu di schedariu CFF (</translation>
+ </message>
+ <message>
+ <source>Importing file %1...</source>
+ <translation>Schedariu in via di impurtera %1...</translation>
+ </message>
+ <message>
+ <source>Import of file %1 failed.</source>
+ <translation>Fiascu di l'importu di u schedariu %1.</translation>
+ </message>
+ <message>
+ <source>Import successful.</source>
+ <translation>Importu riesciutu</translation>
+ </message>
+ <message>
+ <source>Import failed.</source>
+ <translation>Fiascu di l'mportu.</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportDocument</name>
+ <message>
+ <source>Importing file %1...</source>
+ <translation>Schedariu in via di impurtera %1...</translation>
+ </message>
+ <message>
+ <source>Import successful.</source>
+ <translation>Importu riesciutu</translation>
+ </message>
+ <message>
+ <source>Import of file %1 failed.</source>
+ <translation>Fiascu di l'importu di u schedariu %1.</translation>
+ </message>
+ <message>
+ <source>Open-Sankore (*.ubz)</source>
+ <translation>Open-Sankoré (*.ubz)</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Apre Sankore (assestu di i ducumenti) (*.ubx)/ Open-Sankore (assestu di i ducumenti) (*ubx)</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportImage</name>
+ <message>
+ <source>Image Format (</source>
+ <translation>Furmatu di a maghjina (</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportPDF</name>
+ <message>
+ <source>Portable Document Format (*.pdf)</source>
+ <translation>Furmatu PDF (*.pdf)</translation>
+ </message>
+ <message>
+ <source>PDF import failed.</source>
+ <translation>Fiascu di l'importu di u PDF.</translation>
+ </message>
+ <message>
+ <source>Importing page %1 of %2</source>
+ <translation>Impurtera di a pagina %1 di %2</translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublisher</name>
+ <message>
+ <source>Error while publishing video to intranet (%1)</source>
+ <translation>Sbagliu in a publichera di a video in intranet(%1)</translation>
+ </message>
+ <message>
+ <source>Publishing to Intranet in progress %1 %</source>
+ <translation>In via di publichera in Intranet %1 %</translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublishingDialog</name>
+ <message>
+ <source>Publish</source>
+ <translation>Publicà </translation>
+ </message>
+</context>
+<context>
+ <name>UBKeyboardPalette</name>
+ <message>
+ <source>Enter</source>
+ <translation>Entre </translation>
+ </message>
+</context>
+<context>
+ <name>UBMainWindow</name>
+ <message>
+ <source>Yes</source>
+ <translation>Iè</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>Nò</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+</context>
+<context>
+ <name>UBMessagesDialog</name>
+ <message>
+ <source>Close</source>
+ <translation>Chjode</translation>
+ </message>
+</context>
+<context>
+ <name>UBNetworkAccessManager</name>
+ <message>
+ <source><qt>Enter username and password for "%1" at %2</qt></source>
+ <translation><qt>Entre u nome di l'utilizatore è u contrusegnu pè "%1" à %2</qt></translation>
+ </message>
+ <message>
+ <source>Failed to log to Proxy</source>
+ <translation>Identificazione à u proxy impussibule</translation>
+ </message>
+ <message>
+ <source>SSL Errors:
+
+%1
+
+%2
+
+Do you want to ignore these errors for this host?</source>
+ <translation>Sbaglii SSL
+
+%1
+
+%2
+
+Vulete lascià corre sti sbaglii per stu servore ?</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>Iè</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>Nò</translation>
+ </message>
+</context>
+<context>
+ <name>UBPersistenceManager</name>
+ <message>
+ <source>(copy)</source>
+ <translation>(copia)</translation>
+ </message>
+ <message>
+ <source>Document Repository Loss</source>
+ <translation>Ducumentu di u referenziale persu</translation>
+ </message>
+ <message>
+ <source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
+ <translation>Open Sankoré hà persu l'accessu à u ducumentu di u riferenziale. Per disgrazia l'appicazione s'hà da chjode da schisà a curruzzione di i dati. L'ultime mudifiche ponu esse perse dinò</translation>
+ </message>
+</context>
+<context>
+ <name>UBPlatformUtils</name>
+ <message>
+ <source>English</source>
+ <translation>Inglese</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Russiu</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Tedescu/Alimanu</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Francese</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Francese di Sguizzera</translation>
+ </message>
+</context>
+<context>
+ <name>UBPodcastController</name>
+ <message>
+ <source>Failed to start encoder ...</source>
+ <translation>Fiascu di l'iniziu di l'incuditore </translation>
+ </message>
+ <message>
+ <source>No Podcast encoder available ...</source>
+ <translation>Nisunu incuditore di podcast dispunibule..</translation>
+ </message>
+ <message>
+ <source>Part %1</source>
+ <translation>Parte %1</translation>
+ </message>
+ <message>
+ <source>on your desktop ...</source>
+ <translation>Nant'Ã u scagnu ...</translation>
+ </message>
+ <message>
+ <source>in folder %1</source>
+ <translation>In u cartulare %1</translation>
+ </message>
+ <message>
+ <source>Podcast created %1</source>
+ <translation>Podcast creatu %1</translation>
+ </message>
+ <message>
+ <source>Podcast recording error (%1)</source>
+ <translation>Sbagliu pè l'arrighjistramentu di u podcast (%1)</translation>
+ </message>
+ <message>
+ <source>Default Audio Input</source>
+ <translation>Entrata audio predefinita
+</translation>
+ </message>
+ <message>
+ <source>No Audio Recording</source>
+ <translation>Nisun arrighjistramentu audio</translation>
+ </message>
+ <message>
+ <source>Small</source>
+ <translation>Chjucu</translation>
+ </message>
+ <message>
+ <source>Medium</source>
+ <translation>Mediu</translation>
+ </message>
+ <message>
+ <source>Full</source>
+ <translation>Cumplettu</translation>
+ </message>
+ <message>
+ <source>Publish to Intranet</source>
+ <translation>Publicà nant'à Intranet</translation>
+ </message>
+ <message>
+ <source>Publish to Youtube</source>
+ <translation>Publicà nant'à Youtube</translation>
+ </message>
+ <message>
+ <source>Sankore Cast</source>
+ <translation>Sankoré Cast</translation>
+ </message>
+</context>
+<context>
+ <name>UBPreferencesController</name>
+ <message>
+ <source>Marker is pressure sensitive</source>
+ <translation>Stilucciu sensibile à a pressione
+</translation>
+ </message>
+ <message>
+ <source>version: </source>
+ <translation>versione: </translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation>Predefinita</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabu</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bùlgaru</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Catalanu</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>Corsu</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Ceccu</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Danese</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Tedescu/Alimanu</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grecu</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Inglese</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Inglese RU</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Spagnolu</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Francese</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Francese di Sguizzera</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Talianu</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hindi</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Ebreiu</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Giappunese</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Cureanu</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malesianu</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Nurvegianu</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Ollandese</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Pulunese</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Rumanciu</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Rumenu</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Russiu</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Sluvaccu</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Svedese</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turcu</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Chinese</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Chinese Simplificatu/Simplified</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Chinese tradiziunale/Traditional</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBProxyLoginDlg</name>
+ <message>
+ <source>Proxy Login</source>
+ <translation>Identificazione pè u Proxy</translation>
+ </message>
+ <message>
+ <source>Username:</source>
+ <translation>Nome d'utulizatore:</translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translation>Contrusegnu:</translation>
+ </message>
+</context>
+<context>
+ <name>UBPublicationDlg</name>
+ <message>
+ <source>Publish document on the web</source>
+ <translation>Publicà un ducumentu in ligna</translation>
+ </message>
+ <message>
+ <source>Title:</source>
+ <translation>Titulu :</translation>
+ </message>
+ <message>
+ <source>Description:</source>
+ <translation>Descrizzione :</translation>
+ </message>
+ <message>
+ <source>Publish</source>
+ <translation>Publicà </translation>
+ </message>
+</context>
+<context>
+ <name>UBSettings</name>
+ <message>
+ <source>My Movies</source>
+ <translation>I mo filmi</translation>
+ </message>
+ <message>
+ <source>/Web</source>
+ <translation>Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Visibile a prossima volta</translation>
+ </message>
+</context>
+<context>
+ <name>UBTGActionWidget</name>
+ <message>
+ <source>Teacher</source>
+ <translation>Prufessore</translation>
+ </message>
+ <message>
+ <source>Student</source>
+ <translation>Studiente</translation>
+ </message>
+ <message>
+ <source>Type task here ...</source>
+ <translation>Scrive una faccenda quì...</translation>
+ </message>
+</context>
+<context>
+ <name>UBTGMediaWidget</name>
+ <message>
+ <source>drop media here ...</source>
+ <translation>Mette un mediu qui ...</translation>
+ </message>
+ <message>
+ <source>Type title here...</source>
+ <translation>Scrive u titulu quì...</translation>
+ </message>
+</context>
+<context>
+ <name>UBTGUrlWidget</name>
+ <message>
+ <source>Insert link title here...</source>
+ <translation>Entre u titulu di a leia...</translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherBarWidget</name>
+ <message>
+ <source></source>
+ <translatorcomment>cumentu in u cuntestu</translatorcomment>
+ <translation></translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherGuideEditionWidget</name>
+ <message>
+ <source>Type title here ...</source>
+ <translation>Scrive u titulu quì...</translation>
+ </message>
+ <message>
+ <source>Type comment here ...</source>
+ <translation>Scrive u cumentu quì</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation>Aghjunghje una azzione</translation>
+ </message>
+ <message>
+ <source>Add a media</source>
+ <translation>Aghjunghje un mediu</translation>
+ </message>
+ <message>
+ <source>Add a link</source>
+ <translation>Aghjunghje una leia web</translation>
+ </message>
+ <message>
+ <source>Page: %0</source>
+ <translation>Pagina: %0</translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherGuidePageZeroWidget</name>
+ <message>
+ <source>Type session title here ...</source>
+ <translation>Scrive u titulu di a sessione
+</translation>
+ </message>
+ <message>
+ <source>Author(s)</source>
+ <translation>Autore (i)</translation>
+ </message>
+ <message>
+ <source>Type authors here ...</source>
+ <translation>Scrive l'autori quì
+</translation>
+ </message>
+ <message>
+ <source>Objective(s)</source>
+ <translation>Scopu(i)</translation>
+ </message>
+ <message>
+ <source>Type objectives here...</source>
+ <translation>Scrive i scopi quì...</translation>
+ </message>
+ <message>
+ <source>Resource indexing</source>
+ <translation>Indicizazione di a risorza</translation>
+ </message>
+ <message>
+ <source>Keywords:</source>
+ <translation>Parolle chjave</translation>
+ </message>
+ <message>
+ <source>Type keywords here ...</source>
+ <translation>Scrive e parolle chjave quì</translation>
+ </message>
+ <message>
+ <source>Level:</source>
+ <translation>Livellu</translation>
+ </message>
+ <message>
+ <source>Subjects:</source>
+ <translation>Tema</translation>
+ </message>
+ <message>
+ <source>Type:</source>
+ <translation>Scrive</translation>
+ </message>
+ <message>
+ <source>Licence</source>
+ <translation>Licenza</translation>
+ </message>
+ <message>
+ <source>Attribution CC BY</source>
+ <translation>Attribuzione CC BY</translation>
+ </message>
+ <message>
+ <source>Attribution-NoDerivs CC BY-ND</source>
+ <translation>Attribuzione.Micca opare derivate CC BY-ND</translation>
+ </message>
+ <message>
+ <source>Attribution-ShareAlike CC BY-SA</source>
+ <translation>Attribuzione-Sparte à paru CC BY-CA</translation>
+ </message>
+ <message>
+ <source>Attribution-NonCommercial CC BY-NC</source>
+ <translation>Attribuzione Nisun' adopru cumerciale di CC BY-ND</translation>
+ </message>
+ <message>
+ <source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
+ <translation>Attribuzione Nisun' adopru cumerciale; Nisun'opara derivata di CC BY-NC-ND</translation>
+ </message>
+ <message>
+ <source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
+ <translation>CC Attribuzione Nisun' adopru cumerciale-Sparte à paru di CC BY-NC-SA</translation>
+ </message>
+ <message>
+ <source>Public domain</source>
+ <translation>Duminiu publicu</translation>
+ </message>
+ <message>
+ <source>Copyright</source>
+ <translatorcomment>attention le copyright n'est pas une protection ou une licence puisque ca existe même pour les licences libres les plus ouvertes. C'est simplement la mention détenteur des droits de reproduction (celui qui fixe la licence) . Le terme est donc impropre même en anglais.</translatorcomment>
+ <translation>Diritti d'autore</translation>
+ </message>
+ <message>
+ <source>Created the:
+</source>
+ <translation>Creatu u:</translation>
+ </message>
+ <message>
+ <source>Updated the:
+</source>
+ <translation>Aghjurnatu u :</translation>
+ </message>
+ <message>
+ <source>Title page</source>
+ <translation>Pagina di titulu</translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherGuidePresentationWidget</name>
+ <message>
+ <source>Page: %0</source>
+ <translation>Pagina: %0</translation>
+ </message>
+</context>
+<context>
+ <name>UBThumbnailAdaptor</name>
+ <message>
+ <source>Generating preview thumbnails ...</source>
+ <translation>In via di creazione di maghjinette da visualizà ...</translation>
+ </message>
+ <message>
+ <source>%1 thumbnails generated ...</source>
+ <translation>%1 maghjinette fatte...</translation>
+ </message>
+</context>
+<context>
+ <name>UBToolsManager</name>
+ <message>
+ <source>Compass</source>
+ <translation>Cumpassu</translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation>Riga</translation>
+ </message>
+ <message>
+ <source>Protractor</source>
+ <translation>Rapurtadore</translation>
+ </message>
+ <message>
+ <source>Mask</source>
+ <translation>Maschera</translation>
+ </message>
+ <message>
+ <source>Triangle</source>
+ <translation>Triangulu</translation>
+ </message>
+ <message>
+ <source>Magnifier</source>
+ <translation>Lente</translation>
+ </message>
+ <message>
+ <source>Cache</source>
+ <translation>Cache/Tana</translation>
+ </message>
+</context>
+<context>
+ <name>UBTrapWebPageContentController</name>
+ <message>
+ <source>Whole page</source>
+ <translation>Pagina sana</translation>
+ </message>
+ <message>
+ <source>Embed </source>
+ <translation>Integratu</translation>
+ </message>
+</context>
+<context>
+ <name>UBUpdateDlg</name>
+ <message>
+ <source>Document updater</source>
+ <translation>Da attualizà u ducumentu</translation>
+ </message>
+ <message>
+ <source> files require an update.</source>
+ <translation>Bisognu ad aghjurnà i schedarii.</translation>
+ </message>
+ <message>
+ <source>Backup path: </source>
+ <translation>Salvera di sicurità : </translation>
+ </message>
+ <message>
+ <source>Browse</source>
+ <translation>Percorre</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation>Aghjurnà </translation>
+ </message>
+ <message>
+ <source>Select a backup folder</source>
+ <translation>Sceglie un cartulare da u salvà </translation>
+ </message>
+ <message>
+ <source>Files update successful!
+Please reboot the application to access the updated documents.</source>
+ <translation>Aghjurnera di i schedarii riesciuta. Pè piacè turneti à lancià l'appicazione per ghjugne à i ducumenti aghjurnati</translation>
+ </message>
+ <message>
+ <source>An error occured during the update. The files have not been affected.</source>
+ <translation>Ci hè statu un sbagliu in l'aghjurnera. I schedarii sò salvi.</translation>
+ </message>
+ <message>
+ <source>Files update results</source>
+ <translation>Risultati di l'aghjurnera di i schedarii</translation>
+ </message>
+ <message>
+ <source>Updating file </source>
+ <translation>Aghjurnera di u schedariu</translation>
+ </message>
+ <message>
+ <source>Please wait the import process will start soon...</source>
+ <translation>Aspettate pè piacè, l'impurtera ùn hà da stà tantu à cumencià </translation>
+ </message>
+ <message>
+ <source>Remind me later</source>
+ <translation>Ramentà mi più tardi</translation>
+ </message>
+</context>
+<context>
+ <name>UBWebPluginWidget</name>
+ <message>
+ <source>Loading...</source>
+ <translation>Caricamentu...</translation>
+ </message>
+</context>
+<context>
+ <name>UBWebPublisher</name>
+ <message>
+ <source>Publish Document on Sankore Web</source>
+ <translation>Publicà un ducumentu in ligna nantu à Sankore </translation>
+ </message>
+</context>
+<context>
+ <name>UBWidgetUniboardAPI</name>
+ <message>
+ <source>%0 called (method=%1, status=%2)</source>
+ <translation>%0 chjamatu (metudu=%1, statutu=%2)</translation>
+ </message>
+</context>
+<context>
+ <name>UBYouTubePublisher</name>
+ <message>
+ <source>YouTube authentication failed.</source>
+ <translation>Fiascu di l'identificazione YouTube.</translation>
+ </message>
+ <message>
+ <source>Error while uploading video to YouTube (%1)</source>
+ <translation>Sbagliu in u trasferu di a video versu YouTube (%1)</translation>
+ </message>
+ <message>
+ <source>Upload to YouTube in progress %1 %</source>
+ <translation>In via di trasferu versu YouTube %1 %</translation>
+ </message>
+ <message>
+ <source>Open-Sankore</source>
+ <translation>Open-Sankoré</translation>
+ </message>
+ <message>
+ <source>OpenSankore</source>
+ <translation>Open-Sankoré</translation>
+ </message>
+</context>
+<context>
+ <name>UBYouTubePublishingDialog</name>
+ <message>
+ <source>Upload</source>
+ <translation>Caricamentu</translation>
+ </message>
+ <message>
+ <source>Autos & Vehicles</source>
+ <translation>Vitture è altri veiculi</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation>Musica</translation>
+ </message>
+ <message>
+ <source>Pets & Animals</source>
+ <translation>Animali</translation>
+ </message>
+ <message>
+ <source>Sports</source>
+ <translation>Sporti</translation>
+ </message>
+ <message>
+ <source>Travel & Events</source>
+ <translation>Viaghji è evenimenti</translation>
+ </message>
+ <message>
+ <source>Gaming</source>
+ <translation>Ghjochi</translation>
+ </message>
+ <message>
+ <source>Comedy</source>
+ <translation>Comicu</translation>
+ </message>
+ <message>
+ <source>People & Blogs</source>
+ <translation>Persunalità è Blogghi</translation>
+ </message>
+ <message>
+ <source>News & Politics</source>
+ <translation>Attualità è Pulitica</translation>
+ </message>
+ <message>
+ <source>Entertainment</source>
+ <translation>Divertimentu</translation>
+ </message>
+ <message>
+ <source>Education</source>
+ <translation>Ãducazione</translation>
+ </message>
+ <message>
+ <source>Howto & Style</source>
+ <translation>Praticu è Stili</translation>
+ </message>
+ <message>
+ <source>Nonprofits & Activism</source>
+ <translation>Associ di vulintarii è Militantisimu</translation>
+ </message>
+ <message>
+ <source>Science & Technology</source>
+ <translation>Scenze è tennulugie</translation>
+ </message>
+</context>
+<context>
+ <name>UBZoomPalette</name>
+ <message>
+ <source>%1 x</source>
+ <translation>%1 x</translation>
+ </message>
+</context>
+<context>
+ <name>UniboardSankoreTransition</name>
+ <message>
+ <source>Import old Uniboard/Sankore documents</source>
+ <translation>Impurtà ducumenti anziani da Uniboard o Sankoré </translation>
+ </message>
+ <message>
+ <source>There are no documents that should be imported</source>
+ <translation>Ãn ci hè nisunu ducumentu da impurtà </translation>
+ </message>
+</context>
+<context>
+ <name>WBClearButton</name>
+ <message>
+ <source>Clear</source>
+ <translation>Squassà </translation>
+ </message>
+</context>
+<context>
+ <name>WBDownloadItem</name>
+ <message>
+ <source>Save File</source>
+ <translation>Arrigistrà u schedariu</translation>
+ </message>
+ <message>
+ <source>Download canceled: %1</source>
+ <translation>Caricamentu annulitu : %1</translation>
+ </message>
+ <message>
+ <source>Error opening saved file: %1</source>
+ <translation>Sbagliu à l'apertura di u schedariu: %1</translation>
+ </message>
+ <message>
+ <source>Error saving: %1</source>
+ <translation>Sbagliu in a salvera : %1</translation>
+ </message>
+ <message>
+ <source>Network Error: %1</source>
+ <translation>Sbagliu di reta: %1</translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation>seconde</translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation>minuti</translation>
+ </message>
+ <message>
+ <source>- %4 %5 remaining</source>
+ <translation>Fermanu %4 %5 </translation>
+ </message>
+ <message>
+ <source>%1 of %2 (%3/sec) %4</source>
+ <translation>%1 de %2 (%3/sec) %4</translation>
+ </message>
+ <message>
+ <source>?</source>
+ <comment>unknown file size</comment>
+ <translatorcomment>si je me fie aux commentaires des développeurs...</translatorcomment>
+ <translation>Taille de fichier inconnue</translation>
+ </message>
+ <message>
+ <source>%1 of %2 - Stopped</source>
+ <translation>%1 de %2 -piantatu</translation>
+ </message>
+ <message>
+ <source>bytes</source>
+ <translation>ottetti</translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation>CHo</translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation>Mo</translation>
+ </message>
+</context>
+<context>
+ <name>WBDownloadManager</name>
+ <message>
+ <source>1 Download</source>
+ <translation>1 caricamentu
+</translation>
+ </message>
+ <message>
+ <source>%1 Downloads</source>
+ <comment>always >= 2</comment>
+ <translation>%1 Caricamentu (i))</translation>
+ </message>
+</context>
+<context>
+ <name>WBHistoryModel</name>
+ <message>
+ <source>Title</source>
+ <translation>Titulu</translation>
+ </message>
+ <message>
+ <source>Address</source>
+ <translation>Indirizzu</translation>
+ </message>
+</context>
+<context>
+ <name>WBHistoryTreeModel</name>
+ <message>
+ <source>Earlier Today</source>
+ <translation>Più prestu Oghje</translation>
+ </message>
+ <message>
+ <source>%1 items</source>
+ <translation>%1 item</translation>
+ </message>
+</context>
+<context>
+ <name>WBSearchLineEdit</name>
+ <message>
+ <source>Search</source>
+ <translation>Ricerca</translation>
+ </message>
+</context>
+<context>
+ <name>WBTabBar</name>
+ <message>
+ <source>New &Tab</source>
+ <translation>Nuvellu & Linguetta</translation>
+ </message>
+ <message>
+ <source>Clone Tab</source>
+ <translation>Ripruduce a linguetta</translation>
+ </message>
+ <message>
+ <source>&Close Tab</source>
+ <translation>&Chjode a linguetta</translation>
+ </message>
+ <message>
+ <source>Close &Other Tabs</source>
+ <translation>Chjode &altre linguette</translation>
+ </message>
+ <message>
+ <source>Reload Tab</source>
+ <translation>Ricaricà a linguetta</translation>
+ </message>
+ <message>
+ <source>Reload All Tabs</source>
+ <translation>Ricaricà tutte e linguette</translation>
+ </message>
+</context>
+<context>
+ <name>WBTabWidget</name>
+ <message>
+ <source>Recently Closed Tabs</source>
+ <translation>Linguette chjose da pocu</translation>
+ </message>
+ <message>
+ <source>(Untitled)</source>
+ <translation>(Senza titulu)</translation>
+ </message>
+</context>
+<context>
+ <name>WBToolbarSearch</name>
+ <message>
+ <source>Search</source>
+ <translation>Ricerca</translation>
+ </message>
+ <message>
+ <source>No Recent Searches</source>
+ <translation>Nisuna ricerca da pocu</translation>
+ </message>
+ <message>
+ <source>Recent Searches</source>
+ <translation>Ricerche fatte da pocu</translation>
+ </message>
+ <message>
+ <source>Clear Recent Searches</source>
+ <translation>Squassà e ricerche fatte da pocu</translation>
+ </message>
+</context>
+<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Sceglie u cuntinutu da chjappà </translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nome di l'appicazione</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Restrizzione è non rispunsabilità </translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Sta caratteristica hè da viaghjà in e pagine più aduprate</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Pè piacè rispettate i dritti d'autori pè crià una leia o pè chjappà un cuntinutu da a tela.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WBWebPage</name>
+ <message>
+ <source>Download</source>
+ <translation>Caricamentu</translation>
+ </message>
+ <message>
+ <source>Add to Current Document</source>
+ <translation>Aghjunghje à u ducumentu apertu</translation>
+ </message>
+ <message>
+ <source>PDF</source>
+ <translation>PDF</translation>
+ </message>
+ <message>
+ <source>Error loading page: %1</source>
+ <translation>Sbagliu in u caricamentu di a pagina : %1</translation>
+ </message>
+ <message>
+ <source>Download PDF Document: would you prefer to download the PDF file or add it to the current Sankore document?</source>
+ <translation>Caricamentu di u Ducumentu PDF: vulete caricà u schedariu PDF o aghjunghje lu à u ducumentu Sankoré apertu?</translation>
+ </message>
+</context>
+<context>
+ <name>WBWebView</name>
+ <message>
+ <source>Open in New Tab</source>
+ <translation>Apre in una altra linguetta</translation>
+ </message>
+</context>
+<context>
+ <name>YouTubePublishingDialog</name>
+ <message>
+ <source>Publish Podcast to YouTube</source>
+ <translation>Publicà u podcast nantu à YouTube</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titulu</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Descrizzione</translation>
+ </message>
+ <message>
+ <source>Keywords</source>
+ <translation>Parolle chjave</translation>
+ </message>
+ <message>
+ <source>Uniboard</source>
+ <translation>Uniboard</translation>
+ </message>
+ <message>
+ <source>Category</source>
+ <translation>Categuria</translation>
+ </message>
+ <message>
+ <source>YouTube Username</source>
+ <translation>Nome d'utilizatore YouTube</translation>
+ </message>
+ <message>
+ <source>YouTube Password</source>
+ <translation>Contrusegnu YouTube</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">By clicking 'Upload,' you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">En cliquant sur le bouton "Téléchargement", vous certifiez que vous respectez les conditions générales d'utilisation de YouTube </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>Risturà l'identificanti à u lancià </translation>
+ </message>
+</context>
+<context>
+ <name>brushProperties</name>
+ <message>
+ <source>Opacity</source>
+ <translation>Upacità </translation>
+ </message>
+ <message>
+ <source>On Light Background</source>
+ <translation>Nant'Ã fondu chjaru</translation>
+ </message>
+ <message>
+ <source>On Dark Background</source>
+ <translation>Nant'Ã fondu scuru</translation>
+ </message>
+ <message>
+ <source>Line Width</source>
+ <translation>Larghezza di a linea</translation>
+ </message>
+ <message>
+ <source>Medium</source>
+ <translation>Mediu</translation>
+ </message>
+ <message>
+ <source>Strong</source>
+ <translation>Grossa</translation>
+ </message>
+ <message>
+ <source>Fine</source>
+ <translation>Fine</translation>
+ </message>
+ <message>
+ <source>Pen is Pressure Sensitive</source>
+ <translation>Stilò sensibile à a pressione
+</translation>
+ </message>
+</context>
+<context>
+ <name>capturePublishingDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation>Dialogu
+</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titulu</translation>
+ </message>
+ <message>
+ <source>E-mail</source>
+ <translation>Melu</translation>
+ </message>
+ <message>
+ <source>Author</source>
+ <translation>Autore</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Descrizzione</translation>
+ </message>
+</context>
+<context>
+ <name>documentPublishingDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation>Dialogu</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>Titulu</translation>
+ </message>
+ <message>
+ <source>E-mail</source>
+ <translation>Melu</translation>
+ </message>
+ <message>
+ <source>Author</source>
+ <translation>Autore</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Descrizzione</translation>
+ </message>
+ <message>
+ <source>Attach Downloadable PDF Version</source>
+ <translation>Appiccià a versione PDF da caricà </translation>
+ </message>
+ <message>
+ <source>Attach Downloadable Uniboard File (UBZ)</source>
+ <translation>Appiccià u schedariu Uniboard (UBZ)da caricà </translation>
+ </message>
+ <message>
+ <source>Warning: This documents contains video, which will not be displayed properly on the Web</source>
+ <translation>Attenti: ci hè una video in sti ducumenti; ùn si puderà affissà propiu bè nant'à u web</translation>
+ </message>
+</context>
+<context>
+ <name>documents</name>
+ <message>
+ <source>Uniboard Documents</source>
+ <translation>Ducumenti Uniboard
+</translation>
+ </message>
+</context>
+<context>
+ <name>preferencesDialog</name>
+ <message>
+ <source>Preferences</source>
+ <translation>Preferenze</translation>
+ </message>
+ <message>
+ <source>Default Settings</source>
+ <translation>Arrigulera predefinita
+</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Chjode</translation>
+ </message>
+ <message>
+ <source>Display</source>
+ <translation>Affissà /Affissera</translation>
+ </message>
+ <message>
+ <source>Show Page with External Browser</source>
+ <translation>Affissà a pagina cù un navigatore sternu</translation>
+ </message>
+ <message>
+ <source>Virtual Keyboard</source>
+ <translation>Tastera virtuale</translation>
+ </message>
+ <message>
+ <source>Keyboard button size:</source>
+ <translation>Misura di u buttonu di a tastera</translation>
+ </message>
+ <message>
+ <source>Positioned at the Top (recommended for tablets)</source>
+ <translation>Messa in sù (cunsigliatu pè e tavulette)</translation>
+ </message>
+ <message>
+ <source>Positioned at the Bottom (recommended for white boards)</source>
+ <translation>Messa in ghjò (cunsigliatu pè e tavuloni interattivi)</translation>
+ </message>
+ <message>
+ <source>Display Text Under Button</source>
+ <translation>Affissà i scritti sott'à u buttonu</translation>
+ </message>
+ <message>
+ <source>Software Update</source>
+ <translation>Aghjurnera di u lugiziale</translation>
+ </message>
+ <message>
+ <source>Check software update at launch</source>
+ <translation>Verificà l'aghjurnera di u lugiziale à u lancià </translation>
+ </message>
+ <message>
+ <source>Internet</source>
+ <translation>Internet</translation>
+ </message>
+ <message>
+ <source>Home Page:</source>
+ <translation>Pagina d'accolta :</translation>
+ </message>
+ <message utf8="true">
+ <source>version : â¦</source>
+ <translation>versione :...</translation>
+ </message>
+ <message>
+ <source>Toolbar</source>
+ <translation>Stanga d'attrazzi</translation>
+ </message>
+ <message>
+ <source>Stylus Palette</source>
+ <translation>Stanga di u stile</translation>
+ </message>
+ <message>
+ <source>Horizontal</source>
+ <translation>Urizontale</translation>
+ </message>
+ <message>
+ <source>Vertical</source>
+ <translation>Verticale</translation>
+ </message>
+ <message>
+ <source>Pen</source>
+ <translation>Stilò</translation>
+ </message>
+ <message>
+ <source>Marker</source>
+ <translation>Segnu</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation>In quant'Ã </translation>
+ </message>
+ <message>
+ <source>Licences</source>
+ <translation>Licenze</translation>
+ </message>
+ <message>
+ <source>zlib</source>
+ <translation>zlib</translation>
+ </message>
+ <message>
+ <source>Network</source>
+ <translation>Reta</translation>
+ </message>
+ <message utf8="true">
+ <source>Open-Sankoré</source>
+ <translation>Apre-Sankoré</translation>
+ </message>
+ <message>
+ <source>Show internal web page content on secondary screen or projector</source>
+ <translation>Affissà u cuntinutu di a pagina web interna nant'à u screnu sicundariu o u prugettore</translation>
+ </message>
+ <message>
+ <source>Multi display</source>
+ <translation>Multi-affissera</translation>
+ </message>
+ <message>
+ <source>Swap control display and view display</source>
+ <translation>Inguerscià u screnu di cuntrollu è vede l'affissera I</translation>
+ </message>
+ <message>
+ <source>Mode</source>
+ <translation>Modu</translation>
+ </message>
+ <message>
+ <source>Mode to start in:</source>
+ <translation>Modu da cumencià :</translation>
+ </message>
+ <message>
+ <source>Board</source>
+ <translation>Tavulone</translation>
+ </message>
+ <message>
+ <source>Desktop</source>
+ <translation>Scagnu</translation>
+ </message>
+ <message>
+ <source>Proxy User:</source>
+ <translation>Utilizatore di u Proxy :</translation>
+ </message>
+ <message>
+ <source>Pass:</source>
+ <translation>Contrusegnu :</translation>
+ </message>
+ <message>
+ <source>User:</source>
+ <translation>Utilizatore :</translation>
+ </message>
+ <message>
+ <source>Pass: </source>
+ <translation>Contrusegnu</translation>
+ </message>
+ <message>
+ <source>Credits</source>
+ <translation>Crediti</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Identificante Planète Sankoré/Pianeta Sankoré pà spurtà u schedariu</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>Risturà l'identificanti à u lancià </translation>
+ </message>
+ <message>
+ <source>Start up tips</source>
+ <translation>Attrazzi da cumencià </translation>
+ </message>
+ <message>
+ <source>Show start up tips</source>
+ <translation>Affissà l'attrazzi da cumencià </translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Lingua</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Sceglie una lingua</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>A nuvella lingua serà caricata à u prossimu lancià </translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Chjode Open-Sankoré</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>ApreSSl</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>trapFlashDialog</name>
+ <message>
+ <source>Trap flash</source>
+ <translation>Chjappà cuntinutu flash
+</translation>
+ </message>
+ <message>
+ <source>Select a flash to trap</source>
+ <translation>Sceglie un flash da chjappà </translation>
+ </message>
+ <message>
+ <source>about:blank</source>
+ <translation>in quant'Ã : viotu</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nome di l'appicazione</translation>
+ </message>
+ <message>
+ <source>Create Application</source>
+ <translation>Creà una appicazione</translation>
+ </message>
+</context>
+</TS>
diff --git a/Sankore-3.1/resources/i18n/sankore_cs.ts b/Sankore-3.1/resources/i18n/sankore_cs.ts
index df27f5a..be7eaf6 100644
--- a/Sankore-3.1/resources/i18n/sankore_cs.ts
+++ b/Sankore-3.1/resources/i18n/sankore_cs.ts
@@ -165,10 +165,6 @@
<translation>SvÄtlá</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Vložit obsah z webu</translation>
- </message>
- <message>
<source>Pages</source>
<translation>Stránky</translation>
</message>
@@ -377,10 +373,6 @@
<translation>Nová složka</translation>
</message>
<message>
- <source>Trap Flash Content</source>
- <translation>PÅenést obsah ve Flashi</translation>
- </message>
- <message>
<source>Import</source>
<translation>OtevÅÃt</translation>
</message>
@@ -466,6 +458,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Záložka</translation>
</message>
<message>
@@ -573,10 +566,6 @@
<translation>V zobrazené Äásti obrazovky zobrazit hlavnà obrazovku</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>PÅenést Flash</translation>
- </message>
- <message>
<source>Window Capture</source>
<translation>Zachytit okno</translation>
</message>
@@ -601,10 +590,6 @@
<translation>Zobrazit editor widgetů Open-Sankoré</translation>
</message>
<message>
- <source>Capture Embeddable Web Content</source>
- <translation>Zachytit Äást webové stránky</translation>
- </message>
- <message>
<source>Write Text</source>
<translation>Napsat text</translation>
</message>
@@ -824,6 +809,43 @@
<source>Group</source>
<translation>Seskupit</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Stáhnout do</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">knihovny</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Stáhnout do knihovny</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Stáhnout do</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuálnà stránky</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Stáhnout do aktuálnà stránky</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">PÅidat odkaz do</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">knihovny</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>PÅidat odkaz do knihovny</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">PÅidat odkaz na</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuálnà stránku</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>PÅidat odkaz na aktuálnà stránku</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Záložka</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -867,7 +889,7 @@
<name>QObject</name>
<message>
<source>Element ID = </source>
- <translation type="unfinished">ID objektu = </translation>
+ <translation>ID objektu = </translation>
</message>
<message>
<source>Content is not supported in destination format.</source>
@@ -977,14 +999,6 @@
<context>
<name>UBCachePropertiesWidget</name>
<message>
- <source>Close</source>
- <translation>ZavÅÃt</translation>
- </message>
- <message>
- <source>Size:</source>
- <translation>Velikost:</translation>
- </message>
- <message>
<source>Color:</source>
<translation>Barva:</translation>
</message>
@@ -996,6 +1010,112 @@
<source>Cache Properties</source>
<translation>Vlastnosti baterky</translation>
</message>
+ <message>
+ <source>Alpha:</source>
+ <translation>Průhlednost:</translation>
+ </message>
+ <message>
+ <source>Geometry:</source>
+ <translation>Geometrie:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Å ÃÅka:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Výška:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Zachovat proporce</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Mód:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Náhled:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>ZavÅÃt baterku</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><upustit obsah></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Obrázky nejsou akceptovány</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Nenà možné zobrazit data</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>UpuÅ¡tÄný soubor nebyl rozpoznán jako zvukový soubor</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>PÅehrát zvukový soubor</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>PÅidat odkaz na stránku</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>PÅidat odkaz na webovou stránku</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Táhni a upusť zvukový soubor z knihovny do tohoto pole</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Dalšà stránka</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>PÅedchozà stránka</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Ãvodnà stránka</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Poslednà stránka</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>ÄÃslo stránky</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Sem vložte url</translation>
+ </message>
</context>
<context>
<name>UBDesktopPalette</name>
@@ -1035,22 +1155,10 @@
<translation>Koš</translation>
</message>
<message>
- <source>Are you sure you want to empty trash?</source>
- <translation>UrÄitÄ chcete vyprázdnit koÅ¡?</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>UrÄitÄ chcete odstranit složku "%1" a celý jejà obsah?</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>OtevÅÃt podporovaný soubor</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Odstranit dokument</translation>
- </message>
- <message>
<source>All Images (%1)</source>
<translation>Všechny obrázky (%1)</translation>
</message>
@@ -1103,37 +1211,13 @@
<translation>Soubor se nepodaÅilo otevÅÃt...</translation>
</message>
<message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>UrÄitÄ chcete odstranit dokument "%1"?</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>KoÅ¡ byl vyprázdnÄn</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Vyprázdnit koš</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Odstranit složku</translation>
- </message>
- <message>
<source>Remove Page</source>
<translation>Odstranit stránku</translation>
</message>
<message>
- <source>No document selected!</source>
- <translation>Nevybrali jste žádný dokument!</translation>
- </message>
- <message>
<source>Import all Images from Folder</source>
<translation>Nahrát všechny obrázky ze složky</translation>
</message>
- <message>
- <source>Emptying trash</source>
- <translation>VyprazdÅuje se koÅ¡</translation>
- </message>
<message numerus="yes">
<source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
<translation>
@@ -1162,6 +1246,14 @@
<source>Untitled Documents</source>
<translation>Dokumenty bez názvu</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1249,6 +1341,60 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>PÅijmout</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Nahradit</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Zrušit</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Název %1 již existuje.
+PoužitÃm tohoto názvu bude nahrazen dokument.
+Poskytnutà nového názvu vytvoÅà nový dokument.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Moje dokumenty</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>PÅÃklady</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Koš</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Dokumenty bez názvu</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">KopÃruje se stránka %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 zkopÃrovaná stránka</numerusform>
+ <numerusform>%1 zkopÃrované stránky</numerusform>
+ <numerusform>%1 zkopÃrovaných stránek</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message numerus="yes">
<source>%1 pages copied</source>
@@ -1268,6 +1414,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Stahovánà se nezdaÅilo.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>vzdálený server odmÃtnul pÅipojenà (server odmÃtá požadavky)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>vzdálený server pÅedÄasnÄ ukonÄil spojenÃ, pÅedtÃm než odpovÄÄ byla pÅijata a zpracována</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>jméno vzdáleného poÄÃtaÄe nebylo nalezeno (neplatný hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>pÅipojenà ke vzdálenému serveru vyprÅ¡elo</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>operace byla pÅeruÅ¡ena zavolánÃm pÅeruÅ¡it() nebo zavÅÃt() pÅedtÃm, než byla ukonÄena.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>Ustavenà SSL/TLS spojenà selhalo a Å¡ifrovaná komunikace nebyla založena. MÄl by být vysÃlán signál sslErrors().</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>pÅipojenà se pÅeruÅ¡ilo - doÅ¡lo k odpojenà od sÃtÄ.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>spojenà s proxy serverem bylo odmÃtnuto</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>proxy sever ukonÄil spojenÃ</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>jméno proxy serveru nebylo nalezeno (neplatný proxy hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>pÅipojenà k proxy serveru vyprÅ¡elo</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>proxy server vyžaduje pÅihlaÅ¡ovacà údaje</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>pÅÃstup ke vzdálenému obsahu byl odepÅen (stejnÄ jako HTTP chyba 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>operace požadovaná po vzdáleném obsahu nenà povolena</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>vzdálený obsah nebyl na serveru nalezen (stejnÄ jako HTTP chyba 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>vzdálený server vyžaduje pÅihlaÅ¡ovacà údaje</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>požadavek je nutné poslat znovu.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>požadavek nemůže být proveden, protokol je neznámý</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>požadovaná operace pro tento protokol je neplatná</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>byla detekována neznámá chyba sÃtÄ</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>byla detekována neznámá chyba proxy serveru</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>byla detekována neznámá chyba vzdáleného obsahu</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>byla detekována chyba v protokolu</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1336,6 +1581,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Soubor se nepodaÅilo exportovat...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exportovat jako soubor UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Exportuje se dokument...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Export byl úspÄÅ¡nÄ dokonÄen.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Export se nezdaÅil.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exportovat do formátu Sankoré UBX</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1422,6 +1694,10 @@
<source>Object informations</source>
<translation>Informace o objektu</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">PÅidat</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1504,6 +1780,14 @@
<source>Trash</source>
<translation>Koš</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Záložky</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1537,6 +1821,22 @@
<source>Visible on Extended Screen</source>
<translation>Viditelné na rozÅ¡ÃÅené obrazovce</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>PÅidat akci</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Odstranit odkaz na zvuk</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Odstranit odkaz na stránku</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Odstranit odkaz na web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1552,6 +1852,22 @@
<source>Visible on Extended Screen</source>
<translation>Viditelné na rozÅ¡ÃÅené obrazovce</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>PÅidat akci</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Odstranit odkaz na zvuk</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Odstranit odkaz na stránku</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Odstranit odkaz na web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1572,13 +1888,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1639,6 +1948,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (soubor dokumentů) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1853,6 +2169,142 @@ Chcete ignorovat tyto chyby na tomto serveru?</translation>
<source>Marker is pressure sensitive</source>
<translation>ZvýrazÅovaÄ je citlivý na tlak</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>VýchozÃ</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabština</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulharština</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Katalánština</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>ÄeÅ¡tina</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Dánština</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>NÄmÄina</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>ÅeÄtina</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>AngliÄtina</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>AngliÄtina UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Å panÄlÅ¡tina</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Francouzština</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Švýcarská francouzština</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italština</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebrejština</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japonština</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Korejština</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Madagaskarština</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norština</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Holandština</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polština</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Rétorománština</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Rumunština</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Ruština</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovenština</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Švédština</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>TureÄtina</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ÄÃnÅ¡tina</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ZjednoduÅ¡ená ÄÃnÅ¡tina</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>TradiÄnà ÄÃnÅ¡tina</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1894,6 +2346,17 @@ Chcete ignorovat tyto chyby na tomto serveru?</translation>
<source>My Movies</source>
<translation>Moje filmy</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Zobrazit pÅi spuÅ¡tÄnÃ</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2107,21 +2570,17 @@ Chcete ignorovat tyto chyby na tomto serveru?</translation>
<source>Magnifier</source>
<translation>Lupa</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation type="obsolete">Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Celá stránka</translation>
</message>
+ <message>
+ <source>Embed </source>
+ <translation>VnoÅit </translation>
+ </message>
</context>
<context>
<name>UBUpdateDlg</name>
@@ -2467,6 +2926,50 @@ Znovu spusťte aplikaci, abyste mohli pracovat s aktualizovanými dokumenty.</tr
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Vyberte obsah, který chcete pÅenést:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Název aplikace</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Omezenà a vylouÄenà odpovÄdnosti. </translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translatorcomment>Tato funkce byla vyvÃjena, aby fungovala na vÄtÅ¡inÄ bÄžných webových stránkách.</translatorcomment>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>PÅi vytváÅenà odkazů Äi pÅenášenà obsahu z webu, respektujte, prosÃm, autorská práva.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>PDF</source>
@@ -2544,7 +3047,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>Po restartu obnovit pÅihlaÅ¡ovacà údaje</translation>
</message>
</context>
<context>
@@ -2654,10 +3157,6 @@ p, li { white-space: pre-wrap; }
<translation>Pero</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
@@ -2702,10 +3201,6 @@ p, li { white-space: pre-wrap; }
<translation>ZvýrazÅovaÄ</translation>
</message>
<message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Internet</source>
<translation>Internet</translation>
</message>
@@ -2714,10 +3209,6 @@ p, li { white-space: pre-wrap; }
<translation>Je umÃstÄný na vrchu (doporuÄeno pro tablety)</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>Virtual Keyboard</source>
<translation>Virtuálnà klávesnice</translation>
</message>
@@ -2801,10 +3292,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Heslo:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">Planète Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Uživatel:</translation>
@@ -2814,542 +3301,62 @@ p, li { white-space: pre-wrap; }
<translation>Heslo:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation></translation>
- </message>
- <message>
<source>Credits</source>
<translation>Zásluhy</translation>
</message>
<message utf8="true">
<source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <translation>Planète Sankoré ID pro exportovaný soubor</translation>
</message>
<message>
<source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <translation>Po restartu obnovit pÅihlaÅ¡ovacà údaje </translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>Tipy pÅi spuÅ¡tÄnÃ</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Show start up tips</source>
+ <translation>Zobrazovat tipy pÅi spuÅ¡tÄnÃ</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Jazyk</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Vybrat jazyk</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Nový jazyk se nahraje po restartu aplikace</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>ZavÅÃt Open-Sankoré</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_da.ts b/Sankore-3.1/resources/i18n/sankore_da.ts
index b0af95f..8a1396f 100644
--- a/Sankore-3.1/resources/i18n/sankore_da.ts
+++ b/Sankore-3.1/resources/i18n/sankore_da.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Bogmærke</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>Konfigurer podcast-optagelse</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Flash Trap</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Opsaml Flash-indhold</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Web Trap</translation>
</message>
@@ -728,14 +721,6 @@
<translation>Klip en del af vinduet</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Indlejring af web-indhold</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Klip web-indhold som kan indlejres</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>Vis på displayet</translation>
</message>
@@ -824,6 +809,43 @@
<source>Group</source>
<translation>Gruppér</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download til</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Download til bibliotek</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation>Schweiz</translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Download til aktuel side</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Tilføj link til</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Tilføj link til bibliotek</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">tilføj link til</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuel side</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Tilføj link til aktuel side</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Bogmærke</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -989,12 +1011,110 @@
<translation>Form:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Størrelse:</translation>
+ <source>Alpha:</source>
+ <translation>Alfa</translation>
</message>
<message>
- <source>Close</source>
- <translation>Luk</translation>
+ <source>Geometry:</source>
+ <translation>Geometri</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Bredde: </translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Højde:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Overhold proportioner</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Tilstand:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Forhåndsvisning:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Luk cache</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><drop indhold></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Billeder accepteres ikke</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Kan ikke vise data</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Sluppet fil genkendes ikke som en lydfil</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Afspil en lydfil</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Tilføj link til side</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Tilføj link til en hjemmeside</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>træk og slip lydfilen fra biblioteket til denne boks</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Næste side</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Forrige side</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Titelside</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Sidste side</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Sidetal</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Indsæt url-tekst her</translation>
</message>
</context>
<context>
@@ -1059,42 +1179,6 @@
<translation>Fjern side</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Fjern dokument</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Er du sikker på, at du ønsker at fjerne dokumentet '%1'?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Tøm papirkurv</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Er du sikker på, at du ønsker at tømme papirkurven?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Tømmer papirkurv</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Tømt papirkurv</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Fjern mappe</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Er du sikker på, at du ønsker at fjerne mappen ' %1' og hele dens indhold?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Der er ikke valgt noget dokument!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Ã
bn understøttet fil</translation>
</message>
@@ -1161,6 +1245,14 @@
<source>Untitled Documents</source>
<translation>Unavngivne dokumenter</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>Denne handling kan ikke fortrydes!</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1248,6 +1340,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Accepter</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Erstat</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Annuller</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Navnet %1 er allerede i brug.
+Hvis du beholder dette navn, vil dokumentet blive erstattet.
+Hvis du angiver et nyt navn, vil der blive oprettet et nyt dokument.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Mine dokumenter</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modeller</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Papirkurv</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Ikke navngivne dokumenter</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Kopierer side %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 side kopieret</numerusform>
+ <numerusform>%1 sider kopieret</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1266,6 +1411,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Download mislykkedes.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>fjernserveren afviste forbindelsen (serveren accepterer ikke forespørgsler)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>fjernserveren afbrød forbindelsen for tidligt, før hele svaret blev modtaget og behandlet</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>fjernværtsnavnet blev ikke fundet (ugyldig t værtsnavn)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>timeout i forbindelsen til fjernserveren</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>handlingen blev afbrudt via opkadt for at afbryde() eller lukke(), før den var færdig.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>SSL/TLS-håndtryk mislykkedes, og den krypterede kanal kunne ikke oprettes. sslErrors()-signalet skulle have været udsendt.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>forbindelsen blev brudt på grund af frakobling fra netværket, men systemet har indledt roaming til et andet adgangspunkt. Forespørgslen skal foretages igen og vil blive behandlet, så snart forbindelsen er genoprettet.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>forbindelsen til proxyserveren blev nægtet (proxyserveren accepterer ikke forespørgsler)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>proxyserveren afbrød forbindelsen for tidligt, før hele svaret blev modtaget og behandlet</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>proxyværtsnavnet blev ikke fundet (ugyldigt proxyværtsnavn)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>timeout i forbindelsen til proxy eller proxyen har ikke svaret på den sendte forespørgsel i tide</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>proxyen kræver godkendelse for at imødekomme forespørgslen, men har ikke accepteret nogen af de tilbudte legitimationsoplysninge (hvis de forefindes)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>adgang til eksternt indhold nægtet (svarende til HTTP-fejl 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>handlingen, som blev forespurgt på fjernindholdet, er ikke tilladt</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>fjernindholdet blev ikke fundet på serveren (svarende til HTTP-fejl 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>fjernserveren kræver godkendelse til at behandle indholdet, men de medfølgende legitimationsoplysninger blev ikke accepteret (hvis de forefindes)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>forespørgslen skulle sendes igen, men dette mislykkedes, for eksempel fordi de uploadede data ikke kunne læses anden gang.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Network Access API kan ikke imødekomme forespørgslen, fordi protokollen er ukendt</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>den ønskede handling er ugyldig for denne protokol</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>der blev fundet en ukendt netværksrelateret fejl</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>der blev fundet en ukendt proxyrelateret fejl</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>der blev påvist en ukendt fejl relateret til fjernindhold</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>der blev påvist et nedbrud i protokollen (parsingfejl, ugyldige eller uventede svar, osv.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1334,6 +1578,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Eksport mislykkedes...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exporter som UBX-fil</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Eksporterer dokument...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Eksport gennemført.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Eksport mislykkedes.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exporter til Sankore UBX-format</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1420,6 +1691,10 @@
<source>Object informations</source>
<translation>Objektinformationer</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>Tilføj</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1502,6 +1777,14 @@
<source>Trash</source>
<translation>Papirkurv</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Bogmærker</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1535,6 +1818,22 @@
<source>Visible on Extended Screen</source>
<translation>Synlig på udvidet skærm</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Tilføj en handling</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Fjern link til lydfil</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Fjern link til side</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Fjern link til web-url</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1550,6 +1849,22 @@
<source>Go to Content Source</source>
<translation>GÃ¥ til indholdskilde</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Tilføj en handling</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Fjern link til lydfil</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Fjern link til side</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Fjern link til web-url</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1570,13 +1885,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1637,6 +1945,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (sæt af dokumenter) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1851,7 +2166,143 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>Markøren er tryksensitiv</translation>
</message>
-</context>
+ <message>
+ <source>Default</source>
+ <translation>Default</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabisk</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgarsk</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Katalansk</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Tjekkisk</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Dansk</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Tysk</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Græsk</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Engelsk</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Engelsk UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Spansk</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Fransk</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Schweizisk fransk</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italiensk</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebræisk</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japansk</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Koreansk</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Madagaskisk</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norsk</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Hollandsk</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polsk</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Rætoromansk</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Rumænsk</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Russisk</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovakisk</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Svensk</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Tyrkisk</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Kinesisk</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Kinesisk, forenklet</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Kinesisk, traditionelt</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>Korsikansk</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hindi</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>UBProxyLoginDlg</name>
<message>
@@ -1892,6 +2343,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>Mine Film</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation></translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Synligst næste gang</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2111,20 +2573,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>Cache</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Hel side</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Indlejr</translation>
</message>
</context>
<context>
@@ -2471,6 +2929,53 @@ Genstart venligst applikationen for at få adgang til de opdaterede dokumenter.<
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Vælg indhold til fælde:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Navn på applikation</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Begrænsninger og ansvarsfraskrivelse.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Denne funktion er udviklet til at fungere på de mest almindelige websider.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Vær venlig at respektere ophavsrettighederne, når du laver links eller henter indhold fra internettet.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>Download til
+bibliotek</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>Download til
+aktuel side</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>Tilføj link til
+bibliotek</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>Tilføj link til
+aktuel side</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2542,6 +3047,10 @@ p, li { white-space: pre-wrap; }
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">By clicking 'Upload,' you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></source>
<translation></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>Gendan legitimationsoplysninger på reboot</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2738,22 +3247,10 @@ p, li { white-space: pre-wrap; }
<translation>Licenser</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSI</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Netværk</translation>
</message>
@@ -2797,10 +3294,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Adgangskode:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>Planet Sankoré-ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Bruger:</translation>
@@ -2810,1042 +3303,70 @@ p, li { white-space: pre-wrap; }
<translation>Adgangskode:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</translation>
- </message>
- <message>
<source>Credits</source>
<translation>Anerkendelse</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></translation>
+ <source>Start up tips</source>
+ <translation>Tips til opstart</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Show start up tips</source>
+ <translation>Vis tips til opstart</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Sprog</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Vælg et sprog</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Det nye sprog vil blive indlæst ved næste genstart</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Luk Open-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ID til at eksportere fil</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>Gendan legitimationsoplysninger på reboot</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Licenserne er på engelsk for at overholde den officielle og juridisk godkendte oversættelse.</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_de.ts b/Sankore-3.1/resources/i18n/sankore_de.ts
index 2afb6cc..8806207 100644
--- a/Sankore-3.1/resources/i18n/sankore_de.ts
+++ b/Sankore-3.1/resources/i18n/sankore_de.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Lesezeichen</translation>
</message>
<message>
@@ -700,20 +701,12 @@
<translation>Podcast-Aufnahme konfigurieren</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Falle einblenden</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Eingeblendeten Inhalt einfangen</translation>
- </message>
- <message>
<source>Web Trap</source>
- <translation>Webfalle</translation>
+ <translation>Web einschlieÃen</translation>
</message>
<message>
<source>Trap Web Content</source>
- <translation>Webinhalt einfangen</translation>
+ <translation>Webinhalt einschlieÃen</translation>
</message>
<message>
<source>Custom Capture</source>
@@ -728,14 +721,6 @@
<translation>Fenster erfassen</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Web-Inhalt einbinden</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Integrierbaren Webinhalt erfassen</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>Auf dem Bildschirm anzeigen</translation>
</message>
@@ -821,7 +806,44 @@
</message>
<message>
<source>Group</source>
- <translation type="unfinished">Gruppieren</translation>
+ <translation>Gruppieren</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download in</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Bibliothek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Download in Bibliothek</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download in</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuelle Seite</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Download in aktuelle Seite</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Link hinzufügen zur</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Bibliothek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Link zur Bibliothek hinzufügen</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Link hinzufügen zu</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktueller Seite</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Link zu aktueller Seite hinzufügen</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Lesezeichen</translation>
</message>
</context>
<context>
@@ -866,19 +888,19 @@
<name>QObject</name>
<message>
<source>Element ID = </source>
- <translation type="unfinished">Element ID = </translation>
+ <translation>Element ID = </translation>
</message>
<message>
<source>Content is not supported in destination format.</source>
- <translation type="unfinished">Inhalt wird im Zielformat nicht unterstützt.</translation>
+ <translation>Inhalt wird im Zielformat nicht unterstützt.</translation>
</message>
<message>
<source>Remove Page</source>
- <translation type="unfinished">Seite entfernen</translation>
+ <translation>Seite entfernen</translation>
</message>
<message>
<source>Are you sure you want to remove 1 page from the selected document '%0'?</source>
- <translation type="unfinished">Wollen Sie wirklich 1 Seite des gewählten Dokuments '%0' entfernen?</translation>
+ <translation>Wollen Sie wirklich 1 Seite des gewählten Dokuments '%0' entfernen?</translation>
</message>
</context>
<context>
@@ -943,23 +965,23 @@
</message>
<message>
<source>Delete page %1 from document</source>
- <translation type="unfinished">Seite %1 des Dokuments löschen</translation>
+ <translation>Seite %1 des Dokuments löschen</translation>
</message>
<message>
<source>Page %1 deleted</source>
- <translation type="unfinished">Seite %1 gelöscht</translation>
+ <translation>Seite %1 gelöscht</translation>
</message>
<message>
<source>Add file operation failed: file copying error</source>
- <translation type="unfinished">Dokument hinzufügen fehlgeschlagen: Fehler beim Kopieren</translation>
+ <translation>Dokument hinzufügen fehlgeschlagen: Fehler beim Kopieren</translation>
</message>
<message>
<source>Group</source>
- <translation type="unfinished">Gruppieren</translation>
+ <translation>Gruppieren</translation>
</message>
<message>
<source>Ungroup</source>
- <translation type="unfinished">Gruppierung auflösen</translation>
+ <translation>Gruppierung auflösen</translation>
</message>
</context>
<context>
@@ -988,12 +1010,110 @@
<translation>Form:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>GröÃe:</translation>
+ <source>Alpha:</source>
+ <translation>Alpha:</translation>
</message>
<message>
- <source>Close</source>
- <translation>SchlieÃen</translation>
+ <source>Geometry:</source>
+ <translation>Geometrie:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Breite:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Höhe:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Proportionen erhalten</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Modus:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Vorschau:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Cache schlieÃen</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><ablegen Inhalt></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Bilder werden nicht akzeptiert</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Daten können nicht angezeigt werden</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Abgelegtes File wird nicht als Audiofile erkannt</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Ein Audiofile abspielen</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Link zur Seite hinzufügen</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Link zu einer Webseite hinzufügen</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Audiofile aus der Bibliothek ziehen und in dieser Box ablegen</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Nächste Seite</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Vorherige Seite</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Titelseite</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Letzte Seite</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Seitennummer</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>URL Text hier eingeben</translation>
</message>
</context>
<context>
@@ -1020,7 +1140,7 @@
</message>
<message>
<source>Show Open-Sankore</source>
- <translation type="unfinished">Open-Sankore anzeigen</translation>
+ <translation>Open-Sankore anzeigen</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>Seite entfernen</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Dokument entfernen</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Möchten Sie das Dokument '%1' wirklich entfernen?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Leerer Papierkorb</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Möchten Sie den Papierkorb wirklich leeren?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Papierkorb wird geleert</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Papierkorb geleert</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Ordner entfernen</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Möchten Sie den Ordner '%1 mit dem gesamten Inhalt wirklich entfernen?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Kein Dokument ausgewählt!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Unterstützte Datei öffnen</translation>
</message>
@@ -1154,11 +1238,19 @@
</message>
<message>
<source>Folder does not contain any image files</source>
- <translation type="unfinished">Das Verzeichnis enthält keine Bilder</translation>
+ <translation>Das Verzeichnis enthält keine Bilder</translation>
</message>
<message>
<source>Untitled Documents</source>
- <translation type="unfinished">Unbenanntes Dokument</translation>
+ <translation>Unbenanntes Dokument</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1177,7 +1269,7 @@
</message>
<message>
<source>widgets</source>
- <translation>Steuerelemente</translation>
+ <translation>Widgets</translation>
</message>
<message>
<source>All supported files (*.%1)</source>
@@ -1189,19 +1281,19 @@
</message>
<message>
<source>Inserting page %1 of %2</source>
- <translation type="unfinished">Hinzufügen der Seite %1 von %2</translation>
+ <translation>Einfügen der Seite %1 von %2</translation>
</message>
<message>
<source>Import successful.</source>
- <translation type="unfinished">Import erfolgreich.</translation>
+ <translation>Import erfolgreich.</translation>
</message>
<message>
<source>Import of file %1 successful.</source>
- <translation type="unfinished">Import des Dokuments %1 erfolgreich.</translation>
+ <translation>Import des Dokuments %1 erfolgreich.</translation>
</message>
<message>
<source>Importing file %1</source>
- <translation type="unfinished">Importieren von %1</translation>
+ <translation>Importieren von %1</translation>
</message>
</context>
<context>
@@ -1247,6 +1339,57 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Akzeptieren</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Ersetzen</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Der Name %1 wird bereits benutzt. Wenn Sie den Namen behalten möchten, wird das Dokument ersetzt. Wenn Sie einen neuen Namen wählen, wird ein neues Dokument erstellt.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Eigene Dokumente</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modelle</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Papierkorb</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Unbenannte Dokumente</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Seite %1/%2 wird kopiert</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 Seite kopiert</numerusform>
+ <numerusform>%1 Seiten kopiert</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1265,6 +1408,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Download fehlgeschlagen.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>Der Remote-Server verweigerte die Verbindung (akzeptiert keine Anfragen)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>Der Remote-Server beendete die Verbindung, bevor die Anwort vollständig empfangen und verarbeitet werden konnte</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>Der Name des Remote-Servers wurde nicht gefunden (ungültiger Host-Name)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>Zeitüberschreitung bei der Verbindung zum Remote-Server</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>Die Operation wurde abgebrochen() oder geschlossen(), bevor sie beendet werden konnte.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>Der SSL/TLS-Handshake ist fehlgeschlagen, die verschlüsselte Verbindung konnte nicht hergestellt werden. Das SSL-Fehlersignal ist vermutlich gesendet worden.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>Die Verbindung wurde wegen Entfernung vom Netzwerk unterbrochen. Das System hat jedoch Roaming an einen anderen Access-Point veranlasst. Die Anfrage wird erneut gesendet und verarbeitet, sobald die Verbindung wieder hergestellt ist. </translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>Die Verbindung zum Proxy-Server wurde verweigert (Der Proxy-Server akzeptiert keine Anfragen)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>Der Proxy-Server hat die Verbindung beendet, bevor die vollständige Antwort empfangen und verarbeitet werden konnte</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>Der Name des Proxy-Servers wurde nicht gefunden (ungültiger Proxy-Hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>Zeitüberschreitung bei der Verbindung zum Proxy oder verspätete Antwort des Proxy auf die Anfrage</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>Der Proxy benötigt Authentifizierung, um die Anfrage zu bearbeiten, akzeptierte aber ggf. keine Berechtigungsnachweise</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>Der Zugang zum Remote-Content wurde verweigert (vgl. HTTP-Fehler 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>Die gewünschte Operation mit dem Remote-Content ist nicht gestattet</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>Der Remote-Content wurde nicht auf diesem Server gefunden (vgl. HTTP-Fehler 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>Der Remote-Server benötigt Authentifizierung, um die Anfrage zu bearbeiten, akzeptierte aber ggf. keine Berechtigungsnachweise</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>Die Anfrage musste nochmals gesendet werden. Fehler: Die Daten für den Upload konnten nicht mehr gelesen werden.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Der Netzwerk-API kann die Anfrage nicht bearbeiten: Protokoll unbekannt</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>Die gewünschte Operation ist in diesem Protokoll nicht gültig</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>unbekannter Netzwerkfehler</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>unbekannter Proxy-Fehler</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>unbekannter Fehler mit dem Remote-Content</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>Zusammenbruch des Protokoll (z.B. durch Parsing-Fehler, ungültige oder unerwartete Anworten, etc.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1279,7 +1521,7 @@
<name>UBExportAdaptor</name>
<message>
<source>Warnings during export was appeared</source>
- <translation type="unfinished">Warnungen beim Exportieren aufgetreten</translation>
+ <translation>Warnungen beim Exportieren aufgetreten</translation>
</message>
</context>
<context>
@@ -1333,6 +1575,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Export fehlgeschlagen...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exportieren als UBX-File</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Dokument wird exportiert...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Export erfolgreich.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Export fehlgeschlagen.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Export ins Sankore UBX-Format</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1419,6 +1688,10 @@
<source>Object informations</source>
<translation>Objektinformationen</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Hinzufügen</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1463,76 +1736,100 @@
</message>
<message>
<source>Audios</source>
- <translation type="unfinished">Audiodateien</translation>
+ <translation>Audiodateien</translation>
</message>
<message>
<source>Movies</source>
- <translation type="unfinished">Filme</translation>
+ <translation>Filme</translation>
</message>
<message>
<source>Pictures</source>
- <translation type="unfinished">Bilder</translation>
+ <translation>Bilder</translation>
</message>
<message>
<source>Animations</source>
- <translation type="unfinished">Animationen</translation>
+ <translation>Animationen</translation>
</message>
<message>
<source>Interactivities</source>
- <translation type="unfinished">Interaktivitäten</translation>
+ <translation>Interaktivitäten</translation>
</message>
<message>
<source>Applications</source>
- <translation type="unfinished">Anwendungen</translation>
+ <translation>Anwendungen</translation>
</message>
<message>
<source>Shapes</source>
- <translation type="unfinished">Formen</translation>
+ <translation>Formen</translation>
</message>
<message>
<source>Favorites</source>
- <translation type="unfinished">Favoriten</translation>
+ <translation>Favoriten</translation>
</message>
<message>
<source>Web search</source>
- <translation type="unfinished">Websuche</translation>
+ <translation>Websuche</translation>
</message>
<message>
<source>Trash</source>
- <translation type="unfinished">Papierkorb</translation>
+ <translation>Papierkorb</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Lesezeichen</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Internet</translation>
</message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
<message>
<source>Accept</source>
- <translation type="unfinished">Akzeptieren</translation>
+ <translation>Akzeptieren</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Abbrechen</translation>
+ <translation>Abbrechen</translation>
</message>
<message>
<source>Enter a new folder name</source>
- <translation type="unfinished">Geben Sie den Namen des Verzeichnisses ein</translation>
+ <translation>Geben Sie einen neuen Verzeichnisnamen an</translation>
</message>
</context>
<context>
<name>UBFeaturesProgressInfo</name>
<message>
<source>Loading </source>
- <translation type="unfinished">Laden </translation>
+ <translation>Laden </translation>
</message>
</context>
<context>
<name>UBGraphicsGroupContainerItemDelegate</name>
<message>
<source>Locked</source>
- <translation type="unfinished">Gesperrt</translation>
+ <translation>Gesperrt</translation>
</message>
<message>
<source>Visible on Extended Screen</source>
- <translation type="unfinished">Auf erweitertem Bildschirm sichtbar</translation>
+ <translation>Auf erweitertem Bildschirm sichtbar</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation>eine Aktion hinzufügen</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Link zum Audiofile entfernen</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Link zur Seite entfernen</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Link zur Web-URL entfernen</translation>
</message>
</context>
<context>
@@ -1549,6 +1846,22 @@
<source>Go to Content Source</source>
<translation>Gehen Sie zum ursprünglichen Inhalt</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>eine Aktion hinzufügen</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Link zum Audiofile entfernen</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Link zur Seite entfernen</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Link zur Web-URL entfernen</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1569,17 +1882,10 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation type="unfinished">Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
- <translation type="unfinished">Lädt...</translation>
+ <translation>Lädt...</translation>
</message>
</context>
<context>
@@ -1636,6 +1942,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (Dokumentensammlung) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1701,7 +2014,7 @@
<name>UBMessagesDialog</name>
<message>
<source>Close</source>
- <translation type="unfinished">SchlieÃen</translation>
+ <translation>SchlieÃen</translation>
</message>
</context>
<context>
@@ -1850,6 +2163,142 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren?</translation>
<source>Marker is pressure sensitive</source>
<translation>Der Marker ist druckempfindlich</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Voreinstellung</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>arabisch</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>bulgarisch</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>katalanisch</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>tschechisch</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>dänisch</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>deutsch</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>griechisch</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>englisch</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>englisch (UK)</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>spanisch</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>französisch</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>französisch (Schweiz)</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>italienisch</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>hebräisch</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>japanisch</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>koreanisch</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>madegassisch</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>norwegisch</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>niederländisch</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>polnisch</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>rätoromanisch</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>rumänisch</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>russisch</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>slowakisch</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>schwedisch</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>türkisch</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>chinesisch</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>chinesisch (vereinfacht)</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>chinesisch (traditionell)</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1891,6 +2340,17 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren?</translation>
<source>My Movies</source>
<translation>Meine Filme</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>nächstes Mal sichtbar</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2114,14 +2574,14 @@ Möchten Sie diese Fehler auf diesem Computer ignorieren?</translation>
</message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Ganze Seite</translation>
</message>
<message>
- <source>Web</source>
- <translation>Internet</translation>
+ <source>Embed </source>
+ <translation>Einbetten</translation>
</message>
</context>
<context>
@@ -2214,11 +2674,11 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr
</message>
<message>
<source>Open-Sankore</source>
- <translation type="unfinished">Open-Sankore</translation>
+ <translation>Open-Sankore</translation>
</message>
<message>
<source>OpenSankore</source>
- <translation type="unfinished">Open-Sankore</translation>
+ <translation>Open-Sankore</translation>
</message>
</context>
<context>
@@ -2468,6 +2928,49 @@ Bitte starten Sie die Anwendung erneut, um auf die aktualisierten Dokumente zugr
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Inhalt zum EinschlieÃen auswählen:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Name der Anwendung</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Einschränkungsklausel und Haftungsausschluss</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Diese Funktion wurde zur Anwendung auf den gängigsten Webseiten entwickelt.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Bitte beachten Sie das Urheberrecht, wenn Sie Links erstellen, oder fremde Inhalte aus dem Internet einschlieÃen.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2545,7 +3048,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>Wiederherstellen der Anmeldeinformationen beim Neustart</translation>
</message>
</context>
<context>
@@ -2743,22 +3246,10 @@ p, li { white-space: pre-wrap; }
<translation>Lizenzen</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Netzwerk</translation>
</message>
@@ -2802,10 +3293,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Passwort:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">Planète Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Benutzer:</translation>
@@ -2815,544 +3302,63 @@ p, li { white-space: pre-wrap; }
<translation>Passwort:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translatorcomment>do not translate!</translatorcomment>
- <translation></translation>
- </message>
- <message>
<source>Credits</source>
<translatorcomment>do not translate!</translatorcomment>
<translation></translation>
</message>
<message utf8="true">
<source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <translation>Planète Sankoré ID für den File-Export</translation>
</message>
<message>
<source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <translation>Wiederherstellen der Anmeldeinformationen beim Neustart</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>Startup-Tipps</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Show start up tips</source>
+ <translation>Startup-Tipps anzeigen</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Sprache</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Wählen sie eine Sprache</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Die neue Sprache wird beim nächsten Neustart geladen</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation> Open Sankoré schlieÃen</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>Ãffne SSl</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_el.ts b/Sankore-3.1/resources/i18n/sankore_el.ts
index 30ceccb..23da126 100644
--- a/Sankore-3.1/resources/i18n/sankore_el.ts
+++ b/Sankore-3.1/resources/i18n/sankore_el.ts
@@ -189,6 +189,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>ΣελιδοδείκÏηÏ</translation>
</message>
<message>
@@ -708,14 +709,6 @@
<translation>ΡÏθμιÏη εγγÏαÏÎ®Ï Î²Î¯Î½Ïεο</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>ÎήÏη ανÏικειμÎνοÏ
flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>ÎήÏη ÏεÏιεÏομÎνοÏ
ενÏÏ Î±Î½ÏικειμÎνοÏ
flash</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>ÎήÏη ÎιαδικÏÏοÏ
</translation>
</message>
@@ -736,14 +729,6 @@
<translation>ÎήÏη ÏÏιγμιÏÏÏ
ÏοÏ
ενÏÏ ÏαÏαθÏÏοÏ
</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>ÎνÏÏμάÏÏÏη διαδικÏÏ
Î±ÎºÎ¿Ï ÏεÏιεÏομÎνοÏ
</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>ÎήÏη ÏÏιγμιÏÏÏ
ÏοÏ
ενÏÏμαÏÏμÎνοÏ
διαδικÏÏ
Î±ÎºÎ¿Ï ÏεÏιεÏομÎνοÏ
</translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation>ÎμÏάνιÏη κÏÏÎ¹Î±Ï Î¿Î¸ÏÎ½Î·Ï ÏÏην ÎμÏάνιÏη ÎθÏνηÏ</translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>Îμάδα</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ÎήÏη ÏÏη</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">βιβλιιοθήκη</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>ÎήÏη ÏÏη βιβλιοθήκη</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ÎήÏη ÏÏην</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ÏÏÎÏοÏ
Ïα Ïελιδα</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>ÎήÏη ÏÏην ÏÏÎÏοÏ
Ïα Ïελίδα</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Î ÏοÏθήκη ÏÏ
νδÎÏμοÏ
ÏÏη </p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">βιβλιοθήκη</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Î ÏοÏθήκη ÏÏ
νδÎÏμοÏ
ÏÏη βιβλιοθήκη</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Î ÏοÏθήκη ÏÏ
νδÎÏμοÏ
ÏÏην</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ÏÏÎÏοÏ
Ïα Ïελίδα</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Î ÏοÏθήκη ÏÏ
νδÎÏμοÏ
ÏÏην ÏÏÎÏοÏ
Ïα Ïελίδα</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">ΣελιδοδείκÏηÏ</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -870,7 +892,7 @@
</message>
<message>
<source>Content is not supported in destination format.</source>
- <translation>ΠμοÏÏή ÏοÏ
ÏεÏιεÏομÎνοÏ
δεν Ï
ÏοÏÏηÏιζεÏαι ÏÏον ÏÏοοÏιÏμÏ</translation>
+ <translation>Το ÏεÏιεÏÏμενο δεν Ï
ÏοÏÏηÏιζεÏαι με Ïη μοÏÏή ÏοÏ
ÏÏοοÏιÏμοÏ
.</translation>
</message>
<message>
<source>Remove Page</source>
@@ -988,12 +1010,110 @@
<translation>ΣÏήμα:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>ÎÎγεθοÏ:</translation>
+ <source>Alpha:</source>
+ <translation>ÎλÏα:</translation>
</message>
<message>
- <source>Close</source>
- <translation>ÎλείÏιμο:</translation>
+ <source>Geometry:</source>
+ <translation>ÎεÏμεÏÏία:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>ΠλάÏοÏ:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>ÎÏοÏ:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>ÎιαÏήÏηÏη ÏοÏοÏÏÏν</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>ÎειÏοÏ
Ïγία:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Î ÏοεÏιÏκÏÏηÏη:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>ÎλειÏÏή μνήμη cache</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><drop content></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Îι εικÏÎ½ÎµÏ Î´ÎµÎ½ Îγιναν αÏοδεκÏÎÏ</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>ÎδÏ
ναμία ÏÏÎ¿Î²Î¿Î»Î·Ï Î´ÎµÎ´Î¿Î¼ÎνÏν</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Το αÏÏείο ÏοÏ
αÏοθÎÏαÏε δεν αναγνÏÏίÏÏηκε ÏÏ Î±ÏÏείο ήÏοÏ
</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>ÎναÏαÏαγÏγή ενÏÏ Î±ÏÏείοÏ
ήÏοÏ
</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Î ÏοÏθήκη ÏÏ
νδÎÏμοÏ
ÏÏη Ïελίδα</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Î ÏοÏθήκη ÏÏ
νδÎÏμοÏ
Ïε μια ιÏÏοÏελίδα</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>ΣÏÏεÏε και αÏοθÎÏÏε Ïο αÏÏείο ήÏοÏ
αÏÏ Ïη βιβλιοθήκη Ïε αÏ
ÏÏ Ïο ÏλαίÏιο</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>ÎνÏάξει</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>ÎÏÏμενη Ïελίδα</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Î ÏοηγοÏμενη Ïελίδα</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Σελίδα ÏίÏλοÏ
</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>ΤελεÏ
Ïαία Ïελίδα</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>ÎÏιθμÏÏ ÏελίδαÏ</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>ÎιÏάγÏγή κειμÎνοÏ
url εδÏ</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>ÎÏαίÏεÏη ÏελίδαÏ</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>ÎÏαίÏεÏη εγγÏάÏοÏ
</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>ÎίÏÏε βÎÎ²Î±Î¹Î¿Ï ÏÏι θÎλεÏε να αÏαιÏÎÏεÏε Ïο ÎγγÏαÏο '%1';</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>ÎδειαÏμα ÎάδοÏ
ÎνακÏκλÏÏηÏ</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>ÎίÏÏε βÎÎ²Î±Î¹Î¿Ï ÏÏι θÎλεÏε να αδειάÏεÏε Ïον Îάδο ÎνακÏκλÏÏηÏ;</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>ÎδειαÏμα ÎάδοÏ
ÎνακÏκλÏÏηÏ</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>ÎλοκληÏÏθηκε Ïο άδειαÏμα ÏοÏ
ÎάδοÏ
ÎνακÏκλÏÏηÏ</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>ÎÏαίÏεÏη ÏακÎλοÏ
</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>ÎίÏÏε βÎÎ²Î±Î¹Î¿Ï ÏÏι θÎλεÏε να αÏαιÏÎÏεÏε Ïον Ïάκελο '%1' και Ïλα Ïα ÏεÏιεÏÏμενά ÏοÏ
;</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Îεν εÏιλÎÏθηκε κανÎνα ÎγγÏαÏο!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Îνοιγμα Ï
ÏοÏÏηÏιζÏμενοÏ
αÏÏείοÏ
</translation>
</message>
@@ -1160,6 +1244,14 @@
<source>Untitled Documents</source>
<translation>ÎγγÏαÏα ÏÏÏÎ¯Ï ÏίÏλο</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1193,11 +1285,11 @@
</message>
<message>
<source>Import successful.</source>
- <translation>ÎÏιÏÏ
ÏημÎνη ειÏαγÏγή</translation>
+ <translation>ÎÏιÏÏ
ÏημÎνη ειÏαγÏγή.</translation>
</message>
<message>
<source>Import of file %1 successful.</source>
- <translation>ÎÏιÏÏ
ÏημÎνη ειÏαγÏγή ÏοÏ
αÏÏείοÏ
%1 </translation>
+ <translation>ÎÏιÏÏ
ÏημÎνη ειÏαγÏγή ÏοÏ
αÏÏείοÏ
%1.</translation>
</message>
<message>
<source>Importing file %1</source>
@@ -1219,7 +1311,7 @@
<name>UBDocumentPublisher</name>
<message>
<source>Export failed.</source>
- <translation>ΠεξαγÏγή αÏÎÏÏ
Ïε</translation>
+ <translation>ΠεξαγÏγή αÏÎÏÏ
Ïε.</translation>
</message>
<message>
<source>Export canceled ...</source>
@@ -1247,6 +1339,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>ÎÏοδοÏή</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>ÎνÏικαÏάÏÏαÏη</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>ÎκÏ
Ïο</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Το Ïνομα %1 ÏÏηÏιμοÏοιείÏαι ήδη.
+Îν κÏαÏήÏεÏε αÏ
ÏÏ Ïο Ïνομα θα ανÏικαÏαÏÏαθεί Ïο αÏÏείο.
+Îν δÏÏεÏε νÎο Ïνομα θα δημιοÏ
Ïγηθεί νÎο αÏÏείο.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Τα ÎγγÏαÏά μοÏ
</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>ÎονÏÎλα</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>ÎÎ¬Î´Î¿Ï Î±Î½Î±ÎºÏκλÏÏηÏ</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>ÎγγÏαÏα ÏÏÏÎ¯Ï ÏίÏλο</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">ÎνÏιγÏαÏή ÏÎµÎ»Î¯Î´Î±Ï %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 Ïελίδα ανÏιγÏάÏηκε</numerusform>
+ <numerusform>%1 ÏÎµÎ»Î¯Î´ÎµÏ Î±Î½ÏιγÏάÏηκαν</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1265,6 +1410,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>ΠλήÏη αÏÎÏÏ
Ïε.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>ο αÏομακÏÏ
ÏμÎÎ½Î¿Ï Î´Î¹Î±ÎºÎ¿Î¼Î¹ÏÏÎ®Ï Î±Ïνήθηκε Ïη ÏÏνδεÏη (δεν αÏοδÎÏÏηκε Ïα αιÏήμαÏα)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ο αÏομακÏÏ
ÏμÎÎ½Î¿Ï Î´Î¹Î±ÎºÎ¿Î¼Î¹ÏÏÎ®Ï ÎκλειÏε Ïη ÏÏνδεÏη ÏÏÏÏÏα, ÏÏιν Ïην ολοκληÏÏÏική λήÏη και εÏεξεÏγαÏία</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>Ïο αÏομακÏÏ
ÏμÎνο Ïνομα ÏÎ¹Î»Î¿Î¾ÎµÎ½Î¯Î±Ï Î´ÎµÎ½ βÏÎθηκε (μη ÎγκÏ
Ïο Ïνομα ÏιλοξενίαÏ)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>Îληξε ο ÏÏÏÎ½Î¿Ï ÏÏνδεÏÎ·Ï ÏÏον αÏομακÏÏ
ÏμÎνο διακομιÏÏή</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>η λειÏοÏ
Ïγία ακÏ
ÏÏθηκε λÏÎ³Ï ÎºÎ»Î®ÏεÏν για μαÏαίÏÏη() ή κλείÏιμο() ÏÏιν Ïην ολοκλήÏÏÏή ÏηÏ.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>η SSL/TLS ÏειÏαÏία αÏÎÏÏ
Ïε και Ïο κÏÏ
ÏÏογÏαÏημÎνο κανάλι δεν ÏαγιÏθηκε. Îα γίνει εκÏομÏή ενÏÏ ÏήμαÏÎ¿Ï ÏÏάλμαÏÎ¿Ï Î³Î¹Î± Ïο sslErrors().</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>η ÏÏνδεÏη διακÏÏηκε λÏÎ³Ï Î±ÏοÏÏνδεÏÎ·Ï Î±ÏÏ Ïο δίκÏÏ
ο, ÏÏÏÏÏο Ïο ÏÏÏÏημα αναζηÏά άλλο Ïημείο ÏÏÏÏβαÏηÏ. Το αίÏημα θα ξαναÏÏαλεί και θα διεκÏεÏαιÏθεί μÏÎ»Î¹Ï Î±ÏοκαÏαÏÏαθεί η ÏÏνδεÏη.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>δεν ήÏαν δÏ
ναÏή η ÏÏνδεÏη ÏÏο διακομιÏÏή μεÏολάβηÏÎ·Ï (ο διακομιÏÏÎ®Ï Î¼ÎµÏολάβηÏÎ·Ï Î´ÎµÎ½ αÏοδÎÏÏηκε Ïα αιÏήμαÏα)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ο διακομιÏÏÎ®Ï Î¼ÎµÏολάβηÏÎ·Ï ÎκλειÏε Ïη ÏÏνδεÏη ÏÏÏÏÏα, ÏÏιν Ïην ολοκληÏÏÏική λήÏη και διεκÏεÏαίÏÏη ÏÎ·Ï Î±ÏÏκÏιÏηÏ</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>Ïο Ïνομα ÏοÏ
διακομιÏÏή μεÏολαβηÏÎ·Ï Î´ÎµÎ½ βÏÎθηκε (μη ÎγκÏ
Ïο Ïνομα ÏιλοξενίαÏ)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>η ÏÏνδεÏη ÏÏο διακομιÏÏή μεÏολάβηÏÎ·Ï Îληξε, ή αÏ
ÏÏÏ Î´ÎµÎ½ αÏοκÏίνεÏαι ÎγκαιÏα μεÏά Ïην αÏοÏÏολη ÏοÏ
αιÏήμαÏοÏ</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>ο διακομιÏÏÎ®Ï Î¼ÎµÏολάβηÏÎ·Ï Î±ÏαιÏεί ÏιÏÏοÏοίηÏη με ÏκοÏÏ Î½Î± αÏοδεÏÏεί Îνα αίÏημα, αλλά δεν αÏοδÎÏÏηκε κανÎνα αÏÏ Ïα ÏιÏÏοÏοιηÏικά ÏοÏ
δÏθηκαν (εάν Ï
ÏήÏξαν)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>δεν εÏιÏÏάÏηκε η ÏÏÏÏβαÏη ÏÏο αÏομακÏÏ
ÏμÎνο ÏεÏιεÏÏμενο (ÏαÏÏμοιο με Ïο HTTP ÏÏάλμα 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>η λειÏοÏ
Ïγία ÏοÏ
αÏαιÏήθηκε για Ïο αÏομακÏÏ
ÏμÎνο ÏεÏιεÏÏμενο δεν εÏιÏÏάÏηκε</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>Ïο αÏομακÏÏ
ÏμÎνο ÏεÏιεÏÏμενο δεν βÏÎθηκε ÏÏον διακομιÏÏή (ÏαÏÏμοιο με Ïο HTTP ÏÏάλμα 401)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>ο αÏομακÏÏ
ÏμÎÎ½Î¿Ï Î´Î¹Î±ÎºÎ¿Î¼Î¹ÏÏÎ®Ï Î±ÏαιÏεί ÏιÏÏοÏοίηÏη για να εÏιÏÏÎÏει ÏÏÏÏβαÏη ÏÏο ÏεÏιεÏÏμενο, αλλά δεν αÏοδÎÏÏηκε κανÎνα αÏÏ Ïα ÏιÏÏοÏοιηÏικά ÏοÏ
δÏθηκαν (εάν Ï
ÏήÏξαν)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>Ïο αÏαιÏοÏμενο αίÏημα ÏÏάλθηκε ξανά, αλλά αÏ
ÏÏ Î±ÏÎÏÏ
Ïε, για ÏαÏάδειγμα, εÏειδή δεν ήÏαν δÏ
ναÏή για δεÏÏεÏη ÏοÏά η ανάγνÏÏη ÏÏν δεδομÎνÏν ÏοÏ
ÏοÏÏÏθηκαν.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Ïο Network Access API δεν είναι δÏ
ναÏÏν να αÏοδεÏÏεί Ïο αίÏημα εÏειδή Ïο ÏÏÏÏÏκολλο δεν είναι γνÏÏÏο</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>η αιÏοÏμενη λειÏοÏ
Ïγία δεν είναι ÎγκÏ
Ïη γι' αÏ
ÏÏ Ïο ÏÏÏÏÏκολλο</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>ενÏοÏίÏÏηκε Îνα άγνÏÏÏο ÏÏάλμα ÏÏεÏÎ¹ÎºÏ Î¼Îµ Ïο δίκÏÏ
ο</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>ενÏοÏίÏÏηκε Îνα άγνÏÏÏο ÏÏάλμα ÏÏεÏÎ¹ÎºÏ Î¼Îµ Ïον διακομιÏÏή μεÏολάβηÏηÏ</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>ενÏοÏίÏÏηκε Îνα άγνÏÏÏο ÏÏάλμα ÏÏεÏÎ¹ÎºÏ Î¼Îµ Ïο αÏομακÏÏ
ÏμÎνο ÏεÏιεÏÏμενο</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>ενÏοÏίÏÏηκε μια αÏοÏÏ
Ïία ÏÏο ÏÏÏÏÏκολλο (ÏÏάλμα ÏÏνÏαξηÏ, μη ÎγκÏ
ÏÎµÏ Î® μη αναμενÏÎ¼ÎµÎ½ÎµÏ Î±ÏοκÏίÏειÏ, κλÏ.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1298,11 +1542,11 @@
</message>
<message>
<source>Export successful.</source>
- <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή</translation>
+ <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή.</translation>
</message>
<message>
<source>Export failed.</source>
- <translation>ÎÏοÏÏ
ÏημÎνη εξαγÏγή</translation>
+ <translation>ÎÏοÏÏ
ÏημÎνη εξαγÏγή.</translation>
</message>
</context>
<context>
@@ -1321,7 +1565,7 @@
</message>
<message>
<source>Export successful.</source>
- <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή</translation>
+ <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή.</translation>
</message>
<message>
<source>Exporting %1 %2 of %3</source>
@@ -1333,6 +1577,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>ÎÏοÏÏ
Ïία εξαγÏÎ³Î®Ï ÏοÏ
...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>ÎξαγÏγή ÏÏ Î±ÏÏείο UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>ÎξαγÏγή εγγÏάÏοÏ
...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>ÎÏοÏÏ
ÏημÎνη εξαγÏγή.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>ÎξαγÏγή Ïε μοÏÏή UBX Sankore</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1344,7 +1615,7 @@
</message>
<message>
<source>Export successful.</source>
- <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή</translation>
+ <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή.</translation>
</message>
<message>
<source>Export to PDF</source>
@@ -1363,7 +1634,7 @@
</message>
<message>
<source>Export successful.</source>
- <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή</translation>
+ <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή.</translation>
</message>
<message>
<source>Exporting page %1 of %2</source>
@@ -1390,11 +1661,11 @@
</message>
<message>
<source>Export successful.</source>
- <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή</translation>
+ <translation>ÎÏιÏÏ
ÏημÎνη εξαγÏγή.</translation>
</message>
<message>
<source>Export failed.</source>
- <translation>ΠεξαγÏγή αÏÎÏÏ
Ïε</translation>
+ <translation>ΠεξαγÏγή αÏÎÏÏ
Ïε.</translation>
</message>
<message>
<source>Export to Web Browser</source>
@@ -1419,6 +1690,10 @@
<source>Object informations</source>
<translation>ΠληÏοÏοÏÎ¯ÎµÏ Î±Î½ÏικειμÎνοÏ
</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Î ÏοÏθήκη</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1501,6 +1776,14 @@
<source>Trash</source>
<translation>ÎÎ¬Î´Î¿Ï Î±Î½Î±ÎºÏκλÏÏηÏ</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>ΣελιδοδείκÏεÏ</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1534,6 +1817,22 @@
<source>Visible on Extended Screen</source>
<translation>ÎÏαÏÏ Ïε ÎκÏαÏαμÎνη ÎθÏνη</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Î ÏοÏθήκη Î¼Î¹Î±Ï ÎµÎ½ÎÏγειαÏ</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>ÎÏαίÏεÏη ÏÏ
νδÎÏμοÏ
Ïε αÏÏείο ήÏοÏ
</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>ÎÏαίÏεÏη ÏÏ
νδÎÏμοÏ
Ïε Ïελίδα</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>ÎÏαίÏεÏη ÏÏ
νδÎÏμοÏ
Ïε url ιÏÏοÏελίδαÏ</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1549,6 +1848,22 @@
<source>Go to Content Source</source>
<translation>ÎεÏάβαÏη ÏÏην Πηγή ΠεÏιεÏομÎνοÏ
</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Î ÏοÏθήκη ενÎÏγειαÏ</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>ÎÏαίÏεÏη ÏÏ
νδÎÏμοÏ
Ïε αÏÏείο ήÏοÏ
</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>ÎÏαίÏεÏη ÏÏ
νδÎÏμοÏ
Ïε Ïελίδα</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>ÎÏαίÏεÏη ÏÏ
νδÎÏμοÏ
Ïε url ιÏÏοÏελίδαÏ</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1569,13 +1884,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>ÎιαδίκÏÏ
ο</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1605,15 +1913,15 @@
</message>
<message>
<source>Import of file %1 failed.</source>
- <translation>ΠειÏαγÏγή ÏοÏ
αÏÏείοÏ
%1 αÏÎÏÏ
Ïε</translation>
+ <translation>ΠειÏαγÏγή ÏοÏ
αÏÏείοÏ
%1 αÏÎÏÏ
Ïε.</translation>
</message>
<message>
<source>Import successful.</source>
- <translation>ÎÏιÏÏ
ÏημÎνη ειÏαγÏγή</translation>
+ <translation>ÎÏιÏÏ
ÏημÎνη ειÏαγÏγή.</translation>
</message>
<message>
<source>Import failed.</source>
- <translation>ÎÏοÏÏ
ÏημÎνη ειÏαγÏγή</translation>
+ <translation>ÎÏοÏÏ
ÏημÎνη ειÏαγÏγή.</translation>
</message>
</context>
<context>
@@ -1624,11 +1932,11 @@
</message>
<message>
<source>Import successful.</source>
- <translation>ÎÏιÏÏ
ÏημÎνη ειÏαγÏγή</translation>
+ <translation>ÎÏιÏÏ
ÏημÎνη ειÏαγÏγή.</translation>
</message>
<message>
<source>Import of file %1 failed.</source>
- <translation>ΠειÏαγÏγή ÏοÏ
αÏÏείοÏ
%1 αÏÎÏÏ
Ïε</translation>
+ <translation>ΠειÏαγÏγή ÏοÏ
αÏÏείοÏ
%1 αÏÎÏÏ
Ïε.</translation>
</message>
<message>
<source>Open-Sankore (*.ubz)</source>
@@ -1636,6 +1944,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (ομαδα εγγÏάÏÏν) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1650,7 +1965,7 @@
</message>
<message>
<source>PDF import failed.</source>
- <translation>ΠειÏαγÏγή ÏοÏ
PDF αÏÎÏÏ
Ïε</translation>
+ <translation>ΠειÏαγÏγή ÏοÏ
PDF αÏÎÏÏ
Ïε.</translation>
</message>
<message>
<source>Importing page %1 of %2</source>
@@ -1850,6 +2165,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>ΠμαÏκαδÏÏÎ¿Ï ÎµÎ¯Î½Î±Î¹ εÏ
αίÏθηÏÎ¿Ï ÏÏην ÏίεÏη</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Î ÏοκαθοÏιÏμÎνη</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>ÎÏαβικά</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>ÎοÏ
λγαÏικά</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>ÎαÏαλανικά</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>ΤÏÎÏικα</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Îανικά</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>ÎεÏμανικά</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Îλληνικά</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Îγγλικά</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Îγγλικά (UK)</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>ÎÏÏανικά</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Îαλλικά</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Îαλλικά ÏÎ·Ï ÎλβεÏίαÏ</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>ÎÏαλικά</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>ÎβÏαÏκά</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>ÎαÏÏνικά</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>ÎοÏεαÏικά</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>ÎαλαγκάÏι</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>ÎοÏβηγικά</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Îλλανδικά</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>ΠολÏνικά</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>ΡομάνÏ</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>ΡοÏ
μάνικα</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>ΡÏÏικά</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Σλοβάκικα</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>ΣοÏ
ηδικά</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>ΤοÏ
Ïκικά</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ÎινÎζικα</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ÎινÎζικα αÏλοÏοιημÎνα</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>ÎινÎζικα ÏαÏαδοÏιακά</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1891,6 +2342,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>Îι ÏÎ±Î¹Î½Î¯ÎµÏ Î¼Î¿Ï
</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>ÎÏαÏÏ Ïην εÏÏμενη ÏοÏά</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2007,7 +2469,7 @@ Do you want to ignore these errors for this host?</source>
</message>
<message>
<source>Licence</source>
- <translation>ÎδειοδÏÏηÏη:</translation>
+ <translation>ÎδειοδÏÏηÏη</translation>
</message>
<message>
<source>Attribution CC BY</source>
@@ -2106,14 +2568,14 @@ Do you want to ignore these errors for this host?</source>
</message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>ÎλÏκληÏη Ïελίδα</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>ÎνÏÏμαÏÏμÎνο</translation>
</message>
</context>
<context>
@@ -2124,7 +2586,7 @@ Do you want to ignore these errors for this host?</source>
</message>
<message>
<source> files require an update.</source>
- <translation>αÏÏεία ÏοÏ
ÏÏειάζονÏαι ενημÎÏÏÏη</translation>
+ <translation>αÏÏεία ÏοÏ
ÏÏειάζονÏαι ενημÎÏÏÏη.</translation>
</message>
<message>
<source>Backup path: </source>
@@ -2460,6 +2922,49 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>ÎÏιλογή ÏεÏιεÏομÎνοÏ
για ÏÏήÏη:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Îνομα εÏαÏμογήÏ</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>ΠεÏιοÏιÏμοί και αÏοÏοίηÏη εÏ
θÏ
νÏν.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>ÎÏ
Ïή η λειÏοÏ
Ïγια αναÏÏÏÏθηκε για να δοÏ
λεÏει ÏÏÎ¹Ï ÏεÏιÏÏÏÏεÏÎµÏ Î¹ÏÏοÏελίδεÏ.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>ΠαÏÎ±ÎºÎ±Î»Ï Î½Î± ÏÎβεÏÏε Ïα ÏνεÏ
μαÏικά δικαιÏμαÏα ÏÏαν ÏÏηÏιμοÏοιείÏε ÏεÏιεÏÏμενο αÏÏ Ïο διαδίκÏÏ
ο.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2537,7 +3042,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>ÎÏαναÏοÏά ÏιÏÏοÏοιηÏικÏν μεÏά Ïην εÏανεκκίνηÏη</translation>
</message>
</context>
<context>
@@ -2630,7 +3135,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Warning: This documents contains video, which will not be displayed properly on the Web</source>
- <translation>Î ÏοÏοÏή: ÎÏ
ÏÏ Ïο ÎγγÏαÏο ÏεÏιÎÏει βίνÏεο, Ïο οÏοίο δεν εμÏανίζεÏαι ÏÏÏÏά ÏÏο διαδικÏÏ
ο.</translation>
+ <translation>Î ÏοÏοÏή: ÎÏ
ÏÏ Ïο ÎγγÏαÏο ÏεÏιÎÏει βίνÏεο, Ïο οÏοίο δεν εμÏανίζεÏαι ÏÏÏÏά ÏÏο διαδίκÏÏ
ο</translation>
</message>
</context>
<context>
@@ -2712,7 +3217,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Home Page:</source>
- <translation>ÎÏÏική Ïελίδα</translation>
+ <translation>ÎÏÏική Ïελίδα:</translation>
</message>
<message>
<source>Toolbar</source>
@@ -2735,22 +3240,10 @@ p, li { white-space: pre-wrap; }
<translation>ÎδειεÏ</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>ÎίκÏÏ
ο</translation>
</message>
@@ -2794,10 +3287,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>ÎÏδικÏÏ ÏÏÏÏβαÏηÏ:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">ÎναγνÏÏιÏÏÎ¹ÎºÏ Î³Î¹Î± Ïο Planète Sankoré</translation>
- </message>
<message>
<source>User:</source>
<translation>ΧÏήÏÏηÏ:</translation>
@@ -2807,841 +3296,62 @@ p, li { white-space: pre-wrap; }
<translation>ÎÏδικÏÏ ÏÏÏÏβαÏηÏ:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation>ÎÎÎÎÎÎ ÎÎÎÎÎ ÎÎÎÎΣÎÎΣ ΧΡÎΣÎΣ GNU
-
- ÎκδοÏη 2, ÎοÏÎ½Î¹Î¿Ï 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- ÎÏιÏÏÎÏεÏαι Ïε ÏλοÏ
Ï Î· ανÏιγÏαÏή και διανομή αÏ
ÏοÏÏιÏν ανÏιγÏάÏÏν
- αÏ
ÏÎ¿Ï ÏοÏ
εγγÏάÏοÏ
Î¬Î´ÎµÎ¹Î±Ï ÏÏήÏηÏ, ÏÏÏÎ¯Ï ÏÏÏÏÏο να εÏιÏÏÎÏεÏαι η αλλοίÏÏή ÏοÏ
.
-
- ÎιÏαγÏγή
-
- Îι Î¬Î´ÎµÎ¹ÎµÏ ÏÏήÏÎ·Ï ÏÏν ÏεÏιÏÏÏÏεÏÏν ÏÏογÏαμμάÏÏν ÏÏ
νÏάÏÏονÏαι για να ÏεÏιοÏίÏοÏ
ν Ïην ελεÏ
θεÏία ÏÎ±Ï Î½Î± Ïα μοιÏάζεÏÏε με άλλοÏ
Ï ÎºÎ±Î¹ να Ïα εÏεξεÏγάζεÏÏε. Îν ανÏιθÎÏει, η Îενική Îδεια ÎημÏÏÎ¹Î±Ï Î§ÏήÏÎ·Ï GNU ÎÏει ÏκοÏÏ Î½Î± εγγÏ
ηθεί Ïην ελεÏ
θεÏία ÏÎ±Ï Î½Î± ÏÏηÏιμοÏοιείÏε αÏÏ ÎºÎ¿Î¹Î½Î¿Ï Î¼Îµ άλλοÏ
Ï ÎºÎ±Î¹ να ÏÏοÏοÏοιείÏε ÏÏογÏάμμαÏα ÏοÏ
διαÏίθενÏαι ελεÏθεÏα -- δηλαδή να εγγÏ
ηθεί ÏÏι Ïο ÏÏÏγÏαμμα είναι ελεÏθεÏο για ÏλοÏ
Ï ÏοÏ
Ï ÏÏήÏÏεÏ. ÎÏ
Ïή η Îενική Îδεια ÎημÏÏÎ¹Î±Ï Î§ÏήÏÎ·Ï Î¹ÏÏÏει για Ïα ÏεÏιÏÏÏÏεÏα ÏÏογÏάμμαÏα ÏοÏ
ÎδÏÏμαÏÎ¿Ï ÎλεÏθεÏοÏ
ÎογιÏÎ¼Î¹ÎºÎ¿Ï (Free Software Foundation), καθÏÏ ÎºÎ±Î¹ για κάθε άλλο ÏÏÏγÏαμμα οι δημιοÏ
Ïγοί ÏοÏ
οÏοίοÏ
ÏÏ
μμοÏÏÏνονÏαι με Ïην άδεια αÏ
Ïή. (ÎÏιÏμÎνα άλλα ÏÏογÏάμμαÏα ÏοÏ
ÎδÏÏμαÏÎ¿Ï ÎλεÏθεÏοÏ
ÎογιÏÎ¼Î¹ÎºÎ¿Ï ÎºÎ±Î»ÏÏÏονÏαι αÏÏ Ïη Îενική Îδεια ÎημÏÏÎ¹Î±Ï Î§ÏήÏÎ·Ï ÎÎ¹Î²Î»Î¹Î¿Î¸Î®ÎºÎ·Ï GNU.) Την άδεια αÏ
Ïή μÏοÏείÏε να Ïην εÏαÏμÏÏεÏε και ÏÏα δικά ÏÎ±Ï ÏÏογÏάμμαÏα.
-
- ÎιλÏνÏÎ±Ï Î³Î¹Î± ελεÏθεÏο λογιÏμικÏ, αναÏεÏÏμαÏÏε ÏÏην ελεÏ
θεÏία ÏÏήÏÎ·Ï ÏοÏ
, ÏÏι
-ÏÏο κÏÏÏÎ¿Ï ÏοÏ
. Îι ÎενικÎÏ ÎÎ´ÎµÎ¹ÎµÏ ÎημÏÏÎ¹Î±Ï Î§ÏήÏÎ·Ï ÏÎ¹Ï Î¿ÏÎ¿Î¯ÎµÏ ÏÏ
νÏάÏÏοÏ
με ÎÏοÏ
ν ÏκοÏÏ Î½Î± καÏοÏÏ
ÏÏÏοÏ
ν Ïην ελεÏ
θεÏία ÏÎ±Ï Î½Î± διανÎμεÏε ανÏίγÏαÏα ελεÏθεÏοÏ
λογιÏÎ¼Î¹ÎºÎ¿Ï (και να ÏÏεÏνεÏε, εάν Ïο εÏιθÏ
μείÏε, Ïην ÏαÏοÏή αÏ
ÏÎ®Ï ÏÎ·Ï Ï
ÏηÏεÏίαÏ), να ÏÎ±Ï ÎµÎ¾Î±ÏÏαλίÏοÏ
ν Ïο δικαίÏμα να λαμβάνεÏε Ïον Ïηγαίο κÏδικα, εάν Ïον ÏÏειάζεÏÏε, καθÏÏ ÎºÎ±Î¹ να ÏÏοÏοÏοιείÏε Ïο ÏÏÏγÏαμμα ή να ÏÏηÏιμοÏοιείÏε ÏμήμαÏά ÏοÏ
Ïε καινοÏÏγια ελεÏθεÏα ÏÏογÏάμμαÏα -- και να διαÏÏαλίÏοÏ
ν ÏÏι είÏÏε ενήμεÏοι για Ïα ÏαÏαÏÎ¬Î½Ï Î´Î¹ÎºÎ±Î¹ÏμαÏά ÏαÏ.
-
- Îια Ïην ÏÏοÏÏαÏία ÏÏν δικαιÏμάÏÏν ÏαÏ, εÏιβάλλεÏαι να ÏÏοβοÏμε Ïε ÏεÏιοÏιÏμοÏÏ
-οι οÏοίοι θα εμÏοδίζοÏ
ν Ïε κάÏοιον να αμÏιÏβηÏήÏει Ïα δικαιÏμαÏά ÏÎ±Ï Î® να ÏÎ±Ï Î¶Î·ÏήÏει να ÏαÏαιÏηθείÏε αÏÏ Î±Ï
Ïά. ÎÏ
Ïοί οι ÏεÏιοÏιÏμοί εÏμηνεÏονÏαι ÏÏ ÏÏ
γκεκÏιμÎÎ½ÎµÏ ÎµÏ
θÏÎ½ÎµÏ Î³Î¹Î± εÏÎ¬Ï ÎµÎ¬Î½ διανÎμεÏε ανÏίγÏαÏα κάÏοιοÏ
ελεÏθεÏοÏ
λογιÏÎ¼Î¹ÎºÎ¿Ï Î® εάν Ïο ÏÏοÏοÏοιείÏε.
-
- Îια ÏαÏάδειγμα, εάν διανÎμεÏε ανÏίγÏαÏα ενÏÏ ÏÎÏοιοÏ
ÏÏογÏάμμαÏοÏ, είÏε δÏÏεάν
-είÏε με ÏÏÎÏÏη, ÏÏÎÏει να εκÏÏÏήÏεÏε ÏÏοÏ
Ï ÏαÏαλήÏÏÎµÏ Ïλα Ïα δικαιÏμαÏα ÏοÏ
ÎÏεÏε και εÏείÏ. Î ÏÎÏει να εγγÏ
ηθείÏε ÏÏι και εκείνοι εÏίÏÎ·Ï Î»Î±Î¼Î²Î¬Î½Î¿Ï
ν, ή μÏοÏοÏν να λάβοÏ
ν, Ïον Ïηγαίο κÏδικα. Î ÏÎÏει εÏίÏÎ·Ï Î½Î± ÏοÏ
Ï ÎµÏιδείξεÏε ÏοÏ
Ï ÏÏοÏ
Ï Î±Ï
ÏÎ®Ï ÏÎ·Ï Î¬Î´ÎµÎ¹Î±Ï ÏÏήÏηÏ, ÏÏÏε να είναι ενήμεÏοι για Ïα δικαιÏμαÏά ÏοÏ
Ï.
-
- Î ÏοÏÏαÏεÏοÏ
με Ïα δικαιÏμαÏά ÏÎ±Ï Î¼Îµ δÏο ÏÏÏÏοÏ
Ï: (1) ÏÏοÏÏαÏεÏονÏÎ±Ï Ïο λογιÏÎ¼Î¹ÎºÏ ÎºÎ±Î¹ (2) ÏÏοÏÏÎÏονÏÎ¬Ï ÏÎ±Ï Î±Ï
Ïήν Ïην άδεια, με Ïην οÏοία αÏοκÏάÏε νÏμιμο δικαίÏμα ανÏιγÏαÏήÏ, Î´Î¹Î±Î½Î¿Î¼Î®Ï Î®/και ÏÏοÏοÏοίηÏÎ·Ï ÏοÏ
λογιÏμικοÏ.
-
- ÎÏιÏλÎον, για Ïην ÏÏοÏÏαÏία ÏÏν δημιοÏ
ÏγÏν και Ïη δική μαÏ, θÎλοÏ
με να καÏαÏÏήÏοÏ
με βÎβαιο ÏÏι Ïλοι καÏανοοÏν Ïην αÏοÏ
Ïία εγγÏηÏÎ·Ï Î³Î¹Î± αÏ
ÏÏ Ïο ελεÏθεÏο λογιÏμικÏ. Îάν Ïο λογιÏÎ¼Î¹ÎºÏ ÏÏοÏοÏοιηθεί αÏÏ ÎºÎ¬Ïοιον ÏÏίÏο και ÏÏη ÏÏ
νÎÏεια διανεμηθεί, θÎλοÏ
με να γνÏÏίζοÏ
ν οι ÏαÏαλήÏÏÎµÏ ÏÏι Ïο λογιÏÎ¼Î¹ÎºÏ ÏοÏ
αÏÎκÏηÏαν δεν είναι Ïο ÏÏÏÏÏÏÏ
Ïο, ÎÏÏι ÏÏÏε οÏοιοδήÏοÏε ÏÏÏβλημα ÏÏοκληθεί αÏÏ ÏÏίÏοÏ
Ï Î½Î± μην βαÏÏνει Ïο Ïνομα ÏοÏ
δημιοÏ
ÏγοÏ.
-
- ΤÎλοÏ, κάθε ελεÏθεÏο λογιÏÎ¼Î¹ÎºÏ Î±ÏειλείÏαι ÏÏ
νεÏÏÏ Î±ÏÏ ÏÎ¹Ï ÎºÎ±ÏοÏÏ
ÏÏÏÎµÎ¹Ï ÎµÏ
ÏεÏιÏεÏÎ½Î¯Î±Ï Î»Î¿Î³Î¹ÏμικοÏ. ÎÎλοÏ
με να αÏοÏÏγοÏ
με Ïον κίνδÏ
νο να αÏοκÏήÏοÏ
ν οι Î±Î½Î±Î´Î¹Î±Î½Î¿Î¼ÎµÎ¯Ï ÎµÎ»ÎµÏθεÏοÏ
λογιÏÎ¼Î¹ÎºÎ¿Ï ÏίÏλοÏ
Ï ÎµÏ
ÏεÏιÏεÏνίαÏ, καθιÏÏÏνÏÎ±Ï ÎÏÏι Ïο λογιÏÎ¼Î¹ÎºÏ ÏÏοÏÏÏική ÏοÏ
Ï Î¹Î´Î¹Î¿ÎºÏηÏία. Îια να αÏοκλείÏοÏ
με αÏ
ÏÏ Ïο ενδεÏÏμενο, ÎÏοÏ
με ξεκαθαÏίÏει ÏÏι οÏοιαδήÏοÏε εÏ
ÏεÏιÏεÏνία θα ÏÏÎÏει να ÏαÏÎÏει άδεια ελεÏθεÏÎ·Ï ÏÏήÏÎ·Ï Î±ÏÏ ÏλοÏ
Ï, διαÏοÏεÏικά να μην ÏαÏÎÏει καμιά αÏολÏÏÏÏ Î¬Î´ÎµÎ¹Î±.
-
- ÎκολοÏ
θοÏν οι ακÏÎ¹Î²ÎµÎ¯Ï ÏÏοι και ÏÏ
Î½Î¸Î®ÎºÎµÏ Î±Î½ÏιγÏαÏήÏ, Î´Î¹Î±Î½Î¿Î¼Î®Ï ÎºÎ±Î¹ ÏÏοÏοÏοίηÏηÏ.
-
- ÎÎÎÎÎÎ ÎÎÎÎÎ ÎÎÎÎΣÎÎΣ ΧΡÎΣÎΣ GNU
- ÎΡÎÎ ÎÎΠΣΥÎÎÎÎÎΣ ÎÎΤÎÎΡÎΦÎΣ, ÎÎÎÎÎÎÎΣ ÎÎΠΤΡÎÎ ÎÎ ÎÎÎΣÎΣ
-
- 0. Î Îδεια αÏ
Ïή ιÏÏÏει για κάθε ÏÏÏγÏαμμα ή άλλο ÎÏγο ÏοÏ
ÏεÏιÎÏει
-ÏημείÏμα αÏÏ Ïον κάÏοÏο ÏνεÏ
μαÏικÏν δικαιÏμάÏÏν, ÏÏο οÏοίο αναÏÎÏεÏαι ÏÏι η διανομή ÏοÏ
ÏÏογÏάμμαÏÎ¿Ï ÎµÎ¯Î½Î±Î¹ δÏ
ναÏή Ï
ÏÏ ÏοÏ
Ï ÏÏοÏ
Ï Î±Ï
ÏÎ®Ï ÏÎ·Ï ÎÎµÎ½Î¹ÎºÎ®Ï ÎÎ´ÎµÎ¹Î±Ï ÎημÏÏÎ¹Î±Ï Î§ÏήÏηÏ. Î ÏÏÎ¿Ï "Î ÏÏγÏαμμα", ÏαÏακάÏÏ, αναÏÎÏεÏαι Ïε οÏοιοδήÏοÏε ÏÎÏοιο ÏÏÏγÏαμμα ή ÎÏγο, ÎµÎ½Ï Î¿ ÏÏÎ¿Ï "ÎÏγο βαÏιÏμÎνο ÏÏο Î ÏÏγÏαμμα" Ïημαίνει είÏε Ïο Î ÏÏγÏαμμα είÏε κάθε άλλο ÏαÏαγÏμενο ÎÏγο ÏοÏ
Ï
ÏάγεÏαι ÏÏο νÏμο ÏεÏί ÏνεÏ
μαÏÎ¹ÎºÎ®Ï Î¹Î´Î¹Î¿ÎºÏηÏίαÏ: με λίγα λÏγια, Îνα ÎÏγο ÏοÏ
ÏεÏιÎÏει ακÎÏαιο Ïο Î ÏÏγÏαμμα ή Îνα μÎÏÎ¿Ï ÏοÏ
, είÏε αÏ
ÏοÏÏιο είÏε με ÏÏοÏοÏοιήÏÎµÎ¹Ï Î®/και μεÏαÏÏαÏμÎνο Ïε άλλη γλÏÏÏα. (ÎÏÏ Î±Ï
ÏÏ Ïο Ïημείο, η μεÏάÏÏαÏη θα ÏεÏιλαμβάνεÏαι ÏÏÏÎ¯Ï ÏεÏιοÏιÏμοÏÏ ÏÏον ÏÏο "ÏÏοÏοÏοίηÏη".) Îάθε κάÏοÏÎ¿Ï ÏÎ·Ï Î¬Î´ÎµÎ¹Î±Ï ÏÏήÏÎ·Ï Î¸Î± αναÏÎÏεÏαι ÏÏο ÎµÎ¾Î®Ï ÏÏ "εÏείÏ/εÏάÏ".
-
-âÎ»Î»ÎµÏ Î´ÏαÏÏηÏιÏÏηÏÎµÏ ÏÎÏαν ÏÎ·Ï Î±Î½ÏιγÏαÏήÏ, ÏÎ·Ï Î´Î¹Î±Î½Î¿Î¼Î®Ï ÎºÎ±Î¹ ÏÎ·Ï ÏÏοÏοÏοίηÏÎ·Ï Î´ÎµÎ½ καλÏÏÏονÏαι αÏÏ Î±Ï
Ïήν Ïην Îδεια - είναι εκÏÏÏ ÏÏν ÏλαιÏίÏν ÏηÏ. Îεν Ï
ÏάÏÏει ÏεÏιοÏιÏμÏÏ ÏÏην ενÎÏγεια εκÏÎλεÏÎ·Ï ÎµÎ½ÏÏ ÏÏογÏάμμαÏοÏ, ÎµÎ½Ï Ïο ÏÏοÏÏν ÏÎ·Ï ÏÏήÏÎ·Ï ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï ÎºÎ±Î»ÏÏÏεÏαι μÏνο εÏÏÏον Ïο ÏεÏιεÏÏÎ¼ÎµÎ½Ï ÏοÏ
ÏÏ
νιÏÏά ÎÏγο βαÏιÏμÎνο ÏÏο Î ÏÏγÏαμμα (ανεξάÏÏηÏα αÏÏ Ïο εάν δημιοÏ
Ïγήθηκε με Ïην εκÏÎλεÏη ÏοÏ
Î ÏογÏάμμαÏοÏ). Το καÏά ÏÏÏο ÏÏ
μβαίνει αÏ
ÏÏ ÎµÎ¾Î±ÏÏάÏαι αÏÏ Ïο ÎµÎ¯Î´Î¿Ï ÏοÏ
Î ÏογÏάμμαÏοÏ.
-
- 1. ÎÏιÏÏÎÏεÏαι η ανÏιγÏαÏή και διανομή αÏ
ÏοÏÏιÏν ανÏιγÏάÏÏν ÏοÏ
ÏηγαίοÏ
κÏδικα ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï ÏÏÏÏ Î±ÎºÏιβÏÏ Ïο ÎÏεÏε λάβει, Ïε οÏοιοδήÏοÏε αÏοθηκεÏ
ÏÎ¹ÎºÏ Î¼ÎÏο, με Ïην ÏÏοÏÏÏθεÏη ÏÏι: θα δημοÏιεÏÏεÏε εμÏανÏÏ ÎºÎ±Î¹ καÏαλλήλÏÏ, Ïε κάθε ανÏίγÏαÏο, Îνα ÏημείÏμα ÏνεÏ
μαÏÎ¹ÎºÎ®Ï Î¹Î´Î¹Î¿ÎºÏηÏÎ¯Î±Ï ÎºÎ±Î¹ Îνα ÏημείÏμα αÏοÏοίηÏÎ·Ï ÎµÏ
θÏ
νÏν εγγÏηÏÎ·Ï - ÏÏι θα ÏÏ
μÏεÏιλάβεÏε ακÎÏαια Ïλα Ïα ÏημειÏμαÏα ÏοÏ
αναÏÎÏονÏαι ÏÏην Îδεια αÏ
Ïή και ÏÏην αÏοÏ
Ïία οÏοιαÏδήÏοÏε εγγÏηÏÎ·Ï - και, ÏÎλοÏ, ÏÏι θα εκÏÏÏήÏεÏε Ïε κάθε άλλον ÏαÏαλήÏÏη ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï Îνα ανÏίγÏαÏο αÏ
ÏÎ®Ï ÏÎ·Ï ÎÎ´ÎµÎ¹Î±Ï Î¼Î±Î¶Î¯ με Ïο Î ÏÏγÏαμμα.
-
-ÎÏεÏε δικαίÏμα να εÏιβάλεÏε ÏÏÎÏÏη για Ïη ÏÏ
Ïική ενÎÏγεια ÏÎ·Ï Î¼ÎµÏαÏοÏÎ¬Ï ÎµÎ½ÏÏ Î±Î½ÏιγÏάÏοÏ
, καθÏÏ ÎºÎ±Î¹ να ÏαÏάÏÏεÏε, καÏά Ïην κÏίÏη ÏαÏ, ÏÏοÏÏαÏία εγγÏηÏÎ·Ï Î¼Îµ ÏÏÎÏÏη.
-
- 2. ÎÏιÏÏÎÏεÏαι η ÏÏοÏοÏοίηÏη ÏοÏ
ανÏιγÏάÏοÏ
ή ÏÏν ανÏιγÏάÏÏν ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï Î¿Î»ÏκληÏοÏ
ή μÎÏοÏ
Ï ÏοÏ
, η οÏοία ÏÏ
νιÏÏά ÏÏ
νεÏÏÏ Î´Î·Î¼Î¹Î¿Ï
Ïγία ενÏÏ ÎÏγοÏ
βαÏιÏμÎνοÏ
ÏÏο Î ÏÏγÏαμμα, και η διανομή αÏ
ÏÏν ÏÏν ÏÏοÏοÏοιήÏεÏν ή ÎÏγÏν Ï
ÏÏ ÏοÏ
Ï ÏÏοÏ
Ï ÏÎ·Ï ÎνÏÏηÏÎ±Ï 1 ÏÏ Î±Î½ÏÏÎÏÏ, με Ïην ÏÏοÏÏÏθεÏη ÏÏι και εÏÎµÎ¯Ï ÏληÏοίÏε ÏÎ»ÎµÏ ÏÎ¹Ï ÏαÏακάÏÏ ÏÏοÏÏοθÎÏειÏ:
-
- α) Î ÏÎÏει να ÏÏονÏίζεÏε ÏÏÏε Ïα ÏÏοÏοÏοιημÎνα αÏÏεία να ÏαÏÎÏοÏ
ν εμÏανή ÏημειÏμαÏα ÏÏα οÏοία να δηλÏνεÏαι η ÏÏοÏοÏοίηÏη ÏÏν αÏÏείÏν και η ημεÏομηνία ÏÏοÏοÏοίηÏηÏ.
-
- β) Î ÏÎÏει να ÏÏονÏίζεÏε ÏÏÏε για κάθε ÎÏγο Ïο οÏοίο διανÎμεÏε ή δημοÏιεÏεÏε, και Ïο οÏοίο ÏεÏιÎÏει ή ÏαÏάγεÏαι αÏÏ Î¿Î»ÏκληÏο ή μÎÏÎ¿Ï ÏοÏ
Î ÏογÏάμμαÏοÏ, να ÏαÏÎÏεÏαι άδεια ÏÏήÏÎ·Ï ÏοÏ
, ÏÏÏÎ¯Ï ÏÏÎÏÏη, Ïε Ïλα Ïα ÏÏίÏα μÎÏη, ÏÏμÏÏνα με ÏοÏ
Ï ÏÏοÏ
Ï Î±Ï
ÏÎ®Ï ÏÎ·Ï ÎδειαÏ.
-
- γ) Îάν Ïο ÏÏοÏοÏοιημÎνο ÏÏÏγÏαμμα διαβάζει ενÏολÎÏ Î±Î»Î»Î·Î»ÎµÏιδÏαÏÏικά, καÏά Ïην ÏÏ
Ïική εκÏÎλεÏή ÏοÏ
, ÏÏÎÏει να ÏÏονÏίζεÏε ÏÏÏε, καÏά Ïην ÎναÏξη ÏÏ
ÏÎ¹ÎºÎ®Ï ÎµÎºÏÎλεÏÎ®Ï ÏοÏ
για αÏ
Ïήν Ïην αλληλεÏιδÏαÏÏική ÏÏήÏη, να εκÏÏ
ÏÏνεÏαι ή να εμÏανίζεÏαι ÏÏην οθÏνη μια ανακοίνÏÏη, η οÏοία θα ÏεÏιλαμβάνει Ïο αÏαÏαίÏηÏο ÏημείÏμα ÏνεÏ
μαÏÎ¹ÎºÎ®Ï Î¹Î´Î¹Î¿ÎºÏηÏÎ¯Î±Ï ÎºÎ±Î¹ Îνα ÏημείÏμα ÏÏο οÏοίο θα αναÏÎÏεÏαι ÏÏι δεν Ï
ÏάÏÏει καμιά εγγÏηÏη (ή, ανÏίθεÏα, ÏÏι ÏαÏÎÏεÏε εγγÏηÏη) και ÏÏι οι ÏÏήÏÏÎµÏ ÎÏοÏ
ν Ïη δÏ
ναÏÏÏηÏα να αναδιανÎμοÏ
ν Ïο ÏÏÏγÏαμμα ÏÏμÏÏνα με ÏÎ¹Ï ÏÏοÏÏοθÎÏÎµÎ¹Ï Î±Ï
ÏÎÏ, καθÏÏ ÎºÎ±Î¹ Î¿Î´Î·Î³Î¯ÎµÏ ÏÏÎ¿Ï Ïο ÏÏήÏÏη για Ïον ÏÏÏÏο ÏÏÎ¿Î²Î¿Î»Î®Ï ÎµÎ½ÏÏ Î±Î½ÏιγÏάÏοÏ
αÏ
ÏÎ®Ï ÏÎ·Ï ÎδειαÏ. (ÎξαίÏεÏη: εάν Ïο ίδιο Ïο Î ÏÏγÏαμμα είναι αλληλεÏιδÏαÏÏÎ¹ÎºÏ Î±Î»Î»Î¬ κανονικά δεν εκÏÏ
ÏÏνει αÏ
Ïήν Ïην ανακοίνÏÏη, δεν αÏαιÏείÏαι αÏÏ Ïο ÎÏγο ÏοÏ
δημιοÏ
ÏγήÏαÏε βαÏιÏμÎνοι ÏÏο Î ÏÏγÏαμμα να εκÏÏ
ÏÏνει ανακοίνÏÏη.)
-
-Îι αÏαιÏήÏÎµÎ¹Ï Î±Ï
ÏÎÏ Î¹ÏÏÏοÏ
ν για ολÏκληÏο Ïο ÏÏοÏοÏοιημÎνο ÎÏγο. Îάν ÏÏ
γκεκÏιμÎÎ½ÎµÏ ÎµÎ½ÏÏηÏÎµÏ ÏοÏ
ÎÏγοÏ
αÏ
ÏÎ¿Ï Î´ÎµÎ½ ÏαÏάγονÏαι αÏÏ Ïο Î ÏÏγÏαμμα, και μÏοÏοÏν να θεÏÏηθοÏν με αÏÏάλεια αÏÏ Î¼ÏÎ½ÎµÏ ÏοÏ
Ï ÏÏ Î±Î½ÎµÎ¾Î¬ÏÏηÏα και ξεÏÏÏιÏÏά ÎÏγα, ÏÏÏε αÏ
Ïή η Îδεια και οι ÏÏοι ÏÎ·Ï Î´ÎµÎ½ ιÏÏÏοÏ
ν για ÏÎ¹Ï ÎµÎ½ÏÏηÏÎµÏ Î±Ï
ÏÎÏ, καÏά Ïη διανομή ÏοÏ
Ï ÏÏ Î¾ÎµÏÏÏιÏÏά ÎÏγα. Îλλά ÏÏαν διανÎμεÏε ÏÎ¹Ï Î¯Î´Î¹ÎµÏ ÎµÎ½ÏÏηÏÎµÏ ÏÏ ÏμήμαÏα ενÏÏ ÎµÏ
ÏÏÏεÏοÏ
ÎÏγοÏ
Ïο οÏοίο βαÏίζεÏαι ÏÏο Î ÏÏγÏαμμα, η διανομή ÏοÏ
ÏÏ
νÏλοÏ
ÏÏÎÏει να Ï
ÏÏκειÏαι ÏÏοÏ
Ï ÏÏοÏ
Ï ÏÎ·Ï ÎδειαÏ, ÏÏμÏÏνα με Ïην οÏοία Ïα δικαιÏμαÏα ÏÏν άλλÏν ÏÏηÏÏÏν εκÏείνονÏαι Ïε ολÏκληÏο Ïο ÎÏγο, εÏομÎνÏÏ ÎºÎ±Î¹ Ïε καθÎνα ÏÏÏιÏÏÏ Ïμήμα ÏοÏ
, ανεξάÏÏηÏα αÏÏ Ïο ÏÎ¿Î¹Î¿Ï ÎµÎ¯Î½Î±Î¹ ο δημιοÏ
ÏγÏÏ ÏοÏ
.
-
-ÎÏομÎνÏÏ, ÏÏÏθεÏη αÏ
ÏÎ®Ï ÏÎ·Ï ÎµÎ½ÏÏηÏÎ±Ï Î´ÎµÎ½ είναι να εγείÏει δικαιÏμαÏα ή να αμÏιÏβηÏήÏει Ïα δικά ÏÎ±Ï Î´Î¹ÎºÎ±Î¹ÏμαÏα Ïε μια εÏγαÏία ÏοÏ
δημιοÏ
ÏγήÏαÏε εξ ολοκλήÏοÏ
οι ίδιοι - η ÏÏÏθεÏη, ÏεÏιÏÏÏÏεÏο, είναι να αÏκήÏει Ïο δικαίÏμα ελÎγÏοÏ
ÏÎ·Ï Î´Î¹Î±Î½Î¿Î¼Î®Ï ÏÏν ÏαÏαγÏμενÏν ή ÏÏν ÏÏ
λλογικÏν ÎÏγÏν ÏοÏ
βαÏίζονÏαι ÏÏο Î ÏÏγÏαμμα.
-
-ÎÏιÏλÎον, η αÏλή ÏÏοÏθήκη ενÏÏ Î¬Î»Î»Î¿Ï
ÎÏγοÏ
, ÏοÏ
δεν βαÏίζεÏαι ÏÏο Î ÏÏγÏαμμα, μαζί με Ïο Î ÏÏγÏαμμα (ή με Îνα ÎÏγο ÏοÏ
βαÏίζεÏαι ÏÏο Î ÏÏγÏαμμα) Ïε ÏÏμο ενÏÏ Î¼ÎÏοÏ
αÏοθήκεÏ
ÏÎ·Ï Î® διανομήÏ, δεν Ï
Ïάγει Ïο άλλο ÎÏγο ÏÏα ÏλαίÏια αÏ
ÏÎ®Ï ÏÎ·Ï ÎδειαÏ.
-
- 3. ÎÏιÏÏÎÏεÏαι η ανÏιγÏαÏή και διανομή ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï (ή ενÏÏ ÎÏγοÏ
βαÏιÏμÎνο Ïε αÏ
ÏÏ, ÏÏμÏÏνα με Ïην ÎνÏÏηÏα 2) Ïε μοÏÏή ανÏÎ¹ÎºÎµÎ¹Î¼ÎµÎ½Î¹ÎºÎ¿Ï ÎºÏδικα ή εκÏελÎÏιμη μοÏÏή, ÏÏμÏÏνα με ÏοÏ
Ï ÏÏοÏ
Ï ÏÏν ÎνοÏήÏÏν 1 και 2 ÏÏ Î±Î½ÏÏÎÏÏ, με Ïην ÏÏοÏÏÏθεÏη ÏÏι ÏÏαγμαÏοÏοιείÏε και μια αÏÏ ÏÎ¹Ï Î±ÎºÏλοÏ
Î¸ÎµÏ ÎµÎ½ÎÏγειεÏ:
-
- α) Το ÏÏ
νοδεÏεÏε με Ïον ανÏίÏÏοιÏο, ÏλήÏη Ïηγαίο κÏδικα, ο οÏÎ¿Î¯Î¿Ï ÎµÎ¯Î½Î±Î¹ αναγνÏÏÎ¹Î¼Î¿Ï Î±ÏÏ Ïο ÏÏÏÏημα και ο οÏÎ¿Î¯Î¿Ï ÏÏÎÏει να διανÎμεÏαι ÏÏμÏÏνα με ÏοÏ
Ï ÏÏοÏ
Ï ÏÏν ÎνοÏήÏÏν 1 και 2 ÏαÏαÏάνÏ, Ïε Îνα ÏÏ
νηθιÏμÎνο μÎÏο μεÏαÏοÏÎ¬Ï Î»Î¿Î³Î¹ÏÎ¼Î¹ÎºÎ¿Ï - ή,
- β) Το ÏÏ
νοδεÏεÏε με γÏαÏÏή ÏÏοÏÏοÏά, ιÏÏÏοÏ
Ïα ÏοÏ
λάÏιÏÏον για ÏÏία ÏÏÏνια και με ÏÏÎÏÏη ÏÏι μεγαλÏÏεÏη αÏÏ Ïο κÏÏÏÎ¿Ï ÏÎ·Ï ÏÏ
ÏÎ¹ÎºÎ®Ï Î´Î¹Î±Î½Î¿Î¼Î®Ï ÎºÏδικα, ÏαÏάδοÏÎ·Ï Ïε ÏÏίÏοÏ
Ï ÏοÏ
ÏλήÏοÏ
Ï, αναγνÏÏιμοÏ
αÏÏ Ïο ÏÏÏÏημα ανÏιγÏάÏοÏ
ÏοÏ
ανÏίÏÏοιÏοÏ
ÏηγαίοÏ
κÏδικα, ο οÏÎ¿Î¯Î¿Ï Î¸Î± διανεμηθεί Ï
ÏÏ ÏοÏ
Ï ÏÏοÏ
Ï ÏÏν ÎνοÏήÏÏν 1 και 2 ÏÏ Î±Î½ÏÏÎÏÏ, Ïε ÏÏ
νηθιÏμÎνο μÎÏο μεÏαÏοÏÎ¬Ï Î»Î¿Î³Î¹ÏÎ¼Î¹ÎºÎ¿Ï - ή,
-
- γ) Το ÏÏ
νοδεÏεÏε με ÏÎ¹Ï ÏληÏοÏοÏÎ¯ÎµÏ ÏοÏ
λάβαÏε ÏÏον αÏοÏά Ïην ÏÏοÏÏοÏά Î´Î¹Î±Î½Î¿Î¼Î®Ï ÏοÏ
ανÏίÏÏοιÏοÏ
ÏηγαίοÏ
κÏδικα. (ΠεναλλακÏική αÏ
Ïή εÏιλογή εÏιÏÏÎÏεÏαι μÏνο για μη εμÏοÏική διανομή και μÏνο εÏÏÏον λάβαÏε Ïο ÏÏÏγÏαμμα Ïε ανÏÎ¹ÎºÎµÎ¹Î¼ÎµÎ½Î¹ÎºÏ ÎºÏδικα ή εκÏελÎÏιμη μοÏÏή με αÏ
Ïήν Ïην ÏÏοÏÏοÏά, ÏÏμÏÏνα με Ïην Î¥ÏοενÏÏηÏα [β] ÏαÏαÏάνÏ.)
-
-Î ÏÎ·Î³Î±Î¯Î¿Ï ÎºÏÎ´Î¹ÎºÎ±Ï Î³Î¹Î± Îνα ÎÏγο ÏÏ
νιÏÏά Ïην ÏÏοÏιμÏμενη μοÏÏή ÏοÏ
ÎÏγοÏ
για ÏÏαγμαÏοÏοίηÏη ÏÏοÏοÏοιήÏεÏν Ïε αÏ
ÏÏ. Îια Îνα εκÏελÎÏιμο ÎÏγο, ÏλήÏÎ·Ï ÏÎ·Î³Î±Î¯Î¿Ï ÎºÏÎ´Î¹ÎºÎ±Ï Ïημαίνει Ïλον Ïον Ïηγαίο κÏδικα για ÏÎ»ÎµÏ ÏÎ¹Ï Î»ÎµÎ¹ÏοÏ
ÏγικÎÏ Î¼Î¿Î½Î¬Î´ÎµÏ ÏοÏ
ÏεÏιλαμβάνει, ÏÏ
ν οÏοιαδήÏοÏε ÏÏεÏικά αÏÏεία οÏιÏÎ¼Î¿Ï Î´Î¹Î±ÏÏνδεÏηÏ, ÏÏ
ν ÏÎ¹Ï Î´ÎÏÎ¼ÎµÏ ÎµÎ½ÎµÏγειÏν ÏοÏ
ÏÏηÏιμοÏοιοÏνÏαι για Ïον ÎλεγÏο ÏÎ·Ï Î¼ÎµÏαγλÏÏÏιÏÎ·Ï ÎºÎ±Î¹ εγκαÏάÏÏαÏÎ·Ï ÏοÏ
εκÏελÎÏιμοÏ
αÏÏείοÏ
. ΩÏÏÏÏο, ÏÏ ÎµÎ¹Î´Î¹ÎºÎ® εξαίÏεÏη, ο ÏÎ·Î³Î±Î¯Î¿Ï ÎºÏÎ´Î¹ÎºÎ±Ï ÏοÏ
διανÎμεÏαι δεν ÏÏειάζεÏαι να ÏεÏιλαμβάνει οÏιδήÏοÏε διανÎμεÏαι κανονικά (είÏε ÏÏ ÎºÏδικαÏ, είÏε Ïε δÏ
αδική μοÏÏή) μαζί με Ïα μεγαλÏÏεÏα ÏÏοιÏεία (μεÏαγλÏÏÏιÏÏÎÏ, ÏÏ
ÏÎ®Î½Î±Ï Îº.ο.κ.) ÏοÏ
λειÏοÏ
ÏÎ³Î¹ÎºÎ¿Ï ÏÏ
ÏÏήμαÏÎ¿Ï ÏÏο οÏοίο εκÏελείÏαι Ïο εκÏελÎÏιμο αÏÏείο, εκÏÏÏ ÎµÎ¬Î½ Ïο ίδιο Ïο ÏÏοιÏείο ÏÏ
νοδεÏει Ïο εκÏελÎÏιμο.
-
-Îάν η διανομή ÏοÏ
εκÏελÎÏιμοÏ
ή ÏοÏ
ανÏÎ¹ÎºÎµÎ¹Î¼ÎµÎ½Î¹ÎºÎ¿Ï ÎºÏδικα ÏÏαγμαÏοÏοιείÏαι με
-ÏαÏαÏÏÏηÏη ÏÏÏÏβαÏÎ·Ï Î³Î¹Î± ανÏιγÏαÏή αÏÏ ÎºÎ±Î¸Î¿ÏιÏμÎνη ÏοÏοθεÏία, ÏÏÏε η ÏαÏαÏÏÏηÏη
-ιÏοδÏÎ½Î±Î¼Î·Ï ÏÏÏÏβαÏÎ·Ï Î³Î¹Î± ανÏιγÏαÏή ÏοÏ
ÏηγαίοÏ
κÏδικα αÏÏ Ïην ίδια ÏοÏοθεÏία λογίζεÏαι ÏÏ Î´Î¹Î±Î½Î¿Î¼Î® ÏοÏ
ÏηγαίοÏ
κÏδικα - αν και Ïα ÏÏίÏα μÎλη δεν
-Ï
ÏοÏÏεοÏνÏαι να ανÏιγÏάÏοÏ
ν Ïον Ïηγαίο κÏδικα μαζί με Ïον ανÏικειμενικÏ.
-
- 4. Îεν εÏιÏÏÎÏεÏαι η ανÏιγÏαÏή, ÏÏοÏοÏοίηÏη, ÏαÏαÏÏÏηÏη Î¬Î´ÎµÎ¹Î±Ï ÏεÏαιÏÎÏÏ ÎµÎºÎ¼ÎµÏάλλεÏ
ÏÎ·Ï Î® διανομή ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï ÎµÎºÏÏÏ ÎµÎ¬Î½ ÏÏοβλÎÏεÏαι ÏηÏά ÏÏην ÏαÏοÏÏα Îδεια. ÎιαÏοÏεÏικά, κάθε αÏÏÏειÏα για ανÏιγÏαÏή, ÏÏοÏοÏοίηÏη, ÏαÏαÏÏÏηÏη Î¬Î´ÎµÎ¹Î±Ï ÎµÎºÎ¼ÎµÏάλλεÏ
ÏÎ·Ï Î® διανομή ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï ÎµÎ¯Î½Î±Î¹ άκÏ
Ïη και αÏ
ÏομάÏÏÏ ÎºÎ±ÏαÏγεί Ïα δικαιÏμαÏα ÏοÏ
ÏÎ±Ï ÏαÏαÏÏÏεί η ÏαÏοÏÏα Îδεια.
-ΩÏÏÏÏο, οι Î¬Î´ÎµÎ¹ÎµÏ ÏÏήÏÎ·Ï ÏÏν μελÏν ÏοÏ
ÎÏοÏ
ν λάβει ανÏίγÏαÏα ή δικαιÏμαÏα αÏÏ ÎµÏάÏ, μÎÏÏ ÏÎ·Ï ÏαÏοÏÏÎ±Ï ÎδειαÏ, δεν θα ακÏ
ÏÏθοÏν, εÏÏÏον Ïα μÎλη αÏ
Ïά
-ÏαÏαμÎνοÏ
ν ÏλήÏÏÏ ÏÏ
μμοÏÏÏμÎνα με ÏοÏ
Ï ÏÏοÏ
Ï ÏÎ·Ï ÎδειαÏ.
-
- 5. Îεν αÏαιÏείÏαι αÏÏ ÎµÏÎ¬Ï Î½Î± δεÏθείÏε Ïην ÏαÏοÏÏα Îδεια, εÏÏÏον δεν Ïην ÎÏεÏε Ï
ÏογÏάÏει. ΩÏÏÏÏο, ÏίÏοÏε άλλο δεν ÏÎ±Ï Î´Î¯Î½ÎµÎ¹ Ïο δικαίÏμα να ÏÏοÏοÏοιήÏεÏε ή να διανείμεÏε Ïο Î ÏÏγÏαμμα ή Ïα ÏαÏαγÏμενα αÏÏ Î±Ï
ÏÏ ÎÏγα. Îι ενÎÏÎ³ÎµÎ¹ÎµÏ Î±Ï
ÏÎÏ Î±ÏαγοÏεÏονÏαι αÏÏ Ïο νÏμο, εάν δεν αÏοδεÏθείÏε Ïην ÏαÏοÏÏα Îδεια. ΣÏ
νεÏÏÏ, με Ïο να ÏÏοÏοÏοιήÏεÏε ή να διανείμεÏε Ïο Î ÏÏγÏαμμα (ή οÏοιοδήÏοÏε ÎÏγο ÏοÏ
βαÏίζεÏαι ÏÏο Î ÏÏγÏαμμα), δηλÏνεÏε ÏÏι αÏοδÎÏεÏÏε Ïην ÏαÏοÏÏα Îδεια, καθÏÏ ÎºÎ±Î¹ ÏλοÏ
Ï ÏοÏ
Ï ÏÏοÏ
Ï ÎºÎ±Î¹ ÏÏ
Î½Î¸Î®ÎºÎµÏ ÏοÏ
ÏÏοβλÎÏει η Îδεια για Ïην ανÏιγÏαÏή, διανομή ή ÏÏοÏοÏοίηÏη ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï Î® ÎÏγÏν ÏοÏ
βαÏίζονÏαι Ïε αÏ
ÏÏ.
-
- 6. Îάθε ÏοÏά ÏοÏ
αναδιανÎμεÏε Ïο Î ÏÏγÏαμμα (ή Îνα ÎÏγο βαÏιÏμÎνο ÏÏο Î ÏÏγÏαμμα), ο αÏοδÎκÏÎ·Ï Î±Ï
ÏÏμαÏα ÏαÏαλαμβάνει Ïην αÏÏική άδεια ανÏιγÏαÏήÏ, Î´Î¹Î±Î½Î¿Î¼Î®Ï Î® ÏÏοÏοÏοίηÏÎ·Ï ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï ÏÏμÏÏνα με ÏοÏ
Ï ÏÏοÏ
Ï ÎºÎ±Î¹ ÏÎ¹Ï ÏÏ
Î½Î¸Î®ÎºÎµÏ Î±Ï
ÏÎÏ. Îεν εÏιÏÏÎÏεÏαι να εÏιβάλλεÏε ÏεÏαιÏÎÏÏ ÏεÏιοÏιÏμοÏÏ ÏÏην άÏκηÏη ÏÏν δικαιÏμάÏÏν ÏοÏ
αÏοδÎκÏη Ïα οÏοία ÏÏοβλÎÏονÏαι εδÏ. Îεν είÏÏε Ï
ÏεÏθÏ
νοι για Ïο εάν ÏÏίÏα μÎλη εÏιβάλλοÏ
ν ÏÏ
μμÏÏÏÏÏη Ïε αÏ
Ïήν Ïη Îδεια.
-
- 7. Îάν, ÏÏ ÏÏ
νÎÏεια δικαÏÏÎ¹ÎºÎ®Ï Î±ÏÏÏαÏÎ·Ï Î® καÏηγοÏÎ¯Î±Ï Î³Î¹Î± ÏαÏάβαÏη νÏμοÏ
ÏεÏί ÏνεÏ
μαÏÎ¹ÎºÎ®Ï Î¹Î´Î¹Î¿ÎºÏηÏÎ¯Î±Ï Î® για οÏοιονδήÏοÏε άλλο λÏγο (μη ÏεÏιοÏιζÏμενο Ïε θÎμαÏα εÏ
ÏεÏιÏεÏνίαÏ), ÏÎ±Ï ÎµÏιβληθοÏν ÏÏοι (είÏε μÎÏÏ Î´Î¹ÎºÎ±ÏÏÎ¹ÎºÎ®Ï Î±ÏÏÏαÏηÏ, ÏÏ
μÏÏÎ½Î¯Î±Ï Î® μÎÏÏ Î¬Î»Î»Î¿Ï
ÏÏÏÏοÏ
) οι οÏοίοι ανÏιβαίνοÏ
ν ÏοÏ
Ï ÏÏοÏ
Ï ÏÎ·Ï ÏαÏοÏÏÎ±Ï ÎδειαÏ, οι ÏÏοι εκείνοι δεν ÏÎ±Ï Î±ÏαλλάÏÏοÏ
ν αÏÏ ÏοÏ
Ï ÏÏοÏ
Ï ÏÎ·Ï ÏαÏοÏÏαÏ. Îάν δεν είναι δÏ
ναÏή η αναδιανομή με ÏÏÏÏο ÏÏÏε να ικανοÏοιεί ÏÏ
γÏÏÏνÏÏ ÏÎ¹Ï Ï
ÏοÏÏεÏÏÎµÎ¹Ï ÏÎ±Ï ÏÏμÏÏνα με Ïην ÏαÏοÏÏα Îδεια και οÏοιεÏδήÏοÏε Î¬Î»Î»ÎµÏ Ï
ÏοÏÏεÏÏÎµÎ¹Ï Î±ÏοÏÏÎοÏ
ν αÏÏ Î±Ï
Ïή, ÏÏÏε, ÏÏ ÏÏ
νÎÏεια, δεν εÏιÏÏÎÏεÏαι να αναδιανÎμεÏε Ïο Î ÏÏγÏαμμα με κανÎνα ÏÏÏÏο. Îια ÏαÏάδειγμα, εάν μια άδεια εÏ
ÏεÏιÏεÏÎ½Î¯Î±Ï Î´ÎµÎ½ εÏιÏÏÎÏει Ïη ÏÏÏÎ¯Ï Î´Î¹ÎºÎ±Î¹ÏμαÏα εκμεÏάλλεÏ
ÏÎ·Ï Î±Î½Î±Î´Î¹Î±Î½Î¿Î¼Î® ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï Î±ÏÏ ÏλοÏ
Ï ÏÏοÏ
Ï Î»Î±Î¼Î²Î¬Î½Î¿Ï
ν ανÏίγÏαÏα άμεÏα ή ÎμμεÏα αÏÏ ÎµÏάÏ, ÏÏÏε ο μÏÎ½Î¿Ï ÏÏÏÏÎ¿Ï Î¼Îµ Ïον οÏοίο θα μÏοÏοÏÏαÏε να ικανοÏοιήÏεÏε Ïην άδεια εκείνη και Ïην ÏαÏοÏÏα Îδεια θα ήÏαν να αÏοÏÏγεÏε ενÏελÏÏ Ïην αναδιανομή ÏοÏ
Î ÏογÏάμμαÏοÏ.
-
-Îάν οÏοιοδήÏοÏε Ïμήμα αÏ
ÏÎ®Ï ÏÎ·Ï ÎµÎ½ÏÏηÏÎ±Ï ÎºÎ±ÏαÏÏεί άκÏ
Ïο ή μη δÏ
νάμενο να εÏιβληθεί Ïε κάÏοια ÏÏ
γκεκÏιμÎνη ÏεÏίÏÏÏÏη, Ïο Ï
ÏÏλοιÏο Ïμήμα ÏÎ·Ï ÎµÎ½ÏÏηÏÎ±Ï Î±Ï
ÏÎ®Ï ÎµÏαÏμÏζεÏαι και η ενÏÏηÏα ÏÏ ÏÏνολο εÏαÏμÏζεÏαι Ï
ÏÏ Î¿ÏοιεÏδήÏοÏε ÏÏ
γκÏ
ÏίεÏ.
-
-Îεν ανήκει ÏÏοÏ
Ï ÏκοÏοÏÏ ÏÎ·Ï ÎµÎ½ÏÏηÏÎ±Ï Î±Ï
ÏÎ®Ï Î½Î± ÏÎ±Ï ÏαÏακινήÏει να ÏαÏαβιάÏεÏε
-Ïην εÏ
ÏεÏιÏεÏνία ή Î¬Î»Î»ÎµÏ Î±Î¾Î¹ÏÏÎµÎ¹Ï ÏνεÏ
μαÏÎ¹ÎºÎ®Ï Î¹Î´Î¹Î¿ÎºÏηÏÎ¯Î±Ï Î® να αμÏιÏβηÏήÏεÏε Ïον κÏÏÎ¿Ï Î¿ÏοιÏνδήÏοÏε ÏÎÏοιÏν αξιÏÏεÏν. ÎοναδικÏÏ ÏκοÏÏÏ Î±Ï
ÏÎ®Ï ÏÎ·Ï ÎµÎ½ÏÏηÏÎ±Ï ÎµÎ¯Î½Î±Î¹ να ÏÏοÏÏαÏÎÏει Ïην ακεÏαιÏÏηÏα ÏοÏ
ÏÏ
ÏÏήμαÏÎ¿Ï Î´Î¹Î±Î½Î¿Î¼Î®Ï ÎµÎ»ÎµÏθεÏοÏ
λογιÏμικοÏ, η οÏοία Ï
λοÏοιείÏαι μÎÏÏ ÏÎ·Ï ÏÏακÏÎ¹ÎºÎ®Ï ÏÏν αδειÏν δημÏÏÎ¹Î±Ï ÏÏήÏηÏ. Πολλοί άνθÏÏÏοι ÎÏοÏ
ν ÏÏ
νειÏÏÎÏει γενναιÏδÏÏα ÏÏην εÏ
Ïεία ÎκÏαÏη ÏοÏ
λογιÏÎ¼Î¹ÎºÎ¿Ï ÏοÏ
διανÎμεÏαι μÎÏÏ Î±Ï
ÏÎ¿Ï ÏοÏ
ÏÏ
ÏÏήμαÏοÏ, εμÏιÏÏεÏ
Ïμενοι Ïην ÏÏ
νεÏή εÏαÏμογή αÏ
ÏÎ¿Ï ÏοÏ
ÏÏ
ÏÏήμαÏοÏ. Îίναι ÏÏην εÏ
ÏÎÏεια ÏοÏ
δημιοÏ
ÏγοÏ/δÏÏηÏή να αÏοÏαÏίÏει εάν ÏÏοÏίθεÏαι να διανείμει λογιÏÎ¼Î¹ÎºÏ Î¼ÎÏÏ Î¿ÏοιοÏ
δήÏοÏε άλλοÏ
ÏÏ
ÏÏήμαÏοÏ, και μια άδεια δεν είναι δÏ
ναÏÏ Î½Î± εÏιβάλει αÏ
Ïήν Ïην εÏιλογή.
-
-ΠενÏÏηÏα αÏ
Ïή ÎÏει ÏÏ ÏκοÏÏ Î½Î± καÏαÏÏήÏει ÏαÏÎÏ Ï,Ïι ÏÏ
νεÏάγεÏαι Ïο Ï
ÏÏλοιÏο Ïμήμα ÏÎ·Ï ÏαÏοÏÏÎ±Ï ÎδειαÏ.
-
- 8. Îάν η διανομή ή/και η ÏÏήÏη ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï ÎµÎ¼ÏοδίζεÏαι Ïε οÏιÏμÎÎ½ÎµÏ ÏÏÏεÏ, είÏε μÎÏÏ ÎºÎ±ÏοÏÏ
ÏÏμÎÎ½Î·Ï ÎµÏ
ÏεÏιÏεÏÎ½Î¯Î±Ï ÎµÎ¯Ïε μÎÏÏ Î´Î¹Î±ÏÏ
νδÎÏεÏν ÏοÏ
ÏÏοÏÏαÏεÏονÏαι αÏÏ ÏνεÏ
μαÏικά δικαιÏμαÏα, εÏιÏÏÎÏεÏαι ÏÏον κάÏοÏο ÏοÏ
αÏÏÎ¹ÎºÎ¿Ï ÏνεÏ
μαÏÎ¹ÎºÎ¿Ï Î´Î¹ÎºÎ±Î¹ÏμαÏοÏ, ο οÏÎ¿Î¯Î¿Ï Î¸ÎÏει Ïο Î ÏÏγÏαμμα Ï
ÏÏ ÏοÏ
Ï ÏÏοÏ
Ï ÏÎ·Ï ÏαÏοÏÏÎ±Ï ÎδειαÏ, να ÏÏοÏθÎÏει Îναν ÏηÏÏ Î³ÎµÏγÏαÏÎ¹ÎºÏ ÏεÏιοÏιÏÎ¼Ï ÏÏη διανομή, εξαιÏÏνÏÎ±Ï ÎµÎºÎµÎ¯Î½ÎµÏ ÏÎ¹Ï ÏÏÏεÏ, ÎÏÏι ÏÏÏε η διανομή να εÏιÏÏÎÏεÏαι μÏνο για ÏÎ¹Ï ÏÏÏÎµÏ Î¿Î¹ οÏÎ¿Î¯ÎµÏ Î´ÎµÎ½ εξαιÏοÏνÏαι. Σε ÏÎÏοια ÏεÏίÏÏÏÏη, η ÏαÏοÏÏα Îδεια ενÏÏμαÏÏνει Ïον ÏεÏιοÏιÏÎ¼Ï Ïαν να ήÏαν διαÏÏ
ÏÏμÎÎ½Î¿Ï ÏÏο ÏÏμα ÏÎ·Ï ÏαÏοÏÏÎ±Ï ÎδειαÏ.
-
- 9. Το ÎδÏÏ
μα ÎλεÏθεÏοÏ
ÎογιÏÎ¼Î¹ÎºÎ¿Ï (Free Software Foundation) ÎÏει Ïη δÏ
ναÏÏÏηÏα ÏεÏιÏÏαÏιακά να δημοÏιεÏει αναθεÏÏημÎÎ½ÎµÏ Î®/και νÎÎµÏ ÎµÎºÎ´ÏÏÎµÎ¹Ï ÏÎ·Ï ÎÎµÎ½Î¹ÎºÎ®Ï ÎÎ´ÎµÎ¹Î±Ï ÎημÏÏÎ¹Î±Ï Î§ÏήÏηÏ. ÎÏ
ÏÎÏ Î¿Î¹ νÎÎµÏ ÎµÎºÎ´ÏÏÎµÎ¹Ï Î¸Î± είναι ÏÏ
ναÏÎµÎ¯Ï ÏÏο ÏνεÏμα με Ïην ÏαÏοÏÏα ÎκδοÏη, ÏμÏÏ ÎµÎ½Î´ÎÏεÏαι να διαÏÎÏοÏ
ν ÏÏÎ¹Ï Î»ÎµÏÏομÎÏειεÏ,
-καθÏÏ Î±Î½Î±ÏÎÏονÏαι Ïε νÎα ÏÏοβλήμαÏα και ζηÏήμαÏα.
-
-Σε κάθε ÎκδοÏη δίνεÏαι ÎÎ½Î±Ï Î´Î¹Î±ÎºÏιÏικÏÏ Î±ÏιθμÏÏ ÎκδοÏηÏ. Îάν ÏÏο Î ÏÏγÏαμμα
-καθοÏίζεÏαι ÎÎ½Î±Ï Î±ÏιθμÏÏ ÎκδοÏÎ·Ï ÏÎ·Ï ÏαÏοÏÏÎ±Ï ÎδειαÏ, η οÏοία ιÏÏÏει Ïε αÏ
ÏÏ, καθÏÏ ÎºÎ±Î¹ "οÏοιαÏδήÏοÏε μεÏαγενÎÏÏεÏÎ·Ï ÎκδοÏηÏ", μÏοÏείÏε να εÏιλÎξεÏε ανάμεÏα ÏÏο να ακολοÏ
θήÏεÏε ÏοÏ
Ï ÏÏοÏ
Ï ÎºÎ±Î¹ ÏÎ¹Ï ÏÏ
Î½Î¸Î®ÎºÎµÏ ÎµÎ¯Ïε ÎµÎºÎµÎ¯Î½Î·Ï ÏÎ·Ï ÎκδοÏÎ·Ï ÎµÎ¯Ïε οÏοιαÏδήÏοÏε Î¬Î»Î»Î·Ï ÎκδοÏÎ·Ï ÏοÏ
δημοÏιεÏεÏαι αÏÏ Ïο ÎδÏÏ
μα ÎλεÏθεÏοÏ
ÎογιÏÎ¼Î¹ÎºÎ¿Ï (Free Software Foundation). Îάν ÏÏο Î ÏÏγÏαμμα δεν καθοÏίζεÏαι αÏιθμÏÏ ÎκδοÏηÏ
-ÏÎ·Ï ÏαÏοÏÏÎ±Ï ÎδειαÏ, μÏοÏείÏε να εÏιλÎξεÏε οÏοιαδήÏοÏε ÎκδοÏη η οÏοία ÎÏει δημοÏιεÏ
θεί αÏÏ Ïο ÎδÏÏ
μα ÎλεÏθεÏοÏ
ÎογιÏμικοÏ.
-
- 10. Îάν εÏιθÏ
μείÏε να ενÏÏμαÏÏÏεÏε μÎÏη ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï Ïε άλλα ελεÏθεÏα
-ÏÏογÏάμμαÏα, ÏÏν οÏοίÏν οι ÏÏοι Î´Î¹Î±Î½Î¿Î¼Î®Ï ÎµÎ¯Î½Î±Î¹ διαÏοÏεÏικοί, εÏικοινÏνήÏÏε με Ïο δημιοÏ
ÏÎ³Ï ÏοÏ
Î ÏογÏάμμαÏÎ¿Ï Î³Î¹Î± να ζηÏήÏεÏε Ïην ÎγκÏιÏή ÏοÏ
. Îια λογιÏÎ¼Î¹ÎºÏ ÏοÏ
οÏοίοÏ
η ÏνεÏ
μαÏική ιδιοκÏηÏία ανήκει ÏÏο ÎδÏÏ
μα ÎλεÏθεÏοÏ
ÎογιÏÎ¼Î¹ÎºÎ¿Ï (Free Software Foundation), εÏικοινÏνήÏÏε μαζί Î¼Î±Ï ÏÏο ÎδÏÏ
μα ÎλεÏθεÏοÏ
ÎογιÏÎ¼Î¹ÎºÎ¿Ï (Ïε οÏιÏμÎÎ½ÎµÏ ÏεÏιÏÏÏÏÎµÎ¹Ï ÏÏοβαίνοÏ
με Ïε εξαιÏÎÏειÏ). ΠαÏÏÏαÏή Î¼Î±Ï Î¸Î± ληÏθεί βάÏει ÏοÏ
διÏÏÎ¿Ï ÏÏÏÏοÏ
Î¼Î±Ï Î½Î± διαÏηÏήÏοÏ
με Ïην ελεÏ
θεÏία ÏλÏν ÏÏν ÏÏοÏÏνÏÏν ÏοÏ
ÏαÏάγονÏαι αÏÏ Ïο ελεÏθεÏο λογιÏÎ¼Î¹ÎºÏ Î¼Î±Ï, καθÏÏ ÎºÎ±Î¹ να ÏÏοÏθήÏοÏ
με γενικÏÏεÏα Ïην κοινή ÏÏήÏη και Ïη δÏ
ναÏÏÏηÏα εÏαναÏÏηÏιμοÏοίηÏÎ·Ï ÏοÏ
λογιÏμικοÏ.
-
- ÎÎÎÎÎ ÎÎÎÎ¥ÎΣÎ
-
- 11. ÎÎ ÎÎÎÎ Î ÎÎÎÎΠΧΡÎΣÎΣ ΤÎÎ¥ ΠΡÎÎΡÎÎÎÎΤÎΣ Î ÎΡÎΧÎΤÎΠΧΩΡÎΣ ΧΡÎΩΣÎ, ÎÎΠΥΠÎΡΧÎÎ ÎÎÎÎ¥ÎΣΠÎÎΠΤΠΠΡÎÎΡÎÎÎÎ, ΣΤΠÎÎÎÎÎ Î ÎÎ¥ ÎÎ ÎΤΡÎÎ ÎÎ Î ÎΣΧΥÎΥΣΠÎÎÎÎÎÎΣÎÎ. ÎΦÎΣÎÎ ÎÎΠΥΠÎΡΧÎÎ ÎÎÎΦÎΡÎΤÎÎÎ ÎÎÎΡÎΦΠÎÎÎΩΣÎ, ÎÎ ÎÎΤÎΧÎÎ Î ÎÎÎ¥ÎÎΤÎÎΩΠÎÎÎÎÎΩÎÎΤΩΠÎ/ÎÎÎ ÎÎÎÎΣ Î ÎÎΥΡÎΣ Î ÎΡÎΧÎΥΠΤΠΠΡÎÎΡÎÎÎÎ "ΩΣ ÎΧÎÎ" ΧΩΡÎΣ ÎÎÎÎÎÎΣ ÎÎÎÎΥΣ ÎÎÎÎ¥ÎΣÎÎΣ, ÎÎΤΠΡÎΤÎΣ ÎÎΤΠÎÎÎÎΣÎΣ, ΣΤÎΣ ÎÎ ÎÎÎΣ ΣΥÎÎ ÎΡÎÎÎÎÎÎÎÎÎΤÎÎ, ÎÎÎÎÎÎΤÎÎÎ, ÎÎ ÎÎÎÎΣÎΣ ÎÎÎÎ¥ÎΣÎÎΣ ÎÎÎ ÎΡÎΥΣÎÎÎΤÎΤÎΣ ÎÎÎ ÎÎΤÎÎÎÎÎÎΤÎΤÎΣ. ÎÎ ÎÎÎΣÎÎÎ ÎΤΠÎÎÎÎÎ¥ÎÎΣ ÎΠΠΤÎÎ Î ÎÎÎΤÎΤΠÎÎΠΤÎÎ ÎÎ ÎÎÎΣΠΤÎÎ¥ ΠΡÎÎΡÎÎÎÎΤÎΣ ÎÎÎÎÎÎ ÎÎ ÎÎÎÎÎÎΡÎÎ¥ ÎΣÎΣ. ÎÎΠΤΠΠΡÎÎΡÎÎÎÎ ÎÎ ÎÎÎÎΧÎÎÎ ÎÎÎΤΤΩÎÎΤÎÎÎ, ΤΠÎÎΣΤÎΣ ÎÎΩΠΤΩΠÎΡÎÎΣÎΩΠÎÎ ÎΣÎÎÎ¥ÎΣ Î ÎÎÎΡÎΩΣÎΣ ÎÎΡΥÎÎÎ ÎΣÎΣ.
-
- 12. ΣΠÎÎÎÎÎ Î ÎΡÎΠΤΩΣÎ, ÎÎΤÎΣ ÎÎÎ ÎÎ ÎÎΤÎÎΤÎÎ ÎΠΠΤÎÎ ÎΣΧΥÎΥΣΠÎÎÎÎÎÎΣÎÎ Î ÎΧÎΠΣΥÎΦΩÎÎÎÎÎ ÎΡÎΠΤΩΣ, Î ÎÎΤÎΧÎΣ ΤΩΠΠÎÎÎ¥ÎÎΤÎÎΩΠÎÎÎÎÎΩÎÎΤΩÎ, Î ÎÎ ÎÎÎÎÎÎ ÎΤΠÎÎÎÎ ÎÎÎÎΣ ΤΠÎÎ ÎÎÎ ÎÎ ÎΡÎÎ ÎΠΤΡÎÎ ÎÎ ÎÎÎΣÎÎ Î/ÎÎÎ ÎÎ ÎÎÎÎÎÎÎÎÎÎÎΠΤΠΠΡÎÎΡÎÎÎÎ ÎΠΩΣ ΠΡÎÎÎÎÎ ÎΤÎÎ Î ÎΡÎÎ ÎÎΩ, ÎÎΠΦÎΡÎΤÎΠΩΣ ΥΠÎÎ¥ÎÎ¥ÎÎΣ ÎÎ ÎÎÎÎΤΠΣÎΣ ÎÎÎ ÎÎÎÎÎΣ, ΣΥÎÎ ÎΡÎÎÎÎÎÎÎÎÎÎÎΩΠÎÎΩΠΤΩΠÎÎÎÎÎΩÎ, ÎÎÎÎÎΩÎ, ΣΥÎΠΤΩÎÎΤÎÎΩΠΠΣΥÎÎÎ ÎÎÎÎÎÎ¥ÎΩΠÎÎÎÎΩΠΠÎÎ¥ ÎÎÎÎΧÎΤÎÎ ÎΠΠΡÎÎΥΨÎΥΠÎÎÎΩ ΤÎΣ ΧΡÎΣÎΣ ΠΤÎΣ ÎÎÎ¥ÎÎÎÎÎΣ ΧΡÎΣÎΣ ΤÎÎ¥ ΠΡÎÎΡÎÎÎÎΤÎΣ (ΣΥÎÎ ÎΡÎÎÎÎÎÎÎÎÎÎÎΩÎ, ÎÎÎÎÎÎΤÎÎÎ, ΤÎΣ ÎΠΩÎÎÎÎΣ ÎÎÎÎÎÎÎΩΠΠΤÎΣ ÎÎÎÎÎΩΣÎΣ ΤÎΣ ÎÎΡÎÎÎÎÎΣ ΤÎΥΣ, Î ÎΠΩÎÎÎÎΣ Î ÎÎ¥ ÎÎ ÎÎÎÎ ÎÎ Î ÎΣÎΣ Î ÎΠΠΤΡÎΤΠÎÎÎÎ, Î ÎÎÎ¥ÎÎÎÎÎΣ ΤÎÎ¥ ΠΡÎÎΡÎÎÎÎΤÎΣ ÎÎ ÎÎÎΤÎΥΡÎÎΣÎÎ ÎÎ ÎÎÎΠΠΡÎÎΡÎÎÎÎΤÎ), ÎΣΤΩ ÎÎÎ ÎÎ Î ÎÎΤÎΧÎΣ ÎΥΤÎΣ ΠΤΠÎÎÎÎ ÎÎÎÎΣ ÎΧÎÎ ÎÎÎÎÎΡΩÎÎÎ ÎÎΠΤΠÎÎÎÎΧÎÎÎÎΠΤÎΤÎÎΩΠÎÎÎÎΩÎ.
-
-
- ΤÎÎÎΣ ΤΩΠÎΡΩΠÎÎΠΤΩΠΣΥÎÎÎÎΩÎ
-
-
- ΤÏÏÏÎ¿Ï ÎµÏαÏÎ¼Î¿Î³Î®Ï ÏÏν ÏÏÏν ÏÏα νÎα Î ÏογÏάμμαÏα
-
- Îάν αναÏÏÏÏÏεÏε Îνα νÎο ÏÏÏγÏαμμα και θÎλεÏε να ÎÏει Ïη μεγαλÏÏεÏη δÏ
ναÏή
-ÏÏήÏη αÏÏ Ïο κοινÏ, ο καλÏÏεÏÎ¿Ï ÏÏÏÏÎ¿Ï Î½Î± εÏιÏÏÏεÏε αÏ
ÏÏ ÎµÎ¯Î½Î±Î¹ να Ïο ÏαÏακÏηÏίÏεÏε ελεÏθεÏο λογιÏμικÏ, Ïο οÏοίο Ïλοι θα μÏοÏοÏν να αναδιανÎμοÏ
ν και να ÏÏοÏοÏοιοÏν Ï
ÏÏ ÏοÏ
Ï ÏÏοÏ
Ï Î±Ï
ÏοÏÏ.
- Îια να γίνει αÏ
ÏÏ, ÏÏ
νάÏÏε Ïο ακÏλοÏ
θο ÏημείÏμα ÏÏο ÏÏÏγÏαμμα. Îίναι Ïιο αÏÏαλÎÏ Î½Î± Ïο ÏÏ
νάÏεÏε ÏÏην αÏÏή κάθε αÏÏείοÏ
ÏηγαίοÏ
κÏδικα, ÏÏÏε να ÏÎÏεÏαι Ïιο αÏοÏελεÏμαÏικά η εξαίÏεÏη ÏÎ·Ï ÎµÎ³Î³ÏηÏÎ·Ï - και κάθε αÏÏείο θα ÏÏÎÏει να διαθÎÏει ÏοÏ
λάÏιÏÏον Ïη γÏαμμή "ÏνεÏ
μαÏÎ¹ÎºÎ®Ï Î¹Î´Î¹Î¿ÎºÏηÏίαÏ" και Îναν δείκÏη για Ïο ÏοÏ
βÏίÏκεÏαι Ïο ÏλήÏÎµÏ ÏημείÏμα.
-
- <μια γÏαμμή ÏοÏ
ÏαÏÎÏει Ïο Ïνομα ÏοÏ
ÏÏογÏάμμαÏÎ¿Ï ÎºÎ±Î¹ μια ÏÏνÏομη ÏεÏιγÏαÏή ÏÎ·Ï Î»ÎµÎ¹ÏοÏ
ÏÎ³Î¯Î±Ï ÏοÏ
.>
- Copyright (C) <ÎÏοÏ> <Ïνομα δημιοÏ
ÏγοÏ>
-
- Το ÏÏÏγÏαμμα αÏ
ÏÏ ÎµÎ¯Î½Î±Î¹ ελεÏθεÏο λογιÏμικÏ. ÎÏιÏÏÎÏεÏαι η αναδιανομή ή/και ÏÏοÏοÏοίηÏή ÏοÏ
Ï
ÏÏ ÏοÏ
Ï ÏÏοÏ
Ï ÏÎ·Ï ÎÎµÎ½Î¹ÎºÎ®Ï ÎÎ´ÎµÎ¹Î±Ï ÎημÏÏÎ¹Î±Ï Î§ÏήÏÎ·Ï GNU (GNU General Public License), ÏÏÏÏ Î±Ï
Ïή δημοÏιεÏεÏαι αÏÏ Ïο ÎδÏÏ
μα ÎλεÏθεÏοÏ
ÎογιÏÎ¼Î¹ÎºÎ¿Ï (Free Software Foundation) - είÏε ÏÎ·Ï ÎκδοÏÎ·Ï 2 ÏÎ·Ï ÎδειαÏ, είÏε (καÏ' εÏιλογήν) οÏοιαÏδήÏοÏε μεÏαγενÎÏÏεÏÎ·Ï ÎκδοÏηÏ.
-
- Το ÏÏÏγÏαμμα αÏ
ÏÏ Î´Î¹Î±Î½ÎμεÏαι με Ïην ελÏίδα ÏÏι θα αÏοδειÏθεί ÏÏήÏιμο, ÏαÏÏλα αÏ
Ïά ΧΩΡÎΣ ÎÎÎÎÎ ÎÎÎÎ¥ÎΣΠ- ÏÏÏÎ¯Ï Î±ÎºÏμη και Ïην ÎμμεÏη εγγÏηÏη ÎÎÎ ÎΡÎΥΣÎÎÎΤÎΤÎΣ ή ÎÎΤÎÎÎÎÎÎΤÎΤÎΣ. Îια ÏεÏιÏÏÏÏεÏÎµÏ Î»ÎµÏÏομÎÏÎµÎ¹ÎµÏ Î±Î½Î±ÏÏÎξÏε ÏÏη Îενική Îδεια ÎημÏÏÎ¹Î±Ï Î§ÏήÏÎ·Ï GNU (GNU General Public License).
-
- Îα ÏÏÎÏει να ÎÏεÏε λάβει Îνα ανÏίγÏαÏο ÏÎ·Ï ÎÎµÎ½Î¹ÎºÎ®Ï ÎÎ´ÎµÎ¹Î±Ï ÎημÏÏÎ¹Î±Ï Î§ÏήÏÎ·Ï GNU (GNU General Public License) μαζί με αÏ
ÏÏ Ïο ÏÏÏγÏαμμα. Îάν ÏÏι, εÏικοινÏνήÏÏε γÏαÏÏÏÏ Î¼Îµ Ïο ÎδÏÏ
μα ÎλεÏθεÏοÏ
ÎογιÏÎ¼Î¹ÎºÎ¿Ï (Free Software Foundation), Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-ÎÏίÏηÏ, ÏÏοÏθÎÏÏε ÏληÏοÏοÏÎ¯ÎµÏ Î³Î¹Î± Ïον ÏÏÏÏο με Ïον οÏοίο μÏοÏεί κάÏÎ¿Î¹Î¿Ï Î½Î± εÏικοινÏνήÏει μαζί ÏÎ±Ï Î¼ÎÏÏ Î·Î»ÎµÎºÏÏÎ¿Î½Î¹ÎºÎ¿Ï Î® ÏαÏαδοÏÎ¹Î±ÎºÎ¿Ï ÏαÏÏ
δÏομείοÏ
.
-
-Îάν Ïο ÏÏÏγÏαμμα είναι αλληλεÏιδÏαÏÏικÏ, ÏÏονÏίÏÏε ÏÏÏε καÏά Ïην εκκίνηÏή ÏοÏ
Ïε αλληλεÏιδÏαÏÏική λειÏοÏ
Ïγία να εμÏανίζει Îνα ÏÏνÏομο ÏημείÏμα ÏÏÏÏ Ïο ÏαÏακάÏÏ:
-
- <Îνομα_ÏÏογÏάμμαÏοÏ> ÎκδοÏη <αÏιθμÏÏ_ÎκδοÏηÏ>, Copyright (C) <ÎÏοÏ> <Ïνομα_δημιοÏ
ÏγοÏ>
- Το <Ïνομα_ÏÏογÏάμμαÏοÏ> διανÎμεÏαι ΧΩΡÎΣ ÎÎÎÎÎ ÎÎÎÎ¥ÎΣÎ. Îια λεÏÏομÎÏÎµÎ¹ÎµÏ ÏληκÏÏολογήÏÏε `show w'.
- Το λογιÏÎ¼Î¹ÎºÏ Î±Ï
ÏÏ ÎµÎ¯Î½Î±Î¹ ελεÏθεÏο, και η αναδιανομή ÏοÏ
είναι εÏ
ÏÏÏÏδεκÏη Ï
ÏÏ ÏÏ
γκεκÏιμÎνοÏ
Ï ÏÏοÏ
Ï. ΠληκÏÏολογήÏÏε `show c' για λεÏÏομÎÏειεÏ.
-
-Îι Ï
ÏοθεÏικÎÏ ÎµÎ½ÏολÎÏ `show w' και `show c' θα ÏÏÎÏει να ÏÏοβάλλοÏ
ν ÏÎ¹Ï Î±Î½ÏίÏÏοιÏÎµÏ ÎµÎ½ÏÏηÏÎµÏ ÏÎ·Ï ÎÎµÎ½Î¹ÎºÎ®Ï ÎÎ´ÎµÎ¹Î±Ï ÎημÏÏÎ¹Î±Ï Î§ÏήÏηÏ. ÎÏÏαλÏÏ Î¿Î¹ ενÏολÎÏ ÏοÏ
ÏÏηÏιμοÏοιείÏε δεν είναι αÏαÏαίÏηÏο να ονομάζονÏαι `show w' και `show c'. ÎÏοÏοÏν να είναι ακÏμη και ÏÏνδεÏμοι ÏοÏ
ενεÏγοÏοιοÏνÏαι με ÏάÏημα ÏοÏ
ÏονÏÎ¹ÎºÎ¹Î¿Ï Î® ÏÏοιÏεία μενοÏ--οÏιδήÏοÏε ÏαιÏιάζει με Ïο ÏÏÏγÏαμμά ÏαÏ.
-
-Îάν κÏίνεÏε αÏαÏαίÏηÏο, θα ÏÏÎÏει εÏίÏÎ·Ï Î½Î± ζηÏήÏεÏε αÏÏ Ïον εÏγοδÏÏη ÏÎ±Ï (εάν εÏγάζεÏÏε ÏÏ ÏÏογÏαμμαÏιÏÏήÏ) ή Ïη ÏÏολή ÏαÏ, εάν Ï
ÏάÏÏοÏ
ν, να Ï
ÏογÏάÏοÏ
ν μια "δήλÏÏη αÏοκήÏÏ
Î¾Î·Ï ÏνεÏ
μαÏικÏν δικαιÏμάÏÏν" (copyright disclaimer) για Ïο ÏÏÏγÏαμμα.
-ÎÏοÏείÏε να ακολοÏ
θήÏεÏε Ïο ÏαÏακάÏÏ Î´ÎµÎ¯Î³Î¼Î±, ÏÏ
μÏληÏÏνονÏÎ±Ï Ïα ονÏμαÏα:
-
- Î <εÏÏνÏ
μία_εÏαιÏίαÏ/ÏÏολήÏ> αÏοκηÏÏÏÏει οÏοιοδήÏοÏε δικαίÏμα ÏνεÏ
μαÏÎ¹ÎºÎ®Ï Î¹Î´Î¹Î¿ÎºÏηÏÎ¯Î±Ï ÎµÏί ÏοÏ
ÏÏογÏάμμαÏÎ¿Ï <Ïνομα_ÏÏογÏάμμαÏοÏ>', Ïο οÏοίο αÏοÏελεί δημιοÏ
Ïγία ÏοÏ
<Ïνομα_δημιοÏ
ÏγοÏ>.
-
- <Ï
ÏογÏαÏή_εκÏÏοÏÏÏοÏ
_εÏαιÏίαÏ/ÏÏολήÏ>, <ημεÏομηνία, ÎÏοÏ>
-
-
-Î ÏαÏοÏÏα Îενική Îδεια ÎημÏÏÎ¹Î±Ï Î§ÏήÏÎ·Ï Î´ÎµÎ½ εÏιÏÏÎÏει Ïην ενÏÏμάÏÏÏη ÏοÏ
ÏÏογÏάμμαÏÏÏ ÏÎ±Ï Ïε ιδιÏκÏηÏα ÏÏογÏάμμαÏα. Îάν Ïο ÏÏÏγÏαμμά ÏÎ±Ï Î±ÏοÏελεί βιβλιοθήκη Ï
ÏοÏοÏ
ÏίναÏ, θα είναι ενδεÏομÎνÏÏ ÏÏηÏιμÏÏεÏο να εÏιÏÏÎÏεÏε ÏÏνδεÏη ιδιÏκÏηÏÏν εÏαÏμογÏν με Ïη βιβλιοθήκη. Îάν ÏνÏÏÏ Î±Ï
ÏÏ ÎµÏιθÏ
μείÏε, ÏÏηÏιμοÏοιήÏÏε Ïη Îενική Îδεια ÎημÏÏÎ¹Î±Ï Î§ÏήÏÎ·Ï ÎÎ¹Î²Î»Î¹Î¿Î¸Î®ÎºÎ·Ï GNU (GNU Library General Public License) ανÏί ÏÎ·Ï ÏαÏοÏÏÎ±Ï ÎδειαÏ.</translation>
- </message>
- <message>
<source>Credits</source>
<translation>ÎÏÏημα</translation>
</message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>ID ÏοÏ
Planète Sankoré για Ïο εξαγÏμενο αÏÏείο</translation>
+ </message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Îι Î¬Î´ÎµÎ¹ÎµÏ ÎµÎ¯Î½Î±Î¹ ÏÏα αγγλικά ÏÏ Îνδειξη ÏεβαÏμοÏ
ÏÎ·Ï ÎµÏίÏημα και νÏμιμα ÎγκÏ
ÏÎ·Ï Î¼ÎµÏάÏÏαÏηÏ.</span></p></td></tr></table></body></html></translation>
+ <source>Restore credentials on reboot </source>
+ <translation>ÎÏαναÏοÏά ÏιÏÏοÏοιηÏικÏν με Ïην εÏανεκκίνηÏη</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Start up tips</source>
+ <translation>Î¥ÏÎ¿Î´ÎµÎ¯Î¾ÎµÎ¹Ï ÎºÎ±Ïά Ïην ÎναÏξη</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
+ <message>
+ <source>Show start up tips</source>
+ <translation>ÎμÏάνιÏη Ï
ÏοδείξεÏν καÏά Ïην ÎναÏξη</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></translation>
+ <message>
+ <source>Language</source>
+ <translation>ÎλÏÏÏα</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>ÎÏιλογή γλÏÏÏαÏ</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>ΠνÎα γλÏÏÏα θα ÏοÏÏÏθεί με Ïην εÏÏμενη εÏανεκκίνηÏη ÏοÏ
ÏÏογÏάμμαÏοÏ</translation>
</message>
<message utf8="true">
- <source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <source>Close Open-Sankoré</source>
+ <translation>ÎλείÏιμο ÏοÏ
Open-Sankoré</translation>
</message>
<message>
- <source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
- <message utf8="true">
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_en.ts b/Sankore-3.1/resources/i18n/sankore_en.ts
index 8529bad..850bdde 100644
--- a/Sankore-3.1/resources/i18n/sankore_en.ts
+++ b/Sankore-3.1/resources/i18n/sankore_en.ts
@@ -392,14 +392,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation type="unfinished"></translation>
</message>
@@ -481,6 +473,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -688,14 +681,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Web Trap</source>
<translation type="unfinished"></translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,109 +1010,171 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Size:</source>
+ <source>Alpha:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Close</source>
+ <source>Geometry:</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBDesktopPalette</name>
<message>
- <source>Capture Part of the Screen</source>
+ <source>Width: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Capture the Screen</source>
+ <source>Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show the stylus palette</source>
+ <source>Keep proportions</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show Board on Secondary Screen</source>
+ <source>Mode:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show Desktop on Secondary Screen</source>
+ <source>Preview:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show Open-Sankore</source>
+ <source>Close cache</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>UBDocumentController</name>
+ <name>UBCreateLinkLabel</name>
<message>
- <source>New Folder</source>
+ <source><drop content></source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Page %1</source>
+ <source>Images are not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add Folder of Images</source>
+ <source>Cannot display data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add Images</source>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add Pages from File</source>
+ <source>Add Link to Page</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Duplicating Document %1</source>
+ <source>Add Link to a Web page</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Document %1 copied</source>
+ <source>Drag and drop the audio file from the library in this box</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove Page</source>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDesktopPalette</name>
+ <message>
+ <source>Capture Part of the Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove Document</source>
+ <source>Capture the Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Are you sure you want to remove the document '%1'?</source>
+ <source>Show the stylus palette</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Empty Trash</source>
+ <source>Show Board on Secondary Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Are you sure you want to empty trash?</source>
+ <source>Show Desktop on Secondary Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emptying trash</source>
+ <source>Show Open-Sankore</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>UBDocumentController</name>
<message>
- <source>Emptied trash</source>
+ <source>New Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove Folder</source>
+ <source>Page %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
+ <source>Add Folder of Images</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No document selected!</source>
+ <source>Add Images</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add Pages from File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duplicating Document %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Document %1 copied</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove Page</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1159,6 +1243,14 @@
<source>Untitled Documents</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1246,6 +1338,56 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1263,6 +1405,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1331,6 +1572,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1417,6 +1685,10 @@
<source>Object informations</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1499,6 +1771,14 @@
<source>Trash</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1532,6 +1812,22 @@
<source>Visible on Extended Screen</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1547,6 +1843,22 @@
<source>Go to Content Source</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1567,13 +1879,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1632,214 +1937,357 @@
<source>Open-Sankore (*.ubz)</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBImportImage</name>
+</context>
+<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBImportImage</name>
+ <message>
+ <source>Image Format (</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBImportPDF</name>
+ <message>
+ <source>Portable Document Format (*.pdf)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PDF import failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Importing page %1 of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublisher</name>
+ <message>
+ <source>Error while publishing video to intranet (%1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Publishing to Intranet in progress %1 %</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublishingDialog</name>
+ <message>
+ <source>Publish</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBKeyboardPalette</name>
+ <message>
+ <source>Enter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBMainWindow</name>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBMessagesDialog</name>
+ <message>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBNetworkAccessManager</name>
+ <message>
+ <source><qt>Enter username and password for "%1" at %2</qt></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to log to Proxy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SSL Errors:
+
+%1
+
+%2
+
+Do you want to ignore these errors for this host?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBPersistenceManager</name>
+ <message>
+ <source>(copy)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Document Repository Loss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBPlatformUtils</name>
+ <message>
+ <source>English</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBPodcastController</name>
+ <message>
+ <source>Failed to start encoder ...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No Podcast encoder available ...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Part %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>on your desktop ...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>in folder %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Podcast created %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Podcast recording error (%1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default Audio Input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No Audio Recording</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <source>Image Format (</source>
+ <source>Small</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBImportPDF</name>
<message>
- <source>Portable Document Format (*.pdf)</source>
+ <source>Medium</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>PDF import failed.</source>
+ <source>Full</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Importing page %1 of %2</source>
+ <source>Publish to Intranet</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBIntranetPodcastPublisher</name>
<message>
- <source>Error while publishing video to intranet (%1)</source>
+ <source>Publish to Youtube</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Publishing to Intranet in progress %1 %</source>
+ <source>Sankore Cast</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>UBIntranetPodcastPublishingDialog</name>
+ <name>UBPreferencesController</name>
<message>
- <source>Publish</source>
+ <source>version: </source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBKeyboardPalette</name>
<message>
- <source>Enter</source>
+ <source>Marker is pressure sensitive</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBMainWindow</name>
<message>
- <source>Yes</source>
+ <source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
+ <source>Arabic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ok</source>
+ <source>Bulgarian</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBMessagesDialog</name>
<message>
- <source>Close</source>
+ <source>Catalan</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBNetworkAccessManager</name>
<message>
- <source><qt>Enter username and password for "%1" at %2</qt></source>
+ <source>Czech</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to log to Proxy</source>
+ <source>Danish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>SSL Errors:
-
-%1
-
-%2
-
-Do you want to ignore these errors for this host?</source>
+ <source>German</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Yes</source>
+ <source>Greek</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
+ <source>English</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPersistenceManager</name>
<message>
- <source>(copy)</source>
+ <source>English UK</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Document Repository Loss</source>
+ <source>Spanish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
+ <source>French</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPlatformUtils</name>
<message>
- <source>English</source>
+ <source>Swiss French</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Russian</source>
+ <source>Italian</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>German</source>
+ <source>Hebrew</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>French</source>
+ <source>Japanese</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Swiss French</source>
+ <source>Korean</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPodcastController</name>
<message>
- <source>Failed to start encoder ...</source>
+ <source>Malagasy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No Podcast encoder available ...</source>
+ <source>Norwegian</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Part %1</source>
+ <source>Dutch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>on your desktop ...</source>
+ <source>Polish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>in folder %1</source>
+ <source>Romansh</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Podcast created %1</source>
+ <source>Romanian</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Podcast recording error (%1)</source>
+ <source>Russian</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Default Audio Input</source>
+ <source>Slovak</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No Audio Recording</source>
+ <source>Swedish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Small</source>
+ <source>Turkish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Medium</source>
+ <source>Chinese</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Full</source>
+ <source>Chinese Simplified</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Publish to Intranet</source>
+ <source>Chinese Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Publish to Youtube</source>
+ <source>Corsican</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sankore Cast</source>
+ <source>Hindi</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPreferencesController</name>
<message>
- <source>version: </source>
+ <source>Portuguese</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Marker is pressure sensitive</source>
+ <source>Basque</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1883,6 +2331,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2098,13 +2557,13 @@ Do you want to ignore these errors for this host?</source>
</message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Web</source>
+ <source>Embed </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2451,6 +2910,49 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2722,22 +3224,10 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>zlib</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>xpdf</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Network</source>
<translation type="unfinished"></translation>
</message>
@@ -2790,447 +3280,6 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Credits</source>
<translation type="unfinished"></translation>
</message>
@@ -3243,89 +3292,50 @@ DAMAGES.
<translation type="unfinished"></translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <source>Start up tips</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
+ <source>Show start up tips</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
<translation type="unfinished"></translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_en_UK.ts b/Sankore-3.1/resources/i18n/sankore_en_UK.ts
index 101744f..06144d3 100644
--- a/Sankore-3.1/resources/i18n/sankore_en_UK.ts
+++ b/Sankore-3.1/resources/i18n/sankore_en_UK.ts
@@ -189,6 +189,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
@@ -708,14 +709,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Web Trap</source>
<translation type="unfinished"></translation>
</message>
@@ -736,14 +729,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation type="unfinished"></translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,109 +1010,171 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Size:</source>
+ <source>Alpha:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Close</source>
+ <source>Geometry:</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBDesktopPalette</name>
<message>
- <source>Capture Part of the Screen</source>
+ <source>Width: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Capture the Screen</source>
+ <source>Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show the stylus palette</source>
+ <source>Keep proportions</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show Board on Secondary Screen</source>
+ <source>Mode:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show Desktop on Secondary Screen</source>
+ <source>Preview:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Show Open-Sankore</source>
+ <source>Close cache</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>UBDocumentController</name>
+ <name>UBCreateLinkLabel</name>
<message>
- <source>New Folder</source>
+ <source><drop content></source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Page %1</source>
+ <source>Images are not accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add Folder of Images</source>
+ <source>Cannot display data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add Images</source>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Add Pages from File</source>
+ <source>Add Link to Page</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Duplicating Document %1</source>
+ <source>Add Link to a Web page</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Document %1 copied</source>
+ <source>Drag and drop the audio file from the library in this box</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove Page</source>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDesktopPalette</name>
+ <message>
+ <source>Capture Part of the Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove Document</source>
+ <source>Capture the Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Are you sure you want to remove the document '%1'?</source>
+ <source>Show the stylus palette</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Empty Trash</source>
+ <source>Show Board on Secondary Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Are you sure you want to empty trash?</source>
+ <source>Show Desktop on Secondary Screen</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Emptying trash</source>
+ <source>Show Open-Sankore</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>UBDocumentController</name>
<message>
- <source>Emptied trash</source>
+ <source>New Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Remove Folder</source>
+ <source>Page %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
+ <source>Add Folder of Images</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No document selected!</source>
+ <source>Add Images</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add Pages from File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duplicating Document %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Document %1 copied</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove Page</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1159,6 +1243,14 @@
<source>Untitled Documents</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1246,6 +1338,56 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1263,6 +1405,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1331,6 +1572,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1417,6 +1685,10 @@
<source>Object informations</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1499,6 +1771,14 @@
<source>Trash</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1532,6 +1812,22 @@
<source>Visible on Extended Screen</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1547,6 +1843,22 @@
<source>Go to Content Source</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1567,13 +1879,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1632,214 +1937,357 @@
<source>Open-Sankore (*.ubz)</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBImportImage</name>
+</context>
+<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBImportImage</name>
+ <message>
+ <source>Image Format (</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBImportPDF</name>
+ <message>
+ <source>Portable Document Format (*.pdf)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>PDF import failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Importing page %1 of %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublisher</name>
+ <message>
+ <source>Error while publishing video to intranet (%1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Publishing to Intranet in progress %1 %</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublishingDialog</name>
+ <message>
+ <source>Publish</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBKeyboardPalette</name>
+ <message>
+ <source>Enter</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBMainWindow</name>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBMessagesDialog</name>
+ <message>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBNetworkAccessManager</name>
+ <message>
+ <source><qt>Enter username and password for "%1" at %2</qt></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Failed to log to Proxy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>SSL Errors:
+
+%1
+
+%2
+
+Do you want to ignore these errors for this host?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBPersistenceManager</name>
+ <message>
+ <source>(copy)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Document Repository Loss</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBPlatformUtils</name>
+ <message>
+ <source>English</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBPodcastController</name>
+ <message>
+ <source>Failed to start encoder ...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No Podcast encoder available ...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Part %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>on your desktop ...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>in folder %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Podcast created %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Podcast recording error (%1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Default Audio Input</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No Audio Recording</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <source>Image Format (</source>
+ <source>Small</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBImportPDF</name>
<message>
- <source>Portable Document Format (*.pdf)</source>
+ <source>Medium</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>PDF import failed.</source>
+ <source>Full</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Importing page %1 of %2</source>
+ <source>Publish to Intranet</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBIntranetPodcastPublisher</name>
<message>
- <source>Error while publishing video to intranet (%1)</source>
+ <source>Publish to Youtube</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Publishing to Intranet in progress %1 %</source>
+ <source>Sankore Cast</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>UBIntranetPodcastPublishingDialog</name>
+ <name>UBPreferencesController</name>
<message>
- <source>Publish</source>
+ <source>version: </source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBKeyboardPalette</name>
<message>
- <source>Enter</source>
+ <source>Marker is pressure sensitive</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBMainWindow</name>
<message>
- <source>Yes</source>
+ <source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
+ <source>Arabic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Ok</source>
+ <source>Bulgarian</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBMessagesDialog</name>
<message>
- <source>Close</source>
+ <source>Catalan</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBNetworkAccessManager</name>
<message>
- <source><qt>Enter username and password for "%1" at %2</qt></source>
+ <source>Czech</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Failed to log to Proxy</source>
+ <source>Danish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>SSL Errors:
-
-%1
-
-%2
-
-Do you want to ignore these errors for this host?</source>
+ <source>German</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Yes</source>
+ <source>Greek</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No</source>
+ <source>English</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPersistenceManager</name>
<message>
- <source>(copy)</source>
+ <source>English UK</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Document Repository Loss</source>
+ <source>Spanish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
+ <source>French</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPlatformUtils</name>
<message>
- <source>English</source>
+ <source>Swiss French</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Russian</source>
+ <source>Italian</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>German</source>
+ <source>Hebrew</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>French</source>
+ <source>Japanese</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Swiss French</source>
+ <source>Korean</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPodcastController</name>
<message>
- <source>Failed to start encoder ...</source>
+ <source>Malagasy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No Podcast encoder available ...</source>
+ <source>Norwegian</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Part %1</source>
+ <source>Dutch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>on your desktop ...</source>
+ <source>Polish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>in folder %1</source>
+ <source>Romansh</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Podcast created %1</source>
+ <source>Romanian</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Podcast recording error (%1)</source>
+ <source>Russian</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Default Audio Input</source>
+ <source>Slovak</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>No Audio Recording</source>
+ <source>Swedish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Small</source>
+ <source>Turkish</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Medium</source>
+ <source>Chinese</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Full</source>
+ <source>Chinese Simplified</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Publish to Intranet</source>
+ <source>Chinese Traditional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Publish to Youtube</source>
+ <source>Corsican</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Sankore Cast</source>
+ <source>Hindi</source>
<translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPreferencesController</name>
<message>
- <source>version: </source>
+ <source>Portuguese</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Marker is pressure sensitive</source>
+ <source>Basque</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1883,6 +2331,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2098,13 +2557,13 @@ Do you want to ignore these errors for this host?</source>
</message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Web</source>
+ <source>Embed </source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2451,6 +2910,49 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2722,22 +3224,10 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>zlib</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>xpdf</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Network</source>
<translation type="unfinished"></translation>
</message>
@@ -2790,447 +3280,6 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Credits</source>
<translation type="unfinished"></translation>
</message>
@@ -3243,89 +3292,50 @@ DAMAGES.
<translation type="unfinished"></translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <source>Start up tips</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
+ <source>Show start up tips</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
<translation type="unfinished"></translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_es.ts b/Sankore-3.1/resources/i18n/sankore_es.ts
index f5cee76..a68879b 100644
--- a/Sankore-3.1/resources/i18n/sankore_es.ts
+++ b/Sankore-3.1/resources/i18n/sankore_es.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Favorito</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>Configurar grabación de podcast</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Captura de elemento Flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Capturar contenido Flash</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Captura de contenido web</translation>
</message>
@@ -728,14 +721,6 @@
<translation>Capturar una ventana</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Integrar contenido web</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Capturar contenido web integrable</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>Mostrar en pantalla</translation>
</message>
@@ -797,7 +782,7 @@
</message>
<message>
<source>Import old Sankore or Uniboard documents</source>
- <translation>Importar viejos documentos de Sankore o Uniboard</translation>
+ <translation>Importar documentos antiguos de Sankore o Uniboard</translation>
</message>
<message>
<source>Group items</source>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>Agrupar</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Favorito</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -859,7 +881,7 @@
</message>
<message>
<source>Save username and password for future use</source>
- <translation>Guardar nombre de usuario y contraseña para uso futuro</translation>
+ <translation>Importar documentos antiguos de Sankore o Uniboard</translation>
</message>
</context>
<context>
@@ -870,7 +892,7 @@
</message>
<message>
<source>Content is not supported in destination format.</source>
- <translation>El formato de destino no permite este contenido</translation>
+ <translation>El formato de destino no permite este contenido.</translation>
</message>
<message>
<source>Remove Page</source>
@@ -878,7 +900,7 @@
</message>
<message>
<source>Are you sure you want to remove 1 page from the selected document '%0'?</source>
- <translation>¿Está seguro de que quiere eliminar 1 página del documento seleccionado.'%0?</translation>
+ <translation>¿Está seguro que desea eliminar 1 página del documento seleccionado '%0'?</translation>
</message>
</context>
<context>
@@ -988,12 +1010,110 @@
<translation>Forma:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Tamaño:</translation>
+ <source>Alpha:</source>
+ <translation></translation>
</message>
<message>
- <source>Close</source>
- <translation>Cerrar</translation>
+ <source>Geometry:</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Ancho:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Altura:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Mantener proporciones</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Modalidad:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Vista previa:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Cerrar cache</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><soltar contenido></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>No se aceptan imágenes</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>No se puede mostrar la informaciòn</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>El archivo no se reconoce como archivo de audio</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Reproducir un archivo de audio</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Añadir enlace a la página</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Añadir enlace a una página Web</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Arrastre y suelte el archovo de audio desde la biblioteca en este cuadro</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Página siguiente</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Página anterior</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>TÃtulo de página</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Ãltima página</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Número de página</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Inserte texto url aquÃ</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>Eliminar página</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Eliminar documento</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>¿Está seguro de que desea eliminar el documento '%1'?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Vaciar papelera</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>¿Está seguro de que desea vaciar la papelera?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Vaciando papelera</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Papelera vaciada</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Eliminar carpeta</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>¿Está seturo de que desea eliminar la carpeta '%1' y todo su contenido?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>¡Ningún documento seleccionado!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Abrir archivo compatible</translation>
</message>
@@ -1144,13 +1228,13 @@
<message numerus="yes">
<source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
<translation>
- <numerusform>¿Está seguro de que desea eliminar %n página(s) del documento seleccionado '%1'?</numerusform>
- <numerusform></numerusform>
+ <numerusform>¿Está seguro que desea eliminar %n página del documento seleccionado '%1'?</numerusform>
+ <numerusform>¿Está seguro que desea eliminar %n página(s) del documento seleccionado '%1'?</numerusform>
</translation>
</message>
<message>
<source>Title page</source>
- <translation>Portada</translation>
+ <translation>TÃtulo de página</translation>
</message>
<message>
<source>Folder does not contain any image files</source>
@@ -1160,6 +1244,14 @@
<source>Untitled Documents</source>
<translation>Documentos sin tÃtulo</translation>
</message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1193,11 +1285,11 @@
</message>
<message>
<source>Import successful.</source>
- <translation>Importación correcta</translation>
+ <translation>Importación satisfactoria.</translation>
</message>
<message>
<source>Import of file %1 successful.</source>
- <translation>El archivo %1 se ha importado correctamente</translation>
+ <translation>El archivo %1 se ha importado correctamente.</translation>
</message>
<message>
<source>Importing file %1</source>
@@ -1212,7 +1304,7 @@
</message>
<message>
<source>Title page</source>
- <translation>Portada</translation>
+ <translation>TÃtulo de página</translation>
</message>
</context>
<context>
@@ -1247,6 +1339,57 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation></translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Mis documentos</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modelos</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Papelera</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Documentos sin tÃtulo</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Copiando página %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 página copiada</numerusform>
+ <numerusform>%1 páginas copiadas</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1259,12 +1402,111 @@
<message numerus="yes">
<source>%1 pages copied</source>
<translation>
+ <numerusform>%1 página copiada</numerusform>
<numerusform>%1 páginas copiadas</numerusform>
- <numerusform></numerusform>
</translation>
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Descarga fallida.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>El servidor remoto rechazó la conexión (el servidor no está aceptando solicitudes)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>El servidor remoto cerró la conexión inesperadamente, antes de que la respuesta fuera recibida y procesada</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>El nombre del host remoto no fue encontrado (nombre de host inválido)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>La conección con el servidor remoto expiró</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>La operación fue cancelada al abortar() o cerrar() antes de que finalizara.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>EL SSL/TLS handshake falló y el canal encriptado no pudo establecerse. La señal sslErrors() debio haber sido emitida.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>La conexión se detuvo debido a la desconexión de la red, sin embargo, el sistema ha iniciado la búsqueda de otro punto de acceso. La solicitud debe reenviarse y será procesada apenas se reestablezca la conexión.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>La conexióon al servidor proxy fue rechazada (el servidor proxy no está aceptando solicitudes)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>El servidor proxy cerró la conexión inesperadamente, antes de que la respuesta fuera recibida y procesada</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>El nombre del host proxy no fue encontrado (nombre de host proxy inválido)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>La conexión del proxy expiró o el proxy no respondió a tiempo a la solicitud enviada</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>El proxy requiere autorización para aceptar la solicitud pero no aceptó ninguna credencial ofrecida (si existen)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>El acceso al contenido remoto fue denegado (similar al error HTTP 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>La operación solicitada en el contenido remoto no es permitida</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>El contenido remoto no fue encontrado en el servidor (similar al error HTTP 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>El servidor remoto requiere autentificación para entregar el contenido pero las credenciales dadas no fueron aceptadas (si existen)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>La solicitud necesitó enviarse de nuevo, pero falló, por ejemplo, porque la información de carga no pudo leerse una segunda vez.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>El acceso a la red API no puede mantener la solicitud porque el protocolo es desconocido</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>La operación solicitada es inválida para este protocolo</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>Se detectó un error desconocido relacionado con la red</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>Se detectó un error desconocido relacionado con el proxy</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>Se detectó un error desconocido relacionado con el contenido remoto</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>Se detectó una ruptura en el protocolo (error de sintáxis, respuestas inválidas o inesperada, etc.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1302,7 +1544,7 @@
</message>
<message>
<source>Export failed.</source>
- <translation>Fallo en la exportación</translation>
+ <translation>Fallo en la exportación.</translation>
</message>
</context>
<context>
@@ -1333,6 +1575,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Falla al exportar...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exportar como archivo UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Exportando documento...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Exportación satisfactoria.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Exportación fallida.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exportar al formato Sankore UBX</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1394,7 +1663,7 @@
</message>
<message>
<source>Export failed.</source>
- <translation>Fallo de la exportación.</translation>
+ <translation>Fallo en la exportación.</translation>
</message>
<message>
<source>Export to Web Browser</source>
@@ -1419,6 +1688,10 @@
<source>Object informations</source>
<translation>Información del objeto</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Añadir</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1501,6 +1774,14 @@
<source>Trash</source>
<translation>Papelera</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Favoritos</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1534,6 +1815,22 @@
<source>Visible on Extended Screen</source>
<translation>Visible en pantalla extendida</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Añadir una acción</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Eliminar enlace a audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Eliminar enlace a página</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Eliminar enlace a web url</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1549,6 +1846,22 @@
<source>Go to Content Source</source>
<translation>Ir a fuente de contenido</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Añadir una acción</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Eliminar enlace a audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Eliminar enlace a página</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Eliminar enlace a web url</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1569,13 +1882,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1636,6 +1942,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (set de documentos) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1725,42 +2038,168 @@ Do you want to ignore these errors for this host?</source>
<translation>Errores SSL: %1 %2 ¿Desea ignorar estos errores para este servidor?</translation>
</message>
<message>
- <source>Yes</source>
- <translation>SÃ</translation>
+ <source>Yes</source>
+ <translation>SÃ</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>No</translation>
+ </message>
+</context>
+<context>
+ <name>UBPersistenceManager</name>
+ <message>
+ <source>(copy)</source>
+ <translation>(copiar)</translation>
+ </message>
+ <message>
+ <source>Document Repository Loss</source>
+ <translation>Pérdida de depósito de documentos</translation>
+ </message>
+ <message>
+ <source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
+ <translation>Sankore ha perdido acceso al depósito de documentos '%1'. Desafortunadamente la aplicación debe cerrarse para evitar daños en los datos. También se podrÃan perder los últimos cambios.</translation>
+ </message>
+</context>
+<context>
+ <name>UBPlatformUtils</name>
+ <message>
+ <source>English</source>
+ <translation>Inglés</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Ruso</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Alemán</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Francés</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Francés-Suizo</translation>
+ </message>
+</context>
+<context>
+ <name>UBPodcastController</name>
+ <message>
+ <source>Failed to start encoder ...</source>
+ <translation>Fallo al iniciar el codificador...</translation>
+ </message>
+ <message>
+ <source>No Podcast encoder available ...</source>
+ <translation>Ningún condificador de Podcast disponible...</translation>
+ </message>
+ <message>
+ <source>Part %1</source>
+ <translation>Parte %1</translation>
+ </message>
+ <message>
+ <source>on your desktop ...</source>
+ <translation>en su escritorio...</translation>
+ </message>
+ <message>
+ <source>in folder %1</source>
+ <translation>en carpeta %1</translation>
+ </message>
+ <message>
+ <source>Podcast created %1</source>
+ <translation>Podcast creado %1</translation>
+ </message>
+ <message>
+ <source>Podcast recording error (%1)</source>
+ <translation>Error en la grabación de podcast (%1)</translation>
+ </message>
+ <message>
+ <source>Default Audio Input</source>
+ <translation>Entrada de audio predeterminada</translation>
+ </message>
+ <message>
+ <source>No Audio Recording</source>
+ <translation>Ninguna grabación de audio</translation>
+ </message>
+ <message>
+ <source>Small</source>
+ <translation>Pequeño</translation>
+ </message>
+ <message>
+ <source>Medium</source>
+ <translation>Medio</translation>
+ </message>
+ <message>
+ <source>Full</source>
+ <translation>Completo</translation>
+ </message>
+ <message>
+ <source>Publish to Intranet</source>
+ <translation>Publicar en Intranet</translation>
+ </message>
+ <message>
+ <source>Publish to Youtube</source>
+ <translation>Publicar en Youtube</translation>
+ </message>
+ <message>
+ <source>Sankore Cast</source>
+ <translation>Presentación Sankore</translation>
+ </message>
+</context>
+<context>
+ <name>UBPreferencesController</name>
+ <message>
+ <source>version: </source>
+ <translation>versión:</translation>
+ </message>
+ <message>
+ <source>Marker is pressure sensitive</source>
+ <translation>El marcador es sensible a la presión</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation>Por defecto</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation></translation>
</message>
<message>
- <source>No</source>
- <translation>No</translation>
+ <source>Catalan</source>
+ <translation></translation>
</message>
-</context>
-<context>
- <name>UBPersistenceManager</name>
<message>
- <source>(copy)</source>
- <translation>(copiar)</translation>
+ <source>Czech</source>
+ <translation></translation>
</message>
<message>
- <source>Document Repository Loss</source>
- <translation>Pérdida de depósito de documentos</translation>
+ <source>Danish</source>
+ <translation></translation>
</message>
<message>
- <source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
- <translation>Sankore ha perdido acceso al depósito de documentos '%1'. Desafortunadamente la aplicación debe cerrarse para evitar daños en los datos. También se podrÃan perder los últimos cambios.</translation>
+ <source>German</source>
+ <translation>Alemán</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation></translation>
</message>
-</context>
-<context>
- <name>UBPlatformUtils</name>
<message>
<source>English</source>
<translation>Inglés</translation>
</message>
<message>
- <source>Russian</source>
- <translation>Ruso</translation>
+ <source>English UK</source>
+ <translation></translation>
</message>
<message>
- <source>German</source>
- <translation>Alemán</translation>
+ <source>Spanish</source>
+ <translation>Español</translation>
</message>
<message>
<source>French</source>
@@ -1770,79 +2209,89 @@ Do you want to ignore these errors for this host?</source>
<source>Swiss French</source>
<translation>Francés-Suizo</translation>
</message>
-</context>
-<context>
- <name>UBPodcastController</name>
<message>
- <source>Failed to start encoder ...</source>
- <translation>Fallo al iniciar el codificador...</translation>
+ <source>Italian</source>
+ <translation></translation>
</message>
<message>
- <source>No Podcast encoder available ...</source>
- <translation>Ningún condificador de Podcast disponible...</translation>
+ <source>Hebrew</source>
+ <translation></translation>
</message>
<message>
- <source>Part %1</source>
- <translation>Parte %1</translation>
+ <source>Japanese</source>
+ <translation></translation>
</message>
<message>
- <source>on your desktop ...</source>
- <translation>en su escritorio...</translation>
+ <source>Korean</source>
+ <translation></translation>
</message>
<message>
- <source>in folder %1</source>
- <translation>en carpeta %1</translation>
+ <source>Malagasy</source>
+ <translation></translation>
</message>
<message>
- <source>Podcast created %1</source>
- <translation>Podcast creado %1</translation>
+ <source>Norwegian</source>
+ <translation></translation>
</message>
<message>
- <source>Podcast recording error (%1)</source>
- <translation>Error en la grabación de podcast (%1)</translation>
+ <source>Dutch</source>
+ <translation></translation>
</message>
<message>
- <source>Default Audio Input</source>
- <translation>Entrada de audio predeterminada</translation>
+ <source>Polish</source>
+ <translation></translation>
</message>
<message>
- <source>No Audio Recording</source>
- <translation>Ninguna grabación de audio</translation>
+ <source>Romansh</source>
+ <translation></translation>
</message>
<message>
- <source>Small</source>
- <translation>Pequeño</translation>
+ <source>Romanian</source>
+ <translation></translation>
</message>
<message>
- <source>Medium</source>
- <translation>Medio</translation>
+ <source>Russian</source>
+ <translation>Ruso</translation>
</message>
<message>
- <source>Full</source>
- <translation>Completo</translation>
+ <source>Slovak</source>
+ <translation></translation>
</message>
<message>
- <source>Publish to Intranet</source>
- <translation>Publicar en Intranet</translation>
+ <source>Swedish</source>
+ <translation></translation>
</message>
<message>
- <source>Publish to Youtube</source>
- <translation>Publicar en Youtube</translation>
+ <source>Turkish</source>
+ <translation></translation>
</message>
<message>
- <source>Sankore Cast</source>
- <translation>Presentación Sankore</translation>
+ <source>Chinese</source>
+ <translation></translation>
</message>
-</context>
-<context>
- <name>UBPreferencesController</name>
<message>
- <source>version: </source>
- <translation>versión:</translation>
+ <source>Chinese Simplified</source>
+ <translation></translation>
</message>
<message>
- <source>Marker is pressure sensitive</source>
- <translation>El marcador es sensible a la presión</translation>
+ <source>Chinese Traditional</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1885,6 +2334,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>Mis pelÃculas</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Visible la próxima vez</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2100,14 +2560,14 @@ Do you want to ignore these errors for this host?</source>
</message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Página completa</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Añadir</translation>
</message>
</context>
<context>
@@ -2454,6 +2914,49 @@ Por favor, reinicie la aplicación para acceder a los documentos actualizados.</
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Seleccionar el contenido que desea capturar:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nombre de la aplicación</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Restricción y responsabilidad. </translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Esta caracterÃstica fue desarrollada para funcionar en la mayorÃa de las páginas web más comúnes.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Pro favor, respete los derechos de autor al crear enlaces o al capturar contenido de la web.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2531,7 +3034,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>Restaurar las credenciales al reiniciar</translation>
</message>
</context>
<context>
@@ -2729,22 +3232,10 @@ p, li { white-space: pre-wrap; }
<translation>Licencias</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Red</translation>
</message>
@@ -2788,10 +3279,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Contraseña:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">ID Planète Sankoré</translation>
- </message>
<message>
<source>User:</source>
<translation>Nombre de usuario:</translation>
@@ -2801,542 +3288,62 @@ p, li { white-space: pre-wrap; }
<translation>Contraseña:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation></translation>
- </message>
- <message>
<source>Credits</source>
<translation>Créditos</translation>
</message>
<message utf8="true">
<source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <translation>ID de Planète Sankoré para exportar archivo</translation>
</message>
<message>
<source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <translation>Restaurar las credenciales al reiniciar</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>Consejos al inicio</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Show start up tips</source>
+ <translation>Mostrar consejos al inicio</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Idioma</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Seleccione un idioma</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>El nuevo idioma se cargará la próoxima vez que inicie el programa</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Salir de Open-Sankoré</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_eu.ts b/Sankore-3.1/resources/i18n/sankore_eu.ts
new file mode 100644
index 0000000..7d95591
--- /dev/null
+++ b/Sankore-3.1/resources/i18n/sankore_eu.ts
@@ -0,0 +1,3965 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="eu_ES">
+<context>
+ <name>BlackoutWidget</name>
+ <message>
+ <source>Click to Return to Application</source>
+ <translatorcomment>Cliquer pour revenir à l'application</translatorcomment>
+ <translation>Klikatu aplikaziora itzultzeko</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadDialog</name>
+ <message>
+ <source>Downloads</source>
+ <translatorcomment>Téléchargement(s)</translatorcomment>
+ <translation type="unfinished">Kargatzea(k)</translation>
+ </message>
+ <message>
+ <source>Clean Up</source>
+ <translatorcomment>Nettoyer</translatorcomment>
+ <translation>Garbitu</translation>
+ </message>
+ <message>
+ <source>0 Items</source>
+ <translatorcomment>0 élément</translatorcomment>
+ <translation>0 elementu</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>Form</source>
+ <translatorcomment>Formulaire</translatorcomment>
+ <translation type="unfinished">Inprimakia</translation>
+ </message>
+ <message>
+ <source>Filename</source>
+ <translatorcomment>Nom de fichier</translatorcomment>
+ <translation>Fitxategi izena</translation>
+ </message>
+ <message>
+ <source>Try Again</source>
+ <translatorcomment>Réessayer</translatorcomment>
+ <translation type="unfinished">Berriz saiatu</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translatorcomment>Arrêter</translatorcomment>
+ <translation type="unfinished">Gelditu</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translatorcomment>Ouvrir</translatorcomment>
+ <translation>Ireki</translation>
+ </message>
+</context>
+<context>
+ <name>IntranetPodcastPublishingDialog</name>
+ <message>
+ <source>Publish Podcast to YouTube</source>
+ <translatorcomment>Publier Podcast sur YouTube</translatorcomment>
+ <translation type="unfinished">Podcasta YouTuben argitaratu</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translatorcomment>Titre</translatorcomment>
+ <translation>Titulua</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translatorcomment>Description</translatorcomment>
+ <translation type="unfinished">Deskribapena</translation>
+ </message>
+ <message>
+ <source>Author</source>
+ <translatorcomment>Auteur</translatorcomment>
+ <translation type="unfinished">Egilea</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>Board</source>
+ <translatorcomment>Tableau</translatorcomment>
+ <translation>Arbela</translation>
+ </message>
+ <message>
+ <source>Stylus</source>
+ <translatorcomment>Stylets</translatorcomment>
+ <translation>Arkatzak</translation>
+ </message>
+ <message>
+ <source>Backgrounds</source>
+ <translatorcomment>Fonds</translatorcomment>
+ <translation type="unfinished">Gibeleko planoak</translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translatorcomment>Annuler</translatorcomment>
+ <translation>Desegin</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translatorcomment>Rétablir</translatorcomment>
+ <translation>Berregin</translation>
+ </message>
+ <message>
+ <source>Previous</source>
+ <translatorcomment>Précédente</translatorcomment>
+ <translation type="unfinished">Aitzinekoa</translation>
+ </message>
+ <message>
+ <source>PgUp</source>
+ <translatorcomment>Page haut</translatorcomment>
+ <translation type="unfinished">OrrGor</translation>
+ </message>
+ <message>
+ <source>Next</source>
+ <translatorcomment>Suivante</translatorcomment>
+ <translation>Ondokoa</translation>
+ </message>
+ <message>
+ <source>PgDown</source>
+ <translatorcomment>Page bas</translatorcomment>
+ <translation type="unfinished">OrrBeh</translation>
+ </message>
+ <message>
+ <source>Documents</source>
+ <translatorcomment>Documents</translatorcomment>
+ <translation>Dokumentuak</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translatorcomment>Web</translatorcomment>
+ <translation type="unfinished">Weba</translation>
+ </message>
+ <message>
+ <source>Ctrl+T</source>
+ <translatorcomment>Ctrl+T</translatorcomment>
+ <translation>Ktrl+T</translation>
+ </message>
+ <message>
+ <source>Grid Light Background</source>
+ <translatorcomment>Grille sur fond clair</translatorcomment>
+ <translation>Hondo argiko sareta</translation>
+ </message>
+ <message>
+ <source>Grid Dark Background</source>
+ <translatorcomment>Grille sur fond foncé</translatorcomment>
+ <translation type="unfinished">Hondo iluneko sareta</translation>
+ </message>
+ <message>
+ <source>Start Screen Recording</source>
+ <translatorcomment>Démarrer l'enregistrement de l'écran</translatorcomment>
+ <translation>Pantailaren grabaketa abiatu</translation>
+ </message>
+ <message>
+ <source>Marker</source>
+ <translatorcomment>Surligneur</translatorcomment>
+ <translation>Gainmarratzailea</translation>
+ </message>
+ <message>
+ <source>Selector</source>
+ <translatorcomment>Sélecteur</translatorcomment>
+ <translation>Hautatzailea</translation>
+ </message>
+ <message>
+ <source>Hand</source>
+ <translatorcomment>Main</translatorcomment>
+ <translation>Eskua</translation>
+ </message>
+ <message>
+ <source>Zoom In</source>
+ <translatorcomment>Zoomer en avant</translatorcomment>
+ <translation type="unfinished">Zooma handitu</translation>
+ </message>
+ <message>
+ <source>Zoom Out</source>
+ <translatorcomment>Zoomer en arrière</translatorcomment>
+ <translation type="unfinished">Zooma ttipitu</translation>
+ </message>
+ <message>
+ <source>Text</source>
+ <translatorcomment>Texte</translatorcomment>
+ <translation>Testua</translation>
+ </message>
+ <message>
+ <source>Capture</source>
+ <translatorcomment>Capture</translatorcomment>
+ <translation>Kaptura</translation>
+ </message>
+ <message>
+ <source>Add To Current Page</source>
+ <translatorcomment>Ajouter à la page courante</translatorcomment>
+ <translation type="unfinished">Uneko orrian gehitu</translation>
+ </message>
+ <message>
+ <source>Add To New Page</source>
+ <translatorcomment>Ajouter sur une nouvelle page</translatorcomment>
+ <translation type="unfinished">Orri berri batean gehitu</translation>
+ </message>
+ <message>
+ <source>Add To Library</source>
+ <translatorcomment>Ajouter à la bibliothèque</translatorcomment>
+ <translation type="unfinished">Liburutegian gehitu</translation>
+ </message>
+ <message>
+ <source>Pages</source>
+ <translatorcomment>Pages</translatorcomment>
+ <translation>Orriak</translation>
+ </message>
+ <message>
+ <source>New Page</source>
+ <translatorcomment>Nouvelle page</translatorcomment>
+ <translation>Orri berria</translation>
+ </message>
+ <message>
+ <source>Configure Podcast Recording</source>
+ <translatorcomment>Configurer le podcast</translatorcomment>
+ <translation>Podcasta konfiguratu</translation>
+ </message>
+ <message>
+ <source>Web Trap</source>
+ <translatorcomment>Capturer du contenu Web</translatorcomment>
+ <translation>Web edukia kapturatu</translation>
+ </message>
+ <message>
+ <source>Trap Web Content</source>
+ <translatorcomment>Capturer du contenu Web</translatorcomment>
+ <translation>Web edukia kapturatu</translation>
+ </message>
+ <message>
+ <source>Window Capture</source>
+ <translatorcomment>Capture d'une fenêtre</translatorcomment>
+ <translation>Leiho bat kapturatu</translation>
+ </message>
+ <message>
+ <source>Show on Display</source>
+ <translatorcomment>Montrer sur l'écran de projection</translatorcomment>
+ <translation>Proiekzio pantailan erakutsi</translation>
+ </message>
+ <message>
+ <source>Ctrl+D</source>
+ <translatorcomment>Ctrl+D</translatorcomment>
+ <translation>Ktrl+D</translation>
+ </message>
+ <message>
+ <source>Ctrl+W</source>
+ <translatorcomment>Ctrl+W</translatorcomment>
+ <translation>Ktrl+W</translation>
+ </message>
+ <message>
+ <source>Line</source>
+ <translatorcomment>Trait</translatorcomment>
+ <translation>Marra</translation>
+ </message>
+ <message>
+ <source>Quit</source>
+ <translatorcomment>Quitter</translatorcomment>
+ <translation type="unfinished">Atera</translation>
+ </message>
+ <message>
+ <source>Pen</source>
+ <translatorcomment>Stylet</translatorcomment>
+ <translation>Arkatza</translation>
+ </message>
+ <message>
+ <source>Eraser</source>
+ <translatorcomment>Gomme</translatorcomment>
+ <translation>Goma</translation>
+ </message>
+ <message>
+ <source>Change Background</source>
+ <translatorcomment>Changer le fond d'écran</translatorcomment>
+ <translation type="unfinished">Gibeleko planoa aldatu</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translatorcomment>Page précédente</translatorcomment>
+ <translation type="unfinished">Aitzineko orrialdea</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translatorcomment>Page suivante</translatorcomment>
+ <translation>Ondoko orrialdea</translation>
+ </message>
+ <message>
+ <source>Manage Documents</source>
+ <translatorcomment>Gérer les documents</translatorcomment>
+ <translation>Dokumentuak kudeatu</translation>
+ </message>
+ <message>
+ <source>Web Browsing</source>
+ <translatorcomment>Parcourir le Web</translatorcomment>
+ <translation>Weba arakatu</translation>
+ </message>
+ <message>
+ <source>Small Line</source>
+ <translatorcomment>Ligne fine</translatorcomment>
+ <translation type="unfinished">Marra mehea</translation>
+ </message>
+ <message>
+ <source>Medium Line</source>
+ <translatorcomment>Ligne moyenne</translatorcomment>
+ <translation type="unfinished">Marra ertaina</translation>
+ </message>
+ <message>
+ <source>Large Line</source>
+ <translatorcomment>Ligne large</translatorcomment>
+ <translation type="unfinished">Marra lodia</translation>
+ </message>
+ <message>
+ <source>Smalle Eraser</source>
+ <translatorcomment>Gomme fine</translatorcomment>
+ <translation type="unfinished">Goma mehea</translation>
+ </message>
+ <message>
+ <source>Medium Eraser</source>
+ <translatorcomment>Gomme moyenne</translatorcomment>
+ <translation>Goma ertaina</translation>
+ </message>
+ <message>
+ <source>Large Eraser</source>
+ <translatorcomment>Gomme large</translatorcomment>
+ <translation>Goma lodia</translation>
+ </message>
+ <message>
+ <source>Color</source>
+ <translatorcomment>Couleur</translatorcomment>
+ <translation>Kolorea</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translatorcomment>Précédente</translatorcomment>
+ <translation type="unfinished">Gibelera</translation>
+ </message>
+ <message>
+ <source>Left</source>
+ <translatorcomment>Gauche</translatorcomment>
+ <translation>Ezker</translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translatorcomment>Suivante</translatorcomment>
+ <translation type="unfinished">Aitzina</translation>
+ </message>
+ <message>
+ <source>Right</source>
+ <translatorcomment>Droite</translatorcomment>
+ <translation>Eskuin</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <translatorcomment>Recharger</translatorcomment>
+ <translation type="unfinished">Berriz kargatu</translation>
+ </message>
+ <message>
+ <source>Reload Current Page</source>
+ <translatorcomment>Recharger la page courante</translatorcomment>
+ <translation type="unfinished">Uneko orria berriz kargatu</translation>
+ </message>
+ <message>
+ <source>Load Home Page</source>
+ <translatorcomment>Charger la page d'accueil</translatorcomment>
+ <translation type="unfinished">Orri nagusia kargatu</translation>
+ </message>
+ <message>
+ <source>Show Bookmarks</source>
+ <translatorcomment>Afficher les favoris</translatorcomment>
+ <translation>Lastermarkak erakutsi</translation>
+ </message>
+ <message>
+ <source>Add Bookmark</source>
+ <translatorcomment>Ajouter un favori</translatorcomment>
+ <translation type="unfinished">Lastermarka bat gehitu</translation>
+ </message>
+ <message>
+ <source>Display Board</source>
+ <translatorcomment>Afficher le tableau</translatorcomment>
+ <translation>Arbela bistaratu</translation>
+ </message>
+ <message>
+ <source>Ctrl+B</source>
+ <translatorcomment>Ctrl+B</translatorcomment>
+ <translation>Ktrl+B</translation>
+ </message>
+ <message>
+ <source>Erase</source>
+ <translatorcomment>Effacer</translatorcomment>
+ <translation>Ezabatu</translation>
+ </message>
+ <message>
+ <source>Erase Content</source>
+ <translatorcomment>Effacer le contenu</translatorcomment>
+ <translation>Edukia ezabatu</translation>
+ </message>
+ <message>
+ <source>Display Preferences</source>
+ <translatorcomment>Afficher les préférences</translatorcomment>
+ <translation>Hobespenak bistaratu</translation>
+ </message>
+ <message>
+ <source>Show Library</source>
+ <translatorcomment>Afficher la bibliothèque</translatorcomment>
+ <translation>Liburutegia bistaratu</translation>
+ </message>
+ <message>
+ <source>Show Computer Desktop</source>
+ <translatorcomment>Afficher le bureau de l'ordinateur</translatorcomment>
+ <translation>Ordenagailuaren mahaigaina bistaratu</translation>
+ </message>
+ <message>
+ <source>Create a New Folder</source>
+ <translatorcomment>Créer un nouveau dossier</translatorcomment>
+ <translation>Karpeta berria sortu</translation>
+ </message>
+ <message>
+ <source>Create a New Document</source>
+ <translatorcomment>Créer un nouveau document</translatorcomment>
+ <translation>Dokumentu berria sortu</translation>
+ </message>
+ <message>
+ <source>Import a Document</source>
+ <translatorcomment>Importer un document</translatorcomment>
+ <translation type="unfinished">Dokumentu bat inportatu</translation>
+ </message>
+ <message>
+ <source>Export a Document</source>
+ <translatorcomment>Exporter un document</translatorcomment>
+ <translation type="unfinished">Dokumentu bat esportatu</translation>
+ </message>
+ <message>
+ <source>Open Page in Board</source>
+ <translatorcomment>Ouvrir la page dans le tableau</translatorcomment>
+ <translation>Orria arbelan ireki</translation>
+ </message>
+ <message>
+ <source>Duplicate Selected Content</source>
+ <translatorcomment>Dupliquer le contenu sélectionné</translatorcomment>
+ <translation type="unfinished">Hautatu edukia bikoiztu</translation>
+ </message>
+ <message>
+ <source>Delete Selected Content</source>
+ <translatorcomment>Supprimer le contenu sélectionné</translatorcomment>
+ <translation type="unfinished">Hautatu edukia ezabatu</translation>
+ </message>
+ <message>
+ <source>Add Content to Document</source>
+ <translatorcomment>Ajouter un contenu au document</translatorcomment>
+ <translation type="unfinished">Edukia dokumentuan gehitu</translation>
+ </message>
+ <message>
+ <source>Tutorial</source>
+ <translatorcomment>Tutoriels</translatorcomment>
+ <translation type="unfinished">Tutorialak</translation>
+ </message>
+ <message>
+ <source>Show Desktop</source>
+ <translatorcomment>Bureau</translatorcomment>
+ <translation>Mahaigaina</translation>
+ </message>
+ <message>
+ <source>Ctrl+Shift+H</source>
+ <translatorcomment>Ctrl+Maj+H</translatorcomment>
+ <translation>Ktrl+Shift+H</translation>
+ </message>
+ <message>
+ <source>Rename Content</source>
+ <translatorcomment>Renommer le contenu</translatorcomment>
+ <translation type="unfinished">Edukia berriz izendatu</translation>
+ </message>
+ <message>
+ <source>Display Tools</source>
+ <translatorcomment>Afficher les outils</translatorcomment>
+ <translation type="unfinished">Tresnak erakutsi</translation>
+ </message>
+ <message>
+ <source>Use Document Wide Size (16/9)</source>
+ <translatorcomment>Utiliser un format large (16/9)</translatorcomment>
+ <translation type="unfinished">Formatu zabala erabili (16/9)</translation>
+ </message>
+ <message>
+ <source>Use Document Regular Size (4/3)</source>
+ <translatorcomment>Utiliser un format normal (4/3)</translatorcomment>
+ <translation type="unfinished">Formatu arrunta erabili (4/3)</translation>
+ </message>
+ <message>
+ <source>Use Custom Document Size</source>
+ <translatorcomment>Utiliser un format de document personnalisé</translatorcomment>
+ <translation type="unfinished">Formatu pertsonalizatua erabili</translation>
+ </message>
+ <message>
+ <source>Stop Loading Web Page</source>
+ <translatorcomment>Arrêter le chargement de la page Web</translatorcomment>
+ <translation type="unfinished">Web orriaren kargatzea geldiarazi</translation>
+ </message>
+ <message>
+ <source>Put Presentation to Sleep</source>
+ <translatorcomment>Mettre la présentation en pause</translatorcomment>
+ <translation>Aurkezpena lotan ezarri</translation>
+ </message>
+ <message>
+ <source>Display Virtual Keyboard</source>
+ <translatorcomment>Afficher le clavier virtuel</translatorcomment>
+ <translation type="unfinished">Teklatu birtuala erakutsi</translation>
+ </message>
+ <message>
+ <source>Record Presentation to Video</source>
+ <translatorcomment>Enregistrer la présentation en vidéo</translatorcomment>
+ <translation>Aurkezpena bideoan grabatu</translation>
+ </message>
+ <message>
+ <source>Erase Items</source>
+ <translatorcomment>Effacer les éléments</translatorcomment>
+ <translation>Elementuak ezabatu</translation>
+ </message>
+ <message>
+ <source>Erase All Items</source>
+ <translatorcomment>Effacer tous les éléments</translatorcomment>
+ <translation>Elementu guztiak ezabatu</translation>
+ </message>
+ <message>
+ <source>Erase Annotations</source>
+ <translatorcomment>Effacer les annotations</translatorcomment>
+ <translation>Oharrak ezabatu</translation>
+ </message>
+ <message>
+ <source>Erase All Annotations</source>
+ <translatorcomment>Effacer toutes les annotations</translatorcomment>
+ <translation>Ohar guztiak ezabatu</translation>
+ </message>
+ <message>
+ <source>Clear Page</source>
+ <translatorcomment>Effacer la page</translatorcomment>
+ <translation type="unfinished">Orria garbitu</translation>
+ </message>
+ <message>
+ <source>Clear All Elements</source>
+ <translatorcomment>Effacer tous les éléments</translatorcomment>
+ <translation type="unfinished">Elementu guztiak ezabatu</translation>
+ </message>
+ <message>
+ <source>Annotate Document</source>
+ <translatorcomment>Annoter le document</translatorcomment>
+ <translation type="unfinished">Oharrak idatzi</translation>
+ </message>
+ <message>
+ <source>Ctrl+I</source>
+ <translatorcomment>Ctrl+I</translatorcomment>
+ <translation>Ktrl+I</translation>
+ </message>
+ <message>
+ <source>Erase Annotation</source>
+ <translatorcomment>Effacer l'annotation</translatorcomment>
+ <translation type="unfinished">Oharra ezabatu</translation>
+ </message>
+ <message>
+ <source>Ctrl+E</source>
+ <translatorcomment>Ctrl+E</translatorcomment>
+ <translation>Ktrl+E</translation>
+ </message>
+ <message>
+ <source>Highlight </source>
+ <translatorcomment>Surligner </translatorcomment>
+ <translation type="unfinished">Gainmarratu</translation>
+ </message>
+ <message>
+ <source>Ctrl+M</source>
+ <translatorcomment>Ctrl+M</translatorcomment>
+ <translation>Ktrl+M</translation>
+ </message>
+ <message>
+ <source>Select And Modify Objects</source>
+ <translatorcomment>Sélectionner et modifier des objets</translatorcomment>
+ <translation>Objektuak hautatu eta aldatu</translation>
+ </message>
+ <message>
+ <source>Ctrl+F</source>
+ <translatorcomment>Ctrl+F</translatorcomment>
+ <translation>Ktrl+F</translation>
+ </message>
+ <message>
+ <source>Scroll Page</source>
+ <translatorcomment>Déplacer la page</translatorcomment>
+ <translation>Orria korritu</translation>
+ </message>
+ <message>
+ <source>Laser Pointer</source>
+ <translatorcomment>Utiliser le "pointeur laser"</translatorcomment>
+ <translation>Laser erakuslea baliatu</translation>
+ </message>
+ <message>
+ <source>Virtual Laser Pointer</source>
+ <translatorcomment>Utiliser le "pointeur laser"</translatorcomment>
+ <translation>Laser erakuslea baliatu</translation>
+ </message>
+ <message>
+ <source>Ctrl+G</source>
+ <translatorcomment>Ctrl+G</translatorcomment>
+ <translation>Ktrl+G</translation>
+ </message>
+ <message>
+ <source>Draw Lines</source>
+ <translatorcomment>Tracer une ligne droite</translatorcomment>
+ <translation type="unfinished">Lerro zuzenak marraztu</translation>
+ </message>
+ <message>
+ <source>Ctrl+J</source>
+ <translatorcomment>Ctrl+J</translatorcomment>
+ <translation>Ktrl+J</translation>
+ </message>
+ <message>
+ <source>Write Text</source>
+ <translatorcomment>Ecrire un texte</translatorcomment>
+ <translation type="unfinished">Testu bat idatzi</translation>
+ </message>
+ <message>
+ <source>Ctrl+K</source>
+ <translatorcomment>Ctrl+K</translatorcomment>
+ <translation>Ktrl+K</translation>
+ </message>
+ <message>
+ <source>Add Item To Current Page</source>
+ <translatorcomment>Ajouter l'élément à la page courante</translatorcomment>
+ <translation type="unfinished">Elementua uneko orrian gehitu</translation>
+ </message>
+ <message>
+ <source>Add Item To New Page</source>
+ <translatorcomment>Ajouter l'élément à une nouvelle page</translatorcomment>
+ <translation type="unfinished">Elementua orri berrian gehitu</translation>
+ </message>
+ <message>
+ <source>Add Item To Library</source>
+ <translatorcomment>Ajouter l'élément à la bibliothèque</translatorcomment>
+ <translation type="unfinished">Elementua liburutegian gehitu</translation>
+ </message>
+ <message>
+ <source>Create a New Page</source>
+ <translatorcomment>Créer une nouvelle page</translatorcomment>
+ <translation type="unfinished">Beste orri bat sortu</translation>
+ </message>
+ <message>
+ <source>Duplicate Page</source>
+ <translatorcomment>Dupliquer la page</translatorcomment>
+ <translation>Orria bikoiztu</translation>
+ </message>
+ <message>
+ <source>Duplicate the Current Page</source>
+ <translatorcomment>Dupliquer la page courante</translatorcomment>
+ <translation>Uneko orria bikoiztu</translation>
+ </message>
+ <message>
+ <source>Import Page</source>
+ <translatorcomment>Importer une page</translatorcomment>
+ <translation>Orria inportatu</translation>
+ </message>
+ <message>
+ <source>Import an External Page</source>
+ <translatorcomment>Importer une page externe</translatorcomment>
+ <translation>Kanpoko orri bat inportatu</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translatorcomment>Pause</translatorcomment>
+ <translation>Pausa</translation>
+ </message>
+ <message>
+ <source>Pause Podcast Recording</source>
+ <translatorcomment>Mettre en pause l'enregistrement</translatorcomment>
+ <translation>Grabaketa pausan ezarri</translation>
+ </message>
+ <message>
+ <source>Podcast Config</source>
+ <translatorcomment>Configuration du podcast</translatorcomment>
+ <translation>Poscastaren ezarpenak</translation>
+ </message>
+ <message>
+ <source>Open the tutorial</source>
+ <translatorcomment>Ouvrir les tutoriels</translatorcomment>
+ <translation type="unfinished">Tutorialak ireki</translation>
+ </message>
+ <message>
+ <source>Check Update</source>
+ <translatorcomment>Contrôler la mise à jour</translatorcomment>
+ <translation type="unfinished">Eguneratzeak egiaztatu</translation>
+ </message>
+ <message>
+ <source>Ctrl+H</source>
+ <translatorcomment>Ctrl+H</translatorcomment>
+ <translation>Ktrl+H</translation>
+ </message>
+ <message>
+ <source>Capture Part of the Screen</source>
+ <translatorcomment>Capturer une partie de l'écran</translatorcomment>
+ <translation>Pantailaren zati bat kapturatu</translation>
+ </message>
+ <message>
+ <source>Custom Capture</source>
+ <translatorcomment>Capture personnalisée</translatorcomment>
+ <translation type="unfinished">Kaptura pertsonalizatuak</translation>
+ </message>
+ <message>
+ <source>Capture a Window</source>
+ <translatorcomment>Capturer une fenêtre</translatorcomment>
+ <translation>Leiho bat kapturatu</translation>
+ </message>
+ <message>
+ <source>Show Main Screen on Display Screen</source>
+ <translatorcomment>Afficher l'écran principal sur l'écran d'affichage</translatorcomment>
+ <translation type="unfinished">Pantaila nagusia proiekzio pantailan erakutsi</translation>
+ </message>
+ <message>
+ <source>Erase all Annotations</source>
+ <translatorcomment>Effacer toutes les annotations</translatorcomment>
+ <translation>Ohar guztiak ezabatu</translation>
+ </message>
+ <message>
+ <source>eduMedia</source>
+ <translatorcomment>eduMedia</translatorcomment>
+ <translation>eduMedia</translation>
+ </message>
+ <message>
+ <source>Import eduMedia simulation</source>
+ <translatorcomment>Importer une simulation eduMedia</translatorcomment>
+ <translation>eduMedia simulazio bat inportatu</translation>
+ </message>
+ <message>
+ <source>Del</source>
+ <translatorcomment>Supprimer</translatorcomment>
+ <translation>Ezabatu</translation>
+ </message>
+ <message>
+ <source>Add Selected Content to Open Document</source>
+ <translatorcomment>Ajouter le contenu sélectionné au document ouvert</translatorcomment>
+ <translation type="unfinished">Hautatu edukia gehitu ireki dokumentuan</translation>
+ </message>
+ <message>
+ <source>Stop Loading</source>
+ <translatorcomment>Arrêter</translatorcomment>
+ <translation type="unfinished">Kargatzea geldi arazi</translation>
+ </message>
+ <message>
+ <source>Sleep</source>
+ <translatorcomment>Veille</translatorcomment>
+ <translation>Lotan ezarri</translation>
+ </message>
+ <message>
+ <source>Virtual Keyboard</source>
+ <translatorcomment>Clavier virtuel</translatorcomment>
+ <translation type="unfinished">Teklatu birtuala</translation>
+ </message>
+ <message>
+ <source>Plain Light Background</source>
+ <translatorcomment>Fond clair uni</translatorcomment>
+ <translation>Hondo argi soila</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translatorcomment>Clair</translatorcomment>
+ <translation>Argia</translation>
+ </message>
+ <message>
+ <source>Plain Dark Background</source>
+ <translatorcomment>Fond sombre uni</translatorcomment>
+ <translation>Hondo ilun soila</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translatorcomment>Sombre</translatorcomment>
+ <translation>Iluna</translation>
+ </message>
+ <message>
+ <source>Podcast</source>
+ <translatorcomment>Podcast</translatorcomment>
+ <translation type="unfinished">Podcasta</translation>
+ </message>
+ <message>
+ <source>Record</source>
+ <translatorcomment>Enregistrer</translatorcomment>
+ <translation>Grabatu</translation>
+ </message>
+ <message>
+ <source>Wide Size (16/9)</source>
+ <translatorcomment>Format large (16/9)</translatorcomment>
+ <translation type="unfinished">Formatu zabala (16/9)</translation>
+ </message>
+ <message>
+ <source>Regular Size (4/3)</source>
+ <translatorcomment>Format normal (4/3)</translatorcomment>
+ <translation type="unfinished">Formatu arrunta (4/3)</translation>
+ </message>
+ <message>
+ <source>Custom Size</source>
+ <translatorcomment>Format personnalisé</translatorcomment>
+ <translation type="unfinished">Formatu pertsonalizatua</translation>
+ </message>
+ <message>
+ <source>Ctrl+L</source>
+ <translatorcomment>Ctrl+L</translatorcomment>
+ <translation>Ktrl+L</translation>
+ </message>
+ <message>
+ <source>Bigger</source>
+ <translatorcomment>Plus grand</translatorcomment>
+ <translation type="unfinished">Handiago</translation>
+ </message>
+ <message>
+ <source>Ctrl++</source>
+ <translatorcomment>Ctrl++</translatorcomment>
+ <translation>Ktrl++</translation>
+ </message>
+ <message>
+ <source>Smaller</source>
+ <translatorcomment>Plus petit</translatorcomment>
+ <translation type="unfinished">Ttipiago</translation>
+ </message>
+ <message>
+ <source>Ctrl+-</source>
+ <translatorcomment>Ctrl+-</translatorcomment>
+ <translation>Ktrl+-</translation>
+ </message>
+ <message>
+ <source>Open in Board</source>
+ <translatorcomment>Ouvrir la page</translatorcomment>
+ <translation>Orria ireki</translation>
+ </message>
+ <message>
+ <source>Ctrl+O</source>
+ <translatorcomment>Ctrl+O</translatorcomment>
+ <translation>Ktrl+O</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translatorcomment>Couper</translatorcomment>
+ <translation>Moztu</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translatorcomment>Copier</translatorcomment>
+ <translation>Kopiatu</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translatorcomment>Coller</translatorcomment>
+ <translation type="unfinished">Kolatu</translation>
+ </message>
+ <message>
+ <source>Tools</source>
+ <translatorcomment>Outils</translatorcomment>
+ <translation>Tresnak</translation>
+ </message>
+ <message>
+ <source>Multi Screen</source>
+ <translatorcomment>Multi-écrans</translatorcomment>
+ <translation type="unfinished">Pantaila anitzekoa</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translatorcomment>Nouveau dossier</translatorcomment>
+ <translation>Karpeta berria</translation>
+ </message>
+ <message>
+ <source>New Document</source>
+ <translatorcomment>Nouveau document</translatorcomment>
+ <translation>Dokumentu berria</translation>
+ </message>
+ <message>
+ <source>Import</source>
+ <translatorcomment>Importer</translatorcomment>
+ <translation>Inportatu</translation>
+ </message>
+ <message>
+ <source>Export</source>
+ <translatorcomment>Exporter</translatorcomment>
+ <translation>Esportatu</translation>
+ </message>
+ <message>
+ <source>Duplicate</source>
+ <translatorcomment>Dupliquer</translatorcomment>
+ <translation type="unfinished">Bikoiztu</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translatorcomment>Supprimer</translatorcomment>
+ <translation>Ezabatu</translation>
+ </message>
+ <message>
+ <source>Add to Working Document</source>
+ <translatorcomment>Ajouter au document</translatorcomment>
+ <translation>Uneko dokumentuari gehitu</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translatorcomment>Ajouter</translatorcomment>
+ <translation>Gehitu</translation>
+ </message>
+ <message>
+ <source>Rename</source>
+ <translatorcomment>Renommer</translatorcomment>
+ <translation type="unfinished">Berriz izendatu</translation>
+ </message>
+ <message>
+ <source>Home</source>
+ <translatorcomment>Accueil</translatorcomment>
+ <translation>Harrera</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translatorcomment>Signets</translatorcomment>
+ <translation>Lastermarkak</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
+ <translatorcomment>Signet</translatorcomment>
+ <translation type="unfinished">Lastermarka</translation>
+ </message>
+ <message>
+ <source>Preferences</source>
+ <translatorcomment>Préférences</translatorcomment>
+ <translation>Hobespenak</translation>
+ </message>
+ <message>
+ <source>Library</source>
+ <translatorcomment>Bibliothèque</translatorcomment>
+ <translation>Liburutegia</translation>
+ </message>
+ <message>
+ <source>Ctrl+Z</source>
+ <translatorcomment>Ctrl+Z</translatorcomment>
+ <translation>Ktrl+Z</translation>
+ </message>
+ <message>
+ <source>Ctrl+Y</source>
+ <translatorcomment>Ctrl+Y</translatorcomment>
+ <translation>Ktrl+Y</translation>
+ </message>
+ <message utf8="true">
+ <source>Open-Sankoré</source>
+ <translatorcomment>Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open-Sankore</translation>
+ </message>
+ <message utf8="true">
+ <source>Quit Open-Sankoré</source>
+ <translatorcomment>Quitter Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open-Sankoretik atera</translation>
+ </message>
+ <message utf8="true">
+ <source>Open-Sankoré Editor</source>
+ <translatorcomment>Ãditeur Sankoré</translatorcomment>
+ <translation type="unfinished">Sankore editorea</translation>
+ </message>
+ <message utf8="true">
+ <source>Show Open-Sankoré Widgets Editor</source>
+ <translatorcomment>Ouvrir l'éditeur d'appliquettes Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open Sankoreren trepetxu editorea erakutsi</translation>
+ </message>
+ <message utf8="true">
+ <source>Hide Open-Sankoré</source>
+ <translatorcomment>Masquer Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open Sankore ezkutatu</translation>
+ </message>
+ <message utf8="true">
+ <source>Hide Open-Sankoré Application</source>
+ <translatorcomment>Masquer Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open Sankore ezkutatu</translation>
+ </message>
+ <message>
+ <source>Import Uniboard Documents</source>
+ <translatorcomment>Importer les documents Uniboard</translatorcomment>
+ <translation>Uniboard dokumentuak inportatu</translation>
+ </message>
+ <message>
+ <source>Import old Sankore or Uniboard documents</source>
+ <translatorcomment>Importer les anciens documents Sankoré ou Uniboard</translatorcomment>
+ <translation type="unfinished">Sankore edo Uniboard dokumentu zaharrak inportatu</translation>
+ </message>
+ <message>
+ <source>Group items</source>
+ <translatorcomment>Grouper les objets</translatorcomment>
+ <translation>Objektuak elkartu</translation>
+ </message>
+ <message>
+ <source>Play</source>
+ <translatorcomment>Jouer - j'hésite avec Lancer (dépend du contexte d'usage)</translatorcomment>
+ <translation type="unfinished">Jo</translation>
+ </message>
+ <message>
+ <source>Interact with items</source>
+ <translatorcomment>Interagir avec des objets</translatorcomment>
+ <translation>Objektu batzuekin elkarreragin</translation>
+ </message>
+ <message>
+ <source>Erase Background</source>
+ <translatorcomment>Effacer le fond</translatorcomment>
+ <translation type="unfinished">Gibeleko planoa ezabatu</translation>
+ </message>
+ <message>
+ <source>Remove the backgound</source>
+ <translatorcomment>Supprimer le fond</translatorcomment>
+ <translation type="unfinished">Gibeleko planoa kendu</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translatorcomment>Grouper</translatorcomment>
+ <translation>Elkartu</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Lastermarka</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PasswordDialog</name>
+ <message>
+ <source>Authentication Required</source>
+ <translatorcomment>Authentification requise</translatorcomment>
+ <translation type="unfinished">Autentifikazioa behar da</translation>
+ </message>
+ <message>
+ <source>Username:</source>
+ <translatorcomment>Nom d'utilisateur :</translatorcomment>
+ <translation>Erabiltzaile izena :</translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translatorcomment>Mot de passe :</translatorcomment>
+ <translation>Pasahitza :</translation>
+ </message>
+</context>
+<context>
+ <name>ProxyDialog</name>
+ <message>
+ <source>Proxy Authentication</source>
+ <translatorcomment>Authentification sur le proxy</translatorcomment>
+ <translation>Proxy autentifikazioa</translation>
+ </message>
+ <message>
+ <source>Connect to Proxy</source>
+ <translatorcomment>Se connecter par le proxy</translatorcomment>
+ <translation>Proxyari konektatu</translation>
+ </message>
+ <message>
+ <source>Username:</source>
+ <translatorcomment>Nom d'utilisateur :</translatorcomment>
+ <translation>Erabiltzaile izena :</translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translatorcomment>Mot de passe :</translatorcomment>
+ <translation>Pasahitza :</translation>
+ </message>
+ <message>
+ <source>Save username and password for future use</source>
+ <translatorcomment>Enregistrer le nom d'utilisateur et le mot de passe pour la prochaine.utilisation</translatorcomment>
+ <translation type="unfinished">Erabiltzaile izena eta pasahitza gogoan atxiki ondoko erabilerako</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>Element ID = </source>
+ <translatorcomment>ID de l'élément =</translatorcomment>
+ <translation type="unfinished">Elementuaren IDa = </translation>
+ </message>
+ <message>
+ <source>Content is not supported in destination format.</source>
+ <translatorcomment>Contenu non supporté dans le format souhaité.</translatorcomment>
+ <translation type="unfinished">Edukia ez da aukeratu formatuan onartzen.</translation>
+ </message>
+ <message>
+ <source>Remove Page</source>
+ <translatorcomment>Supprimer la page</translatorcomment>
+ <translation type="unfinished">Orria kendu</translation>
+ </message>
+ <message>
+ <source>Are you sure you want to remove 1 page from the selected document '%0'?</source>
+ <translatorcomment>Voulez-vous vraiment effacer 1 page de ce document '%0'?</translatorcomment>
+ <translation type="unfinished">'%0' dokumentuaren orri bat kendu nahi duzula segur zaude ?</translation>
+ </message>
+</context>
+<context>
+ <name>UBApplication</name>
+ <message>
+ <source>Page Size</source>
+ <translatorcomment>Taille de la page</translatorcomment>
+ <translation>Orriaren tamaina</translation>
+ </message>
+ <message>
+ <source>Podcast</source>
+ <translatorcomment>Podcast</translatorcomment>
+ <translation type="unfinished">Podcasta</translation>
+ </message>
+</context>
+<context>
+ <name>UBApplicationController</name>
+ <message>
+ <source>Web</source>
+ <translatorcomment>Web</translatorcomment>
+ <translation type="unfinished">Weba</translation>
+ </message>
+ <message>
+ <source>New update available, would you go to the web page ?</source>
+ <translatorcomment>Nouvelle mise à jour disponible : voulez-vous accéder à la page de téléchargement ?</translatorcomment>
+ <translation type="unfinished">Eguneratze berri bat eskuragarri da : kargatzeko web-orrira joan nahi duzu ?</translation>
+ </message>
+ <message>
+ <source>No update available</source>
+ <translatorcomment>Pas de mise à jour disponible</translatorcomment>
+ <translation type="unfinished">Ez dago eguneratze eskuragarririk</translation>
+ </message>
+ <message>
+ <source>Update available</source>
+ <translatorcomment>Mise à jour disponible</translatorcomment>
+ <translation type="unfinished">Eguneratzea eskuragarri da</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translatorcomment>Mettre à jour</translatorcomment>
+ <translation>Eguneratu</translation>
+ </message>
+</context>
+<context>
+ <name>UBBoardController</name>
+ <message>
+ <source>Downloading content %1 failed</source>
+ <translatorcomment>Erreur de téléchargement du contenu %1</translatorcomment>
+ <translation>%1 edukiaren deskargak huts egin du</translation>
+ </message>
+ <message>
+ <source>Download finished</source>
+ <translatorcomment>Téléchargement terminé</translatorcomment>
+ <translation type="unfinished">Deskarga amaitua</translation>
+ </message>
+ <message>
+ <source>Unknown tool type %1</source>
+ <translatorcomment>Type d'outil inconnu %1</translatorcomment>
+ <translation>%1 tresna mota ezezaguna</translation>
+ </message>
+ <message>
+ <source>Add Item</source>
+ <translatorcomment>Ajouter un élément</translatorcomment>
+ <translation>Elementua gehitu</translation>
+ </message>
+ <message>
+ <source>All Supported (%1)</source>
+ <translatorcomment>Tous (%1)</translatorcomment>
+ <translation>Denak (%1)</translation>
+ </message>
+ <message>
+ <source>Unknown content type %1</source>
+ <translatorcomment>Type de contenu inconnu (%1)</translatorcomment>
+ <translation>Eduki mota ezezaguna (%1)</translation>
+ </message>
+ <message>
+ <source>Delete page %1 from document</source>
+ <translatorcomment>Supprimer la page %1 du document</translatorcomment>
+ <translation>Dokumentuko %1 orria ezabatu</translation>
+ </message>
+ <message>
+ <source>Page %1 deleted</source>
+ <translatorcomment>Page %1 supprimée</translatorcomment>
+ <translation type="unfinished">%1 orria ezabatua</translation>
+ </message>
+ <message>
+ <source>Add file operation failed: file copying error</source>
+ <translatorcomment>Echec d'ajout de document : erreur de copie</translatorcomment>
+ <translation type="unfinished">Dokumentu gehitzeak huts egin du : errorea kopiatzean</translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translatorcomment>Grouper</translatorcomment>
+ <translation>Elkartu</translation>
+ </message>
+ <message>
+ <source>Ungroup</source>
+ <translatorcomment>Dégrouper</translatorcomment>
+ <translation type="unfinished">Banandu</translation>
+ </message>
+</context>
+<context>
+ <name>UBBoardPaletteManager</name>
+ <message>
+ <source>Error Adding Image to Library</source>
+ <translatorcomment>Erreur lors de l'ajout d'images à la bibliothèque</translatorcomment>
+ <translation type="unfinished">Errorea irudia liburutegian gehitzean</translation>
+ </message>
+ <message>
+ <source>CapturedImage</source>
+ <translatorcomment>Image capturée</translatorcomment>
+ <translation type="unfinished">Irudi kapturatua</translation>
+ </message>
+</context>
+<context>
+ <name>UBCachePropertiesWidget</name>
+ <message>
+ <source>Cache Properties</source>
+ <translatorcomment>Propriétés du cache</translatorcomment>
+ <translation type="unfinished">Cachearen ezarpenak</translation>
+ </message>
+ <message>
+ <source>Color:</source>
+ <translatorcomment>Couleur :</translatorcomment>
+ <translation type="unfinished">Kolorea :</translation>
+ </message>
+ <message>
+ <source>Shape:</source>
+ <translatorcomment>Forme :</translatorcomment>
+ <translation>Forma :</translation>
+ </message>
+ <message>
+ <source>Alpha:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Geometry:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation type="unfinished">Ados</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation type="unfinished">Ondoko orrialdea</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation type="unfinished">Aitzineko orrialdea</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDesktopPalette</name>
+ <message>
+ <source>Capture Part of the Screen</source>
+ <translatorcomment>Capturer une partie de l'écran</translatorcomment>
+ <translation>Pantailaren zati bat kapturatu</translation>
+ </message>
+ <message>
+ <source>Capture the Screen</source>
+ <translatorcomment>Capturer l'écran</translatorcomment>
+ <translation type="unfinished">Pantaila kapturatu</translation>
+ </message>
+ <message>
+ <source>Show the stylus palette</source>
+ <translatorcomment>Afficher la barre d'outils du stylet</translatorcomment>
+ <translation type="unfinished">Arkatzaren tresna-barra erakutsi</translation>
+ </message>
+ <message>
+ <source>Show Board on Secondary Screen</source>
+ <translatorcomment>Afficher le tableau sur l'écran secondaire</translatorcomment>
+ <translation>Arbela bigarren pantailan erakutsi</translation>
+ </message>
+ <message>
+ <source>Show Desktop on Secondary Screen</source>
+ <translatorcomment>Afficher le bureau sur l'écran secondaire</translatorcomment>
+ <translation>Mahaigaina bigarren pantailan erakutsi</translation>
+ </message>
+ <message>
+ <source>Show Open-Sankore</source>
+ <translatorcomment>Afficher Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open Sankore erakutsi</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentController</name>
+ <message>
+ <source>Open Supported File</source>
+ <translatorcomment>Ouvrir un fichier compatible</translatorcomment>
+ <translation>Fitxategi bateragarri bat ireki</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>Karpeta berria</translation>
+ </message>
+ <message>
+ <source>Add Folder of Images</source>
+ <translatorcomment>Ajouter un dossier d'images</translatorcomment>
+ <translation type="unfinished">Irudi karpeta gehitu</translation>
+ </message>
+ <message>
+ <source>Add Images</source>
+ <translatorcomment>Ajouter des images</translatorcomment>
+ <translation>Irudiak gehitu</translation>
+ </message>
+ <message>
+ <source>Add Pages from File</source>
+ <translatorcomment>Ajouter des pages depuis un fichier</translatorcomment>
+ <translation>Orriak gehitu fitxategi batetik</translation>
+ </message>
+ <message>
+ <source>Duplicating Document %1</source>
+ <translatorcomment>Copie du document %1 en cours</translatorcomment>
+ <translation type="unfinished">%1 dokumentua bikoizten ari</translation>
+ </message>
+ <message>
+ <source>Document %1 copied</source>
+ <translatorcomment>Document %1 copié</translatorcomment>
+ <translation>%1 dokumentua kopiatua</translation>
+ </message>
+ <message>
+ <source>Remove Page</source>
+ <translatorcomment>Supprimer la page</translatorcomment>
+ <translation type="unfinished">Orria kendu</translation>
+ </message>
+ <message>
+ <source>Importing file %1...</source>
+ <translatorcomment>Importation du fichier %1...</translatorcomment>
+ <translation type="unfinished">%1 fitxategia inportatzen ari...</translation>
+ </message>
+ <message>
+ <source>Failed to import file ... </source>
+ <translatorcomment>Impossible d'importer le fichier ...</translatorcomment>
+ <translation type="unfinished">Fitxategiaren inportatzeak huts egin du...</translation>
+ </message>
+ <message>
+ <source>Import all Images from Folder</source>
+ <translatorcomment>Importer toutes les images d'un dossier</translatorcomment>
+ <translation type="unfinished">Karpetako irudi guztiak inportatu</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translatorcomment>Supprimer</translatorcomment>
+ <translation>Ezabatu</translation>
+ </message>
+ <message>
+ <source>Empty</source>
+ <translatorcomment>Vider</translatorcomment>
+ <translation>Hustu</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translatorcomment>Corbeille</translatorcomment>
+ <translation>Zakarrontzia</translation>
+ </message>
+ <message>
+ <source>Open Document</source>
+ <translatorcomment>Ouvrir le document</translatorcomment>
+ <translation>Dokumentua ireki</translation>
+ </message>
+ <message>
+ <source>Add all Images to Document</source>
+ <translatorcomment>Ajouter toutes les images au document</translatorcomment>
+ <translation type="unfinished">Irudi guztiak dokumentuan gehitu</translation>
+ </message>
+ <message>
+ <source>All Images (%1)</source>
+ <translatorcomment>Toutes les images (%1)</translatorcomment>
+ <translation>Irudi guztiak (%1)</translation>
+ </message>
+ <message>
+ <source>Selection does not contain any image files!</source>
+ <translatorcomment>La sélection ne contient aucune image !</translatorcomment>
+ <translation type="unfinished">Hautapenak irudirik ez dauka !</translation>
+ </message>
+ <message>
+ <source>Page %1</source>
+ <translatorcomment>Page %1</translatorcomment>
+ <translation>%1 orria</translation>
+ </message>
+ <message>
+ <source>The document '%1' has been generated with a newer version of Sankore (%2). By opening it, you may lose some information. Do you want to proceed?</source>
+ <translatorcomment>Le document '%1' a été créé avec une version plus récente d'Open-Sankoré (%2). En l'ouvrant, vous risquez de perdre certains éléments. Désirez-vous continuer ?</translatorcomment>
+ <translation type="unfinished">'%1' dokumentua Sankoreren bertsio berriago (%2) batekin sortua izan da. Irekiz geroz, informazio zenbait gal ditzakezu. Segitu nahi duzu ?</translation>
+ </message>
+ <message numerus="yes">
+ <source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
+ <translatorcomment>Voulez-vous vraiment effacer %n page de ce document '%1'?</translatorcomment>
+ <translation type="unfinished">
+ <numerusform>Segur zaude '%1' dokumentu horren orri %n kendu nahi duzula ?</numerusform>
+ <numerusform>Segur zaude '%1' dokumentu horren %n orri kendu nahi dituzula ?</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Title page</source>
+ <translatorcomment>Page de titre</translatorcomment>
+ <translation>Titulu orria</translation>
+ </message>
+ <message>
+ <source>Folder does not contain any image files</source>
+ <translatorcomment>Page de titre</translatorcomment>
+ <translation>Irudirik ez dago karpetan</translation>
+ </message>
+ <message>
+ <source>Untitled Documents</source>
+ <translatorcomment>Documents sans titre</translatorcomment>
+ <translation type="unfinished">Dokumentu izengabeak</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentManager</name>
+ <message>
+ <source>images</source>
+ <translatorcomment>images</translatorcomment>
+ <translation type="unfinished">irudi</translation>
+ </message>
+ <message>
+ <source>videos</source>
+ <translatorcomment>vidéos</translatorcomment>
+ <translation type="unfinished">bideo</translation>
+ </message>
+ <message>
+ <source>objects</source>
+ <translatorcomment>objets</translatorcomment>
+ <translation>objektu</translation>
+ </message>
+ <message>
+ <source>widgets</source>
+ <translatorcomment>appliquettes</translatorcomment>
+ <translation type="unfinished">trepetxuak</translation>
+ </message>
+ <message>
+ <source>All supported files (*.%1)</source>
+ <translatorcomment>Tous les fichiers supportés (*.%1)</translatorcomment>
+ <translation>Fitxategi guztiak (*.%1)</translation>
+ </message>
+ <message>
+ <source>File %1 saved</source>
+ <translatorcomment>Fichier %1 enregistré</translatorcomment>
+ <translation type="unfinished">%1 fitxategia gordea</translation>
+ </message>
+ <message>
+ <source>Inserting page %1 of %2</source>
+ <translatorcomment>Ajout de la page %1 sur %2</translatorcomment>
+ <translation>%2tik %1 orria gehitua</translation>
+ </message>
+ <message>
+ <source>Import successful.</source>
+ <translatorcomment>Importation réussie.</translatorcomment>
+ <translation type="unfinished">Inportatzea ongi burutu da.</translation>
+ </message>
+ <message>
+ <source>Import of file %1 successful.</source>
+ <translatorcomment>Importation du document %1 réussie.</translatorcomment>
+ <translation type="unfinished">%1 dokumentuaren inportatzea ongi burutu da.</translation>
+ </message>
+ <message>
+ <source>Importing file %1</source>
+ <translatorcomment>Importation de %1 en cours</translatorcomment>
+ <translation type="unfinished">%1 fitxategia inportatzen ari</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentNavigator</name>
+ <message>
+ <source>Page %0</source>
+ <translatorcomment>Page %0</translatorcomment>
+ <translation>%0 orria</translation>
+ </message>
+ <message>
+ <source>Title page</source>
+ <translatorcomment>Page de titre</translatorcomment>
+ <translation>Titulu orria</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentPublisher</name>
+ <message>
+ <source>Export failed.</source>
+ <translatorcomment>Echec de l'export.</translatorcomment>
+ <translation type="unfinished">Esportatzeak huts egin du.</translation>
+ </message>
+ <message>
+ <source>Export canceled ...</source>
+ <translatorcomment>Export annulée ...</translatorcomment>
+ <translation type="unfinished">Esportatzea ezeztatua izan da...</translation>
+ </message>
+ <message>
+ <source>Converting page %1/%2 ...</source>
+ <translatorcomment>Conversion de la page %1/%2 ...</translatorcomment>
+ <translation type="unfinished">%1/%2 orriaren konbertsioa egiten ari ...</translation>
+ </message>
+ <message>
+ <source>Credentials has to not been filled out yet.</source>
+ <translatorcomment>Les nom d'utilisateur et mot de passe n'ont pas été encore renseignés.</translatorcomment>
+ <translation type="unfinished">Erabiltzaile izena eta pasahitza ez dituzu oraino emanak.</translation>
+ </message>
+ <message>
+ <source>Uploading Sankore File on Web.</source>
+ <translatorcomment>Fichier Open-Sankoré en cours de transfert vers Planète-Sankoré.</translatorcomment>
+ <translation type="unfinished">Open-Sankore fitxategia sarean kargatzen ari.</translation>
+ </message>
+ <message>
+ <source>Document uploaded correctly on the web.</source>
+ <translatorcomment>Document Open-Sankoré correctement transféré sur Planète Sankoré.</translatorcomment>
+ <translation type="unfinished">Open-Sankore fitxategia behar bezala sarean kargatu da.</translation>
+ </message>
+ <message>
+ <source>Failed to upload document on the web.</source>
+ <translatorcomment>Echec du transfert du document vers Planète-Sankoré.</translatorcomment>
+ <translation type="unfinished">Dokumentua sarean kargatzeak huts egin du.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation type="unfinished">Onartu</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished">Utzi</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation type="unfinished">Zakarrontzia</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">%2tik %1orria kopiatzen ari</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>Orri %1 kopiatua</numerusform>
+ <numerusform>%1 orri kopiatuak</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeWidget</name>
+ <message>
+ <source>%1 (copy)</source>
+ <translatorcomment>%1 (copie)</translatorcomment>
+ <translation>%1 (kopia)</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translatorcomment>Copie de la page %1/%2 en cours</translatorcomment>
+ <translation type="unfinished">%2tik %1orria kopiatzen ari</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translatorcomment>%1 page copiée</translatorcomment>
+ <translation>
+ <numerusform>Orri %1 kopiatua</numerusform>
+ <numerusform>%1 orri kopiatuak</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDownloadWidget</name>
+ <message>
+ <source>Downloading files</source>
+ <translatorcomment>Téléchargement des fichiers en cours</translatorcomment>
+ <translation type="unfinished">Fitxategiak kargatzen ari</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translatorcomment>Annuler</translatorcomment>
+ <translation>Utzi</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportAdaptor</name>
+ <message>
+ <source>Warnings during export was appeared</source>
+ <translatorcomment>Avertissements lors de l'exportation</translatorcomment>
+ <translation>Abisuak agertu dira esportatzerakoan</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportCFF</name>
+ <message>
+ <source>Export to IWB</source>
+ <translatorcomment>Exporter au format CFF (*.iwb)</translatorcomment>
+ <translation>CFF (*.iwb) formatuan esportatu</translation>
+ </message>
+ <message>
+ <source>Export as IWB File</source>
+ <translatorcomment>Exporter au format CFF (*.iwb)</translatorcomment>
+ <translation>CFF (*.iwb) formatuan esportatu</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translatorcomment>Exportation du document...</translatorcomment>
+ <translation type="unfinished">Dokumentua esportatzen ari...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translatorcomment>Export réussi.</translatorcomment>
+ <translation type="unfinished">Esportatzea ongi burutu da.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translatorcomment>Echec de l'export.</translatorcomment>
+ <translation type="unfinished">Esportatzeak huts egin du.</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportDocument</name>
+ <message>
+ <source>Export as UBZ File</source>
+ <translatorcomment>Exporter au format UBZ (*.ubz)</translatorcomment>
+ <translation>UBZ (*.ubz) formatuan esportatu</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translatorcomment>Export réussi.</translatorcomment>
+ <translation type="unfinished">Esportatzea ongi burutu da.</translation>
+ </message>
+ <message>
+ <source>Page</source>
+ <translatorcomment>Page</translatorcomment>
+ <translation type="unfinished">Orria</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translatorcomment>Exportation du document...</translatorcomment>
+ <translation type="unfinished">Dokumentua esportatzen ari...</translation>
+ </message>
+ <message>
+ <source>Exporting %1 %2 of %3</source>
+ <translatorcomment>Exportation %1 %2 sur %3</translatorcomment>
+ <translation type="unfinished">%3tik %1 %2 esportatzen</translation>
+ </message>
+ <message>
+ <source>Export to Sankore Format</source>
+ <translatorcomment>Exporter au format Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open Sankore formatuan esportatu</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">Dokumentua esportatzen ari...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished">Esportatzea ongi burutu da.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished">Esportatzeak huts egin du.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBExportFullPDF</name>
+ <message>
+ <source>Export as PDF File</source>
+ <translatorcomment>Exporter au format PDF (*.pdf)</translatorcomment>
+ <translation>PDF (*.pdf) formatuan esportatu</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translatorcomment>Exportation du document...</translatorcomment>
+ <translation type="unfinished">Dokumentua esportatzen ari...</translation>
+ </message>
+ <message>
+ <source>Export to PDF</source>
+ <translatorcomment>Exporter au format PDF</translatorcomment>
+ <translation>PDF formatuan esportatu</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translatorcomment>Export terminé.</translatorcomment>
+ <translation type="unfinished">Esportatzea ongi burutu da.</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportPDF</name>
+ <message>
+ <source>Export as PDF File</source>
+ <translatorcomment>Exporter au format PDF (*.pdf)</translatorcomment>
+ <translation>PDF (*.pdf) formatuan esportatu</translation>
+ </message>
+ <message>
+ <source>Exporting page %1 of %2</source>
+ <translatorcomment>Exportation de la page %1 sur %2</translatorcomment>
+ <translation type="unfinished">%2tik %1 orria esportatzen ari</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished">Esportatzea ongi burutu da.</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">Dokumentua esportatzen ari...</translation>
+ </message>
+ <message>
+ <source>Export to PDF</source>
+ <translation>PDF formatuan esportatu</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportWeb</name>
+ <message>
+ <source>Page</source>
+ <translation type="unfinished">Orria</translation>
+ </message>
+ <message>
+ <source>Export as Web data</source>
+ <translatorcomment>Exporter en tant que donnée Web</translatorcomment>
+ <translation>Web data gisa esportatu</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">Dokumentua esportatzen ari...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished">Esportatzea ongi burutu da.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished">Esportatzeak huts egin du.</translation>
+ </message>
+ <message>
+ <source>Export to Web Browser</source>
+ <translatorcomment>Exporter vers un navigateur Web</translatorcomment>
+ <translation type="unfinished">Web nabigatzailera esportatu</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeatureProperties</name>
+ <message>
+ <source>Add to page</source>
+ <translatorcomment>Ajout page j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
+ <translation type="unfinished">Orrian gehitu</translation>
+ </message>
+ <message>
+ <source>Set as background</source>
+ <translatorcomment>Ajout en fond - j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
+ <translation type="unfinished">Hondo gisa gehitu</translation>
+ </message>
+ <message>
+ <source>Add to library</source>
+ <translatorcomment>Ajout bibliothèque - j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
+ <translation>Liburutegian gehitu</translation>
+ </message>
+ <message>
+ <source>Object informations</source>
+ <translatorcomment>Informations</translatorcomment>
+ <translation>Informazioak</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Gehitu</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesActionBar</name>
+ <message>
+ <source>Add to favorites</source>
+ <translatorcomment>Ajouter aux favoris</translatorcomment>
+ <translation>Gogokoetan gehitu</translation>
+ </message>
+ <message>
+ <source>Share</source>
+ <translatorcomment>Partager</translatorcomment>
+ <translation>Partekatu</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translatorcomment>Rechercher</translatorcomment>
+ <translation>Bilatu</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translatorcomment>Supprimer</translatorcomment>
+ <translation>Ezabatu</translation>
+ </message>
+ <message>
+ <source>Back to folder</source>
+ <translatorcomment>Retour au répertoire</translatorcomment>
+ <translation>Karpetara itzuli</translation>
+ </message>
+ <message>
+ <source>Remove from favorites</source>
+ <translatorcomment>Supprimer des favoris</translatorcomment>
+ <translation>Gogokoetarik kendu</translation>
+ </message>
+ <message>
+ <source>Create new folder</source>
+ <translatorcomment>Créer nouveau dossier</translatorcomment>
+ <translation>Karpeta berria sortu</translation>
+ </message>
+ <message>
+ <source>Rescan file system</source>
+ <translatorcomment>Parcourir le système de fichiers</translatorcomment>
+ <translation>Fitxategi sistema berreskaneatu</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesController</name>
+ <message>
+ <source>ImportedImage</source>
+ <translatorcomment>Image importée</translatorcomment>
+ <translation>Irudi inportatua</translation>
+ </message>
+ <message>
+ <source>Audios</source>
+ <translatorcomment>Sons</translatorcomment>
+ <translation>Audioak</translation>
+ </message>
+ <message>
+ <source>Movies</source>
+ <translatorcomment>Vidéos</translatorcomment>
+ <translation>Bideoak</translation>
+ </message>
+ <message>
+ <source>Pictures</source>
+ <translatorcomment>Images</translatorcomment>
+ <translation>Irudiak</translation>
+ </message>
+ <message>
+ <source>Animations</source>
+ <translatorcomment>Animations</translatorcomment>
+ <translation>Animazioak</translation>
+ </message>
+ <message>
+ <source>Interactivities</source>
+ <translatorcomment>Interactivités</translatorcomment>
+ <translation>Elkarreraginak</translation>
+ </message>
+ <message>
+ <source>Applications</source>
+ <translatorcomment>Applications</translatorcomment>
+ <translation>Aplikazioak</translation>
+ </message>
+ <message>
+ <source>Shapes</source>
+ <translatorcomment>Formes</translatorcomment>
+ <translation>Formak</translation>
+ </message>
+ <message>
+ <source>Favorites</source>
+ <translatorcomment>Favoris</translatorcomment>
+ <translation>Gogokoak</translation>
+ </message>
+ <message>
+ <source>Web search</source>
+ <translatorcomment>Recherche Web</translatorcomment>
+ <translation type="unfinished">Web bilaketa</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translatorcomment>Corbeille</translatorcomment>
+ <translation>Zakarrontzia</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation type="unfinished">Lastermarkak</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation type="unfinished">Weba</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesNewFolderDialog</name>
+ <message>
+ <source>Accept</source>
+ <translatorcomment>Accepter</translatorcomment>
+ <translation>Onartu</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translatorcomment>Annuler</translatorcomment>
+ <translation>Utzi</translation>
+ </message>
+ <message>
+ <source>Enter a new folder name</source>
+ <translatorcomment>Saisir le nom du nouveau dossier</translatorcomment>
+ <translation type="unfinished">Karpeta berria izendatu</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesProgressInfo</name>
+ <message>
+ <source>Loading </source>
+ <translatorcomment>Chargement en cours</translatorcomment>
+ <translation type="unfinished">Kargatzen ari</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsGroupContainerItemDelegate</name>
+ <message>
+ <source>Locked</source>
+ <translatorcomment>Verrouillé</translatorcomment>
+ <translation>Giltzatua</translation>
+ </message>
+ <message>
+ <source>Visible on Extended Screen</source>
+ <translatorcomment>Visible sur l'écran étendu</translatorcomment>
+ <translation>Urrungo pantailan ikusgai</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished">Egintza bat gehitu</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsItemDelegate</name>
+ <message>
+ <source>Locked</source>
+ <translatorcomment>Verrouillé</translatorcomment>
+ <translation>Giltzatua</translation>
+ </message>
+ <message>
+ <source>Visible on Extended Screen</source>
+ <translatorcomment>Visible sur l'écran étendu</translatorcomment>
+ <translation>Urrungo pantailan ikusgai</translation>
+ </message>
+ <message>
+ <source>Go to Content Source</source>
+ <translatorcomment>Aller à la source du contenu</translatorcomment>
+ <translation>Edukiaren iturburura joan</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished">Egintza bat gehitu</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsTextItem</name>
+ <message>
+ <source><Type Text Here></source>
+ <translatorcomment><Saisir votre texte ici></translatorcomment>
+ <translation type="unfinished"><Testua hemen idatz></translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsTextItemDelegate</name>
+ <message>
+ <source>Text Color</source>
+ <translatorcomment>Couleur du texte</translatorcomment>
+ <translation type="unfinished">Testu-kolorea</translation>
+ </message>
+ <message>
+ <source>Editable</source>
+ <translatorcomment>Ãditable</translatorcomment>
+ <translation>Editagarri</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsWidgetItem</name>
+ <message>
+ <source>Loading ...</source>
+ <translatorcomment>Chargement en cours ...</translatorcomment>
+ <translation type="unfinished">Kargatzen ari...</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsWidgetItemDelegate</name>
+ <message>
+ <source>Frozen</source>
+ <translatorcomment>Figé</translatorcomment>
+ <translation type="unfinished">Izoztua</translation>
+ </message>
+ <message>
+ <source>Transform as Tool </source>
+ <translatorcomment>Transformer en outil</translatorcomment>
+ <translation>Tresna bilakatu</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportCFF</name>
+ <message>
+ <source>Common File Format (</source>
+ <translatorcomment>Format de fichier CFF (</translatorcomment>
+ <translation>CFF fitxategi formatua (</translation>
+ </message>
+ <message>
+ <source>Importing file %1...</source>
+ <translatorcomment>Importation du fichier %1...</translatorcomment>
+ <translation type="unfinished">%1 fitxategia inportatzen ari...</translation>
+ </message>
+ <message>
+ <source>Import of file %1 failed.</source>
+ <translatorcomment>Echec de l'import du fichier %1.</translatorcomment>
+ <translation type="unfinished">%1 fitxategiaren inportatzeak huts egin du.</translation>
+ </message>
+ <message>
+ <source>Import successful.</source>
+ <translatorcomment>Import terminée.</translatorcomment>
+ <translation type="unfinished">Inportatzea ongi burutu da.</translation>
+ </message>
+ <message>
+ <source>Import failed.</source>
+ <translatorcomment>Echec de l'import.</translatorcomment>
+ <translation type="unfinished">Inportatzeak huts egin du.</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportDocument</name>
+ <message>
+ <source>Importing file %1...</source>
+ <translatorcomment>Importation du fichier %1...</translatorcomment>
+ <translation type="unfinished">%1 fitxategia inportatzen ari...</translation>
+ </message>
+ <message>
+ <source>Import successful.</source>
+ <translatorcomment>Import terminé.</translatorcomment>
+ <translation type="unfinished">Inportatzea ongi burutu da.</translation>
+ </message>
+ <message>
+ <source>Import of file %1 failed.</source>
+ <translatorcomment>Ãchec de l'import du fichier %1.</translatorcomment>
+ <translation type="unfinished">%1 fitxategiaren inportatzeak huts egin du.</translation>
+ </message>
+ <message>
+ <source>Open-Sankore (*.ubz)</source>
+ <translatorcomment>Open-Sankoré (*.ubz)</translatorcomment>
+ <translation type="unfinished">Open-Sankore (*.ubz)</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBImportImage</name>
+ <message>
+ <source>Image Format (</source>
+ <translatorcomment>Format d'image (</translatorcomment>
+ <translation>Irudi formatua (</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportPDF</name>
+ <message>
+ <source>Portable Document Format (*.pdf)</source>
+ <translatorcomment>Format PDF (*.pdf)</translatorcomment>
+ <translation>PDF formatua (*.pdf)</translation>
+ </message>
+ <message>
+ <source>PDF import failed.</source>
+ <translatorcomment>Ãchec de l'import du fichier PDF.</translatorcomment>
+ <translation type="unfinished">PDF fitxategiaren inportatzeak huts egin du.</translation>
+ </message>
+ <message>
+ <source>Importing page %1 of %2</source>
+ <translatorcomment>Importation de la page %1 sur %2</translatorcomment>
+ <translation type="unfinished">%2tik %1 orria inportatzen ari</translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublisher</name>
+ <message>
+ <source>Error while publishing video to intranet (%1)</source>
+ <translatorcomment>Erreur durant la publication de la vidéo sur l'intranet (%1)</translatorcomment>
+ <translation>Errorea bideoa intranetean argitaratzean (%1)</translation>
+ </message>
+ <message>
+ <source>Publishing to Intranet in progress %1 %</source>
+ <translatorcomment>Publication sur l'intranet en cours %1 %</translatorcomment>
+ <translation type="unfinished">Intranetean argitaratzen ari : % %1</translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublishingDialog</name>
+ <message>
+ <source>Publish</source>
+ <translatorcomment>Publier</translatorcomment>
+ <translation>Argitaratu</translation>
+ </message>
+</context>
+<context>
+ <name>UBKeyboardPalette</name>
+ <message>
+ <source>Enter</source>
+ <translatorcomment>Retour</translatorcomment>
+ <translation>Sartu</translation>
+ </message>
+</context>
+<context>
+ <name>UBMainWindow</name>
+ <message>
+ <source>Yes</source>
+ <translatorcomment>Oui</translatorcomment>
+ <translation>Bai</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translatorcomment>Non</translatorcomment>
+ <translation>Ez</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translatorcomment>Ok</translatorcomment>
+ <translation>Ados</translation>
+ </message>
+</context>
+<context>
+ <name>UBMessagesDialog</name>
+ <message>
+ <source>Close</source>
+ <translatorcomment>Fermer</translatorcomment>
+ <translation type="unfinished">Hetsi</translation>
+ </message>
+</context>
+<context>
+ <name>UBNetworkAccessManager</name>
+ <message>
+ <source><qt>Enter username and password for "%1" at %2</qt></source>
+ <translatorcomment><qt>Renseigner le nom de l'utilisateur et le mot de passe pour "%1" Ã %2</qt></translatorcomment>
+ <translation><qt>Erabiltzaile-izena eta pasahitza sartu "%1"entzat %2an</qt></translation>
+ </message>
+ <message>
+ <source>Failed to log to Proxy</source>
+ <translatorcomment>Connexion au proxy impossible</translatorcomment>
+ <translation>Proxy-ari ezin konektatuz</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translatorcomment>Oui</translatorcomment>
+ <translation>Bai</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translatorcomment>Non</translatorcomment>
+ <translation>Ez</translation>
+ </message>
+ <message>
+ <source>SSL Errors:
+
+%1
+
+%2
+
+Do you want to ignore these errors for this host?</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBPersistenceManager</name>
+ <message>
+ <source>(copy)</source>
+ <translatorcomment>(copie)</translatorcomment>
+ <translation>(kopia)</translation>
+ </message>
+ <message>
+ <source>Document Repository Loss</source>
+ <translatorcomment>Accès perdu vers le répertoire des documents</translatorcomment>
+ <translation type="unfinished">Dokumentu biltegiaren sarbidea galdua</translation>
+ </message>
+ <message>
+ <source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
+ <translatorcomment>Open-Sankoré a perdu l'accès au répertoire des documents '%1'. L'application doit malheureusement être fermée pour éviter tout risque de corruption de vos fichiers. Les dernières modifications effectuées risquent d'être perdues.</translatorcomment>
+ <translation type="unfinished">Open Sankorek '%1' dokumentu biltegiaren sarbidea galdu du. Zoritxarrez, aplikazioak hetsi beharko du fitxategien ez hondatzeko. Azken aldaketak gal litezke.</translation>
+ </message>
+</context>
+<context>
+ <name>UBPlatformUtils</name>
+ <message>
+ <source>English</source>
+ <translatorcomment>Anglais</translatorcomment>
+ <translation>Ingelesa</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translatorcomment>Russe</translatorcomment>
+ <translation>Errusiera</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translatorcomment>Allemand</translatorcomment>
+ <translation>Alemana</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translatorcomment>Français</translatorcomment>
+ <translation>Frantsesa</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translatorcomment>Français suisse</translatorcomment>
+ <translation type="unfinished">Suitzako frantsesa</translation>
+ </message>
+</context>
+<context>
+ <name>UBPodcastController</name>
+ <message>
+ <source>Failed to start encoder ...</source>
+ <translatorcomment>Ãchec du démarrage de l'encodeur...</translatorcomment>
+ <translation>Kodetzailearen abiatzeak huts egin du...</translation>
+ </message>
+ <message>
+ <source>No Podcast encoder available ...</source>
+ <translatorcomment>Aucun encodeur disponible.pour le podcast...</translatorcomment>
+ <translation>Podcast kodetzailea ez dago eskuragarri...</translation>
+ </message>
+ <message>
+ <source>Part %1</source>
+ <translatorcomment>Partie %1</translatorcomment>
+ <translation>%1 partea</translation>
+ </message>
+ <message>
+ <source>on your desktop ...</source>
+ <translatorcomment>sur le bureau ...</translatorcomment>
+ <translation>Mahaigainean...</translation>
+ </message>
+ <message>
+ <source>in folder %1</source>
+ <translatorcomment>dans le dossier %1</translatorcomment>
+ <translation>%1 karpetan</translation>
+ </message>
+ <message>
+ <source>Podcast created %1</source>
+ <translatorcomment>Podcast créé %1</translatorcomment>
+ <translation>Podcast sortua %1</translation>
+ </message>
+ <message>
+ <source>Podcast recording error (%1)</source>
+ <translatorcomment>Erreur d'enregistrement du podcast (%1)</translatorcomment>
+ <translation type="unfinished">Errorea podcasta grabatzean (%1)</translation>
+ </message>
+ <message>
+ <source>Default Audio Input</source>
+ <translatorcomment>Entrée audio par défaut</translatorcomment>
+ <translation type="unfinished">Audio sarrera lehenetsia</translation>
+ </message>
+ <message>
+ <source>No Audio Recording</source>
+ <translatorcomment>Pas d'enregistrement audio</translatorcomment>
+ <translation>Audio grabaketarik ez dago</translation>
+ </message>
+ <message>
+ <source>Small</source>
+ <translatorcomment>Petit</translatorcomment>
+ <translation type="unfinished">Ttipia</translation>
+ </message>
+ <message>
+ <source>Medium</source>
+ <translatorcomment>Moyen</translatorcomment>
+ <translation>Ertaina</translation>
+ </message>
+ <message>
+ <source>Full</source>
+ <translatorcomment>Maximum</translatorcomment>
+ <translation>Osoa</translation>
+ </message>
+ <message>
+ <source>Publish to Intranet</source>
+ <translatorcomment>Publier sur l'intranet</translatorcomment>
+ <translation type="unfinished">Intranetean argitaratu</translation>
+ </message>
+ <message>
+ <source>Publish to Youtube</source>
+ <translatorcomment>Publier sur Youtube</translatorcomment>
+ <translation>YouTuben argitaratu</translation>
+ </message>
+ <message>
+ <source>Sankore Cast</source>
+ <translatorcomment>Podcast Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open Sankore podcasta</translation>
+ </message>
+</context>
+<context>
+ <name>UBPreferencesController</name>
+ <message>
+ <source>Marker is pressure sensitive</source>
+ <translatorcomment>Stylet sensible à la pression</translatorcomment>
+ <translation>Arkatz presio-sentikorra</translation>
+ </message>
+ <message>
+ <source>version: </source>
+ <translatorcomment>version :</translatorcomment>
+ <translation>bertsioa :</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished">Alemana</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation type="unfinished">Ingelesa</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished">Frantsesa</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation type="unfinished">Suitzako frantsesa</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished">Errusiera</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBProxyLoginDlg</name>
+ <message>
+ <source>Proxy Login</source>
+ <translatorcomment>Identification sur le Proxy</translatorcomment>
+ <translation>Identifikazioa Proxyan</translation>
+ </message>
+ <message>
+ <source>Username:</source>
+ <translatorcomment>Nom d'utilisateur :</translatorcomment>
+ <translation>Erabiltzaile izena :</translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translatorcomment>Mot de passe :</translatorcomment>
+ <translation>Pasahitza :</translation>
+ </message>
+</context>
+<context>
+ <name>UBPublicationDlg</name>
+ <message>
+ <source>Publish document on the web</source>
+ <translatorcomment>Publier un fichier Open-Sankoré sur Planète-Sankoré</translatorcomment>
+ <translation type="unfinished">Open Sankore dokumentua sarean argitaratu</translation>
+ </message>
+ <message>
+ <source>Title:</source>
+ <translatorcomment>Titre :</translatorcomment>
+ <translation>Titulua :</translation>
+ </message>
+ <message>
+ <source>Description:</source>
+ <translatorcomment>Description :</translatorcomment>
+ <translation>Azalpena :</translation>
+ </message>
+ <message>
+ <source>Publish</source>
+ <translatorcomment>Publier</translatorcomment>
+ <translation>Argitaratu</translation>
+ </message>
+</context>
+<context>
+ <name>UBSettings</name>
+ <message>
+ <source>My Movies</source>
+ <translatorcomment>Mes films</translatorcomment>
+ <translation type="unfinished">Nire bideoak</translation>
+ </message>
+ <message>
+ <source>/Web</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBTGActionWidget</name>
+ <message>
+ <source>Teacher</source>
+ <translatorcomment>Enseignant</translatorcomment>
+ <translation type="unfinished">Irakaslea</translation>
+ </message>
+ <message>
+ <source>Student</source>
+ <translatorcomment>Elève/Etudiant</translatorcomment>
+ <translation type="unfinished">Ikaslea</translation>
+ </message>
+ <message>
+ <source>Type task here ...</source>
+ <translatorcomment>Proposer une action ici ...</translatorcomment>
+ <translation type="unfinished">Egintza bat proposatu hemen ...</translation>
+ </message>
+</context>
+<context>
+ <name>UBTGMediaWidget</name>
+ <message>
+ <source>drop media here ...</source>
+ <translatorcomment>Glisser un média ici ...</translatorcomment>
+ <translation type="unfinished">Media bat hona lerratu...</translation>
+ </message>
+ <message>
+ <source>Type title here...</source>
+ <translatorcomment>Renseigner le titre ici ...</translatorcomment>
+ <translation>Titulua hemen ezarri...</translation>
+ </message>
+</context>
+<context>
+ <name>UBTGUrlWidget</name>
+ <message>
+ <source>Insert link title here...</source>
+ <translatorcomment>Renseigner le titre du lien ici ...</translatorcomment>
+ <translation>Loturaren titulua hemen ezarri...</translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherBarWidget</name>
+ <message>
+ <source></source>
+ <translation></translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherGuideEditionWidget</name>
+ <message>
+ <source>Type title here ...</source>
+ <translatorcomment>Renseigner le titre de l'activité...</translatorcomment>
+ <translation>Jardueraren titulua hemen ezarri...</translation>
+ </message>
+ <message>
+ <source>Type comment here ...</source>
+ <translatorcomment>Renseigner le commentaire ici ...</translatorcomment>
+ <translation type="unfinished">Iruzkina hemen ezarri...</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translatorcomment>Ajouter une action</translatorcomment>
+ <translation type="unfinished">Egintza bat gehitu</translation>
+ </message>
+ <message>
+ <source>Add a media</source>
+ <translatorcomment>Ajouter un média</translatorcomment>
+ <translation>Media bat gehitu</translation>
+ </message>
+ <message>
+ <source>Add a link</source>
+ <translatorcomment>Ajouter un lien web</translatorcomment>
+ <translation>Internet lotura bat gehitu</translation>
+ </message>
+ <message>
+ <source>Page: %0</source>
+ <translatorcomment>Page: %0</translatorcomment>
+ <translation>Orria : %0</translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherGuidePageZeroWidget</name>
+ <message>
+ <source>Type session title here ...</source>
+ <translatorcomment>Renseigner le titre de la séance ...</translatorcomment>
+ <translation type="unfinished">Saioren titulua hemen ezarri...</translation>
+ </message>
+ <message>
+ <source>Author(s)</source>
+ <translatorcomment>Auteur(s) :</translatorcomment>
+ <translation type="unfinished">Egilea(k) :</translation>
+ </message>
+ <message>
+ <source>Type authors here ...</source>
+ <translatorcomment>Ajouter les auteurs ici ...</translatorcomment>
+ <translation>Autoreak hemen gehitu...</translation>
+ </message>
+ <message>
+ <source>Objective(s)</source>
+ <translatorcomment>Objectif(s) de la séance :</translatorcomment>
+ <translation type="unfinished">Saioaren helburua(k) :</translation>
+ </message>
+ <message>
+ <source>Type objectives here...</source>
+ <translatorcomment>Ajouter les objectifs ici ...</translatorcomment>
+ <translation>Helburuak hemen gehitu...</translation>
+ </message>
+ <message>
+ <source>Resource indexing</source>
+ <translatorcomment>Métadonnées de la ressource</translatorcomment>
+ <translation>Baliabidearen datuak</translation>
+ </message>
+ <message>
+ <source>Keywords:</source>
+ <translatorcomment>Mot(s) clé(s) :</translatorcomment>
+ <translation>Gako-hitza(k) :</translation>
+ </message>
+ <message>
+ <source>Type keywords here ...</source>
+ <translatorcomment>Ajouter le(s) mot(s) clé(s) ici ...</translatorcomment>
+ <translation type="unfinished">Gako-hitza(k) hemen gehitu...</translation>
+ </message>
+ <message>
+ <source>Level:</source>
+ <translatorcomment>Niveau(x) scolaire(s) :</translatorcomment>
+ <translation>Ikasmaila(k) :</translation>
+ </message>
+ <message>
+ <source>Subjects:</source>
+ <translatorcomment>Discipline(s) :</translatorcomment>
+ <translation>Ikasgaia(k) :</translation>
+ </message>
+ <message>
+ <source>Type:</source>
+ <translatorcomment>Type(s) :</translatorcomment>
+ <translation>Mota(k) :</translation>
+ </message>
+ <message>
+ <source>Licence</source>
+ <translatorcomment>Licence</translatorcomment>
+ <translation>Lizentzia</translation>
+ </message>
+ <message>
+ <source>Attribution CC BY</source>
+ <translatorcomment>Licence recommandée (CC Paternité 3.0)</translatorcomment>
+ <translation type="unfinished">Gomendatu lizentzia (CC-by 3.0 - Aitortu)</translation>
+ </message>
+ <message>
+ <source>Attribution-NoDerivs CC BY-ND</source>
+ <translatorcomment>CC Paternité, Pas de modification</translatorcomment>
+ <translation>CC-by-nd (Aitortu, Eraldaketarik Gabe)</translation>
+ </message>
+ <message>
+ <source>Attribution-ShareAlike CC BY-SA</source>
+ <translatorcomment>CC Paternité, Partage à l'identique</translatorcomment>
+ <translation>CC-by-sa (Aitortu, Partekatu Berdin)</translation>
+ </message>
+ <message>
+ <source>Attribution-NonCommercial CC BY-NC</source>
+ <translatorcomment>CC Paternité, Pas d'utilisation commerciale</translatorcomment>
+ <translation>CC-by-nc (Aitortu, Ez Komertziala)</translation>
+ </message>
+ <message>
+ <source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
+ <translatorcomment>CC Paternité, Pas d'utilisation commerciale, Pas de modification</translatorcomment>
+ <translation>CC-by-nc-nd (Aitortu, Ez Komertziala, Eraldaketarik Gabe)</translation>
+ </message>
+ <message>
+ <source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
+ <translatorcomment>CC Paternité, Pas d'utilisation commerciale, Partage à l'identique</translatorcomment>
+ <translation>CC-by-nc-sa (Aitortu, Ez Komertziala, Partekatu Berdin)</translation>
+ </message>
+ <message>
+ <source>Public domain</source>
+ <translatorcomment>Domaine public</translatorcomment>
+ <translation>Jabetza Publikoa</translation>
+ </message>
+ <message>
+ <source>Copyright</source>
+ <translatorcomment>Protection par le droit d'auteur - attention le copyright n'est pas une protection ou une licence puisque ca existe même pour les licences libres les plus ouvertes. C'est simplement la mention détenteur des droits de reproduction (celui qui fixe la licence) . Le terme est donc impropre même en anglais.</translatorcomment>
+ <translation>Copyright</translation>
+ </message>
+ <message>
+ <source>Title page</source>
+ <translatorcomment>Page de titre</translatorcomment>
+ <translation>Titulu orria</translation>
+ </message>
+ <message>
+ <source>Created the:
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Updated the:
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherGuidePresentationWidget</name>
+ <message>
+ <source>Page: %0</source>
+ <translatorcomment>Page: %0</translatorcomment>
+ <translation>Orria : %0</translation>
+ </message>
+</context>
+<context>
+ <name>UBThumbnailAdaptor</name>
+ <message>
+ <source>Generating preview thumbnails ...</source>
+ <translatorcomment>Création de vignettes en cours ...</translatorcomment>
+ <translation type="unfinished">Koadro ttipiaren sortzen ari...</translation>
+ </message>
+ <message>
+ <source>%1 thumbnails generated ...</source>
+ <translatorcomment>%1 vignettes créées ...</translatorcomment>
+ <translation>%1 koadro txiki sortuak...</translation>
+ </message>
+</context>
+<context>
+ <name>UBToolsManager</name>
+ <message>
+ <source>Compass</source>
+ <translatorcomment>Compas</translatorcomment>
+ <translation>Konpasa</translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translatorcomment>Règle</translatorcomment>
+ <translation>Erregela</translation>
+ </message>
+ <message>
+ <source>Protractor</source>
+ <translatorcomment>Rapporteur</translatorcomment>
+ <translation>Angelu-neurgailua</translation>
+ </message>
+ <message>
+ <source>Mask</source>
+ <translatorcomment>Masque</translatorcomment>
+ <translation>Maska</translation>
+ </message>
+ <message>
+ <source>Triangle</source>
+ <translatorcomment>Ãquerre</translatorcomment>
+ <translation>Eskuaira</translation>
+ </message>
+ <message>
+ <source>Magnifier</source>
+ <translatorcomment>Loupe</translatorcomment>
+ <translation>Lupa</translation>
+ </message>
+ <message>
+ <source>Cache</source>
+ <translatorcomment>Spot</translatorcomment>
+ <translation type="unfinished">Argi-spota</translation>
+ </message>
+</context>
+<context>
+ <name>UBTrapWebPageContentController</name>
+ <message>
+ <source>Whole page</source>
+ <translation type="unfinished">Orri osoa</translation>
+ </message>
+ <message>
+ <source>Embed </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBUpdateDlg</name>
+ <message>
+ <source>Document updater</source>
+ <translatorcomment>Mise à niveau du document</translatorcomment>
+ <translation type="unfinished">Dokumentuaren eguneratzea</translation>
+ </message>
+ <message>
+ <source> files require an update.</source>
+ <translatorcomment>fichiers nécessitant une mise à jour.</translatorcomment>
+ <translation type="unfinished">eguneratzea behar duten fitxategiak.</translation>
+ </message>
+ <message>
+ <source>Backup path: </source>
+ <translatorcomment>Chemin de sauvegarde :</translatorcomment>
+ <translation type="unfinished">Babeskopiaren bidea : </translation>
+ </message>
+ <message>
+ <source>Browse</source>
+ <translatorcomment>Parcourir</translatorcomment>
+ <translation>Arakatu</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translatorcomment>Mettre à jour</translatorcomment>
+ <translation>Eguneratu</translation>
+ </message>
+ <message>
+ <source>Select a backup folder</source>
+ <translatorcomment>Sélectionner un dossier de sauvegarde</translatorcomment>
+ <translation>Babeskopia karpeta hautatu</translation>
+ </message>
+ <message>
+ <source>An error occured during the update. The files have not been affected.</source>
+ <translatorcomment>Une erreur s'est produite durant la mise à jour. Les fichiers n'ont pas été affectés.</translatorcomment>
+ <translation type="unfinished">Errore bat gertatu da eguneratzen ari zelarik. Fitxategiak ez dira hunkituak izan.</translation>
+ </message>
+ <message>
+ <source>Files update results</source>
+ <translatorcomment>Résultats de la mise à jour</translatorcomment>
+ <translation type="unfinished">Eguneratzearen emaitzak</translation>
+ </message>
+ <message>
+ <source>Updating file </source>
+ <translatorcomment>Mise à jour du fichier</translatorcomment>
+ <translation type="unfinished">Fitxategia eguneratzen ari</translation>
+ </message>
+ <message>
+ <source>Please wait the import process will start soon...</source>
+ <translatorcomment>Merci de patienter, le processus d'import va commencer...</translatorcomment>
+ <translation type="unfinished">Zaude otoi, inportatzea abiatuko da...</translation>
+ </message>
+ <message>
+ <source>Remind me later</source>
+ <translatorcomment>Me le rappeler plus tard</translatorcomment>
+ <translation type="unfinished">Berantago oroitarazi</translation>
+ </message>
+ <message>
+ <source>Files update successful!
+Please reboot the application to access the updated documents.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBWebPluginWidget</name>
+ <message>
+ <source>Loading...</source>
+ <translatorcomment>Chargement...</translatorcomment>
+ <translation type="unfinished">Kargatzen ari...</translation>
+ </message>
+</context>
+<context>
+ <name>UBWebPublisher</name>
+ <message>
+ <source>Publish Document on Sankore Web</source>
+ <translatorcomment>Publier un fichier Open-Sankoré sur Planète-Sankoré</translatorcomment>
+ <translation type="unfinished">Open Sankore dokumentua sarean argitaratu</translation>
+ </message>
+</context>
+<context>
+ <name>UBWidgetUniboardAPI</name>
+ <message>
+ <source>%0 called (method=%1, status=%2)</source>
+ <translatorcomment>%0 appelé (méthode=%1, statut=%2)</translatorcomment>
+ <translation>%0 deitua (metodoa=%1, estatusa=%2)</translation>
+ </message>
+</context>
+<context>
+ <name>UBYouTubePublisher</name>
+ <message>
+ <source>YouTube authentication failed.</source>
+ <translatorcomment>Ãchec de l'identification YouTube.</translatorcomment>
+ <translation>YouTube identifikazioak huts egin du.</translation>
+ </message>
+ <message>
+ <source>Error while uploading video to YouTube (%1)</source>
+ <translatorcomment>Erreur lors du transfert de la vidéo vers YouTube (%1)</translatorcomment>
+ <translation type="unfinished">Errorea bideoa Youtubera kargatzean (%1)</translation>
+ </message>
+ <message>
+ <source>Upload to YouTube in progress %1 %</source>
+ <translatorcomment>Transfert vers YouTube en cours %1 %</translatorcomment>
+ <translation type="unfinished">YouTuben kargatzen ari : % %1</translation>
+ </message>
+ <message>
+ <source>Open-Sankore</source>
+ <translatorcomment>Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open-Sankore</translation>
+ </message>
+ <message>
+ <source>OpenSankore</source>
+ <translatorcomment>Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open-Sankore</translation>
+ </message>
+</context>
+<context>
+ <name>UBYouTubePublishingDialog</name>
+ <message>
+ <source>Upload</source>
+ <translatorcomment>Téléchargement</translatorcomment>
+ <translation type="unfinished">Gora kargatzea</translation>
+ </message>
+ <message>
+ <source>Autos & Vehicles</source>
+ <translatorcomment>Auto/Moto</translatorcomment>
+ <translation>Autoak eta ibilgailuak</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translatorcomment>Musique</translatorcomment>
+ <translation>Musika</translation>
+ </message>
+ <message>
+ <source>Pets & Animals</source>
+ <translatorcomment>Animaux</translatorcomment>
+ <translation type="unfinished">Maskotak eta animaliak</translation>
+ </message>
+ <message>
+ <source>Sports</source>
+ <translatorcomment>Sports</translatorcomment>
+ <translation>Kirolak</translation>
+ </message>
+ <message>
+ <source>Travel & Events</source>
+ <translatorcomment>Voyages et événements</translatorcomment>
+ <translation>Bidaiak eta gertaerak</translation>
+ </message>
+ <message>
+ <source>Gaming</source>
+ <translatorcomment>Jeux vidéo et autres</translatorcomment>
+ <translation>Jokoak</translation>
+ </message>
+ <message>
+ <source>Comedy</source>
+ <translatorcomment>Humour</translatorcomment>
+ <translation>Komedia</translation>
+ </message>
+ <message>
+ <source>People & Blogs</source>
+ <translatorcomment>Personnalités et blogues</translatorcomment>
+ <translation>Jendea eta blogak</translation>
+ </message>
+ <message>
+ <source>News & Politics</source>
+ <translatorcomment>Actualités et politique</translatorcomment>
+ <translation>Albisteak eta politika</translation>
+ </message>
+ <message>
+ <source>Entertainment</source>
+ <translatorcomment>Divertissement</translatorcomment>
+ <translation>Aisia</translation>
+ </message>
+ <message>
+ <source>Education</source>
+ <translatorcomment>Ãducation</translatorcomment>
+ <translation>Hezkuntza</translation>
+ </message>
+ <message>
+ <source>Howto & Style</source>
+ <translatorcomment>Vie pratique et style</translatorcomment>
+ <translation>Argibideak eta estiloa</translation>
+ </message>
+ <message>
+ <source>Nonprofits & Activism</source>
+ <translatorcomment>Organisations à but non lucratif</translatorcomment>
+ <translation>Irabazi-asmorik gabe eta aktibistak</translation>
+ </message>
+ <message>
+ <source>Science & Technology</source>
+ <translatorcomment>Sciences et technologies</translatorcomment>
+ <translation>Zientzia eta teknologia</translation>
+ </message>
+</context>
+<context>
+ <name>UBZoomPalette</name>
+ <message>
+ <source>%1 x</source>
+ <translatorcomment>%1 x</translatorcomment>
+ <translation>%1 x</translation>
+ </message>
+</context>
+<context>
+ <name>UniboardSankoreTransition</name>
+ <message>
+ <source>Import old Uniboard/Sankore documents</source>
+ <translatorcomment>Importer des documents depuis le format Uniboard ou Sankoré</translatorcomment>
+ <translation type="unfinished">Uniboard edo lehengo Sankore dokumentuak inportatu</translation>
+ </message>
+ <message>
+ <source>There are no documents that should be imported</source>
+ <translatorcomment>Aucun document au format Uniboard n'a été trouvé</translatorcomment>
+ <translation type="unfinished">Uniboard formatuko dokumenturik ez da aurkitu</translation>
+ </message>
+</context>
+<context>
+ <name>WBClearButton</name>
+ <message>
+ <source>Clear</source>
+ <translatorcomment>Effacer</translatorcomment>
+ <translation>Garbitu</translation>
+ </message>
+</context>
+<context>
+ <name>WBDownloadItem</name>
+ <message>
+ <source>Save File</source>
+ <translatorcomment>Enregistrer le fichier</translatorcomment>
+ <translation>Fitxategia gorde</translation>
+ </message>
+ <message>
+ <source>Download canceled: %1</source>
+ <translatorcomment>Téléchargement annulé : %1</translatorcomment>
+ <translation type="unfinished">Behera karga ezeztatua : %1</translation>
+ </message>
+ <message>
+ <source>Error opening saved file: %1</source>
+ <translatorcomment>Erreur durant l'ouverture du fichier : %1</translatorcomment>
+ <translation type="unfinished">Errorea fitxetegia irekitzean : %1</translation>
+ </message>
+ <message>
+ <source>Error saving: %1</source>
+ <translatorcomment>Erreur lors de la sauvegarde du fichier : %1</translatorcomment>
+ <translation>Errorea fitxetegia grabatzean : %1</translation>
+ </message>
+ <message>
+ <source>Network Error: %1</source>
+ <translatorcomment>Erreur réseau : %1</translatorcomment>
+ <translation>Errorea sarean : %1</translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translatorcomment>secondes</translatorcomment>
+ <translation>segundo</translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translatorcomment>minutes</translatorcomment>
+ <translation>minutu</translation>
+ </message>
+ <message>
+ <source>- %4 %5 remaining</source>
+ <translatorcomment>- %4 %5 restante(s)</translatorcomment>
+ <translation>- %4 %5 gelditzen</translation>
+ </message>
+ <message>
+ <source>%1 of %2 (%3/sec) %4</source>
+ <translatorcomment>%1 de %2 (%3/sec) %4</translatorcomment>
+ <translation>%2etarik %1 (%3/seg) %4</translation>
+ </message>
+ <message>
+ <source>?</source>
+ <comment>unknown file size</comment>
+ <translatorcomment>Taille de fichier inconnue - si je me fie aux commentaires des développeurs...</translatorcomment>
+ <translation>Fitxategi tamaina ezezaguna</translation>
+ </message>
+ <message>
+ <source>%1 of %2 - Stopped</source>
+ <translatorcomment>%1 de %2 - arrêté</translatorcomment>
+ <translation>%2etarik %1 - gelditua</translation>
+ </message>
+ <message>
+ <source>bytes</source>
+ <translatorcomment>octets</translatorcomment>
+ <translation>byte</translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translatorcomment>Ko</translatorcomment>
+ <translation>kB</translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translatorcomment>Mo</translatorcomment>
+ <translation>mB</translation>
+ </message>
+</context>
+<context>
+ <name>WBDownloadManager</name>
+ <message>
+ <source>1 Download</source>
+ <translatorcomment>1 téléchargement(s)</translatorcomment>
+ <translation type="unfinished">1 behera karga</translation>
+ </message>
+ <message>
+ <source>%1 Downloads</source>
+ <comment>always >= 2</comment>
+ <translatorcomment>%1 behera karga</translatorcomment>
+ <translation type="unfinished">%1 behera karga</translation>
+ </message>
+</context>
+<context>
+ <name>WBHistoryModel</name>
+ <message>
+ <source>Title</source>
+ <translatorcomment>Titre</translatorcomment>
+ <translation>Titulua</translation>
+ </message>
+ <message>
+ <source>Address</source>
+ <translatorcomment>Adresse</translatorcomment>
+ <translation>Helbidea</translation>
+ </message>
+</context>
+<context>
+ <name>WBHistoryTreeModel</name>
+ <message>
+ <source>Earlier Today</source>
+ <translatorcomment>Précédemment dans la journée</translatorcomment>
+ <translation type="unfinished">Egun, goizago</translation>
+ </message>
+ <message>
+ <source>%1 items</source>
+ <translatorcomment>%1 élément(s)</translatorcomment>
+ <translation>%1 elementu</translation>
+ </message>
+</context>
+<context>
+ <name>WBSearchLineEdit</name>
+ <message>
+ <source>Search</source>
+ <translatorcomment>Recherche</translatorcomment>
+ <translation>Bilatu</translation>
+ </message>
+</context>
+<context>
+ <name>WBTabBar</name>
+ <message>
+ <source>New &Tab</source>
+ <translatorcomment>Nouvel &onglet</translatorcomment>
+ <translation type="unfinished">Fitxa &berria</translation>
+ </message>
+ <message>
+ <source>Clone Tab</source>
+ <translatorcomment>Dupliquer onglet</translatorcomment>
+ <translation>Fitxa bikoiztu</translation>
+ </message>
+ <message>
+ <source>&Close Tab</source>
+ <translatorcomment>&Fermer onglet</translatorcomment>
+ <translation type="unfinished">Fitxa &itxi</translation>
+ </message>
+ <message>
+ <source>Close &Other Tabs</source>
+ <translatorcomment>Fermer &autres onglets</translatorcomment>
+ <translation>I&txi beste fitxak</translation>
+ </message>
+ <message>
+ <source>Reload Tab</source>
+ <translatorcomment>Recharger &onglet</translatorcomment>
+ <translation>Berritu Fitxa</translation>
+ </message>
+ <message>
+ <source>Reload All Tabs</source>
+ <translatorcomment>Recharger tous les onglets</translatorcomment>
+ <translation>Berritu fitxa guztiak</translation>
+ </message>
+</context>
+<context>
+ <name>WBTabWidget</name>
+ <message>
+ <source>Recently Closed Tabs</source>
+ <translatorcomment>Onglets récemment fermés</translatorcomment>
+ <translation type="unfinished">Hetsi berri fitxak</translation>
+ </message>
+ <message>
+ <source>(Untitled)</source>
+ <translatorcomment>(Sans titre)</translatorcomment>
+ <translation>(Izengabea)</translation>
+ </message>
+</context>
+<context>
+ <name>WBToolbarSearch</name>
+ <message>
+ <source>Search</source>
+ <translatorcomment>Recherche</translatorcomment>
+ <translation>Bilatu</translation>
+ </message>
+ <message>
+ <source>No Recent Searches</source>
+ <translatorcomment>Aucune recherche récente</translatorcomment>
+ <translation>Oraintsuko bilaketarik ez</translation>
+ </message>
+ <message>
+ <source>Recent Searches</source>
+ <translatorcomment>Historique des recherches</translatorcomment>
+ <translation>Bilaketen historia</translation>
+ </message>
+ <message>
+ <source>Clear Recent Searches</source>
+ <translatorcomment>Supprimer l'historique des recherches</translatorcomment>
+ <translation>Bilaketen historia ezabatu</translation>
+ </message>
+</context>
+<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select content to trap:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation type="unfinished">Aplikazioaren izena</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WBWebPage</name>
+ <message>
+ <source>Download</source>
+ <translatorcomment>Téléchargement</translatorcomment>
+ <translation type="unfinished">Behera karga(k)</translation>
+ </message>
+ <message>
+ <source>Add to Current Document</source>
+ <translatorcomment>Ajouter au document courant</translatorcomment>
+ <translation type="unfinished">Uneko dokumentuan gehitu</translation>
+ </message>
+ <message>
+ <source>PDF</source>
+ <translatorcomment>PDF</translatorcomment>
+ <translation>PDF</translation>
+ </message>
+ <message>
+ <source>Error loading page: %1</source>
+ <translatorcomment>Erreur de chargement de la page : %1</translatorcomment>
+ <translation>Errorea %1 orria kargatzean</translation>
+ </message>
+ <message>
+ <source>Download PDF Document: would you prefer to download the PDF file or add it to the current Sankore document?</source>
+ <translatorcomment>Téléchargement du PDF : préférez-vous télécharger le fichier PDF ou l'ajouter à votre document courant ?</translatorcomment>
+ <translation type="unfinished">PDF kargatzea : PDF dokumentua kargatu nahi duzu, ala uneko dokumentuan gehitu nahi duzu ?</translation>
+ </message>
+</context>
+<context>
+ <name>WBWebView</name>
+ <message>
+ <source>Open in New Tab</source>
+ <translatorcomment>Ouvrir dans un nouvel onglet</translatorcomment>
+ <translation type="unfinished">Ireki fitxa berri batean</translation>
+ </message>
+</context>
+<context>
+ <name>YouTubePublishingDialog</name>
+ <message>
+ <source>Publish Podcast to YouTube</source>
+ <translatorcomment>Publier le podcast sur YouTube</translatorcomment>
+ <translation>Podcasta YouTuben argitaratu</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translatorcomment>Titre du podcast</translatorcomment>
+ <translation>Poscastaren titulua</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translatorcomment>Description</translatorcomment>
+ <translation type="unfinished">Deskribapena</translation>
+ </message>
+ <message>
+ <source>Keywords</source>
+ <translatorcomment>Mots-clés</translatorcomment>
+ <translation>Gako-hitzak</translation>
+ </message>
+ <message>
+ <source>Uniboard</source>
+ <translatorcomment>Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open-Sankore</translation>
+ </message>
+ <message>
+ <source>Category</source>
+ <translatorcomment>Catégorie</translatorcomment>
+ <translation>Kategoria</translation>
+ </message>
+ <message>
+ <source>YouTube Username</source>
+ <translatorcomment>Nom d'utilisateur YouTube</translatorcomment>
+ <translation>YouTube erabiltzaile-izena</translation>
+ </message>
+ <message>
+ <source>YouTube Password</source>
+ <translatorcomment>Mot de passe YouTube</translatorcomment>
+ <translation>YouTube pasahitza</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translatorcomment>Sauvegarder les paramètres de connexion.</translatorcomment>
+ <translation type="unfinished">Konekzio ezarpenak berrezarri ondoko aldirako</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">By clicking 'Upload,' you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>brushProperties</name>
+ <message>
+ <source>Opacity</source>
+ <translatorcomment>Opacité</translatorcomment>
+ <translation>Opakutasuna</translation>
+ </message>
+ <message>
+ <source>On Light Background</source>
+ <translatorcomment>Sur fond clair</translatorcomment>
+ <translation>Hondo argian</translation>
+ </message>
+ <message>
+ <source>On Dark Background</source>
+ <translatorcomment>Sur fond foncé</translatorcomment>
+ <translation type="unfinished">Hondo ilunean</translation>
+ </message>
+ <message>
+ <source>Line Width</source>
+ <translatorcomment>Largeur de ligne</translatorcomment>
+ <translation type="unfinished">Marra zabalera</translation>
+ </message>
+ <message>
+ <source>Medium</source>
+ <translatorcomment>Moyenne</translatorcomment>
+ <translation>Ertaina</translation>
+ </message>
+ <message>
+ <source>Strong</source>
+ <translatorcomment>Large</translatorcomment>
+ <translation>Zabala</translation>
+ </message>
+ <message>
+ <source>Fine</source>
+ <translatorcomment>Fine</translatorcomment>
+ <translation type="unfinished">Mehea</translation>
+ </message>
+ <message>
+ <source>Pen is Pressure Sensitive</source>
+ <translatorcomment>Stylet sensible à la pression</translatorcomment>
+ <translation>Arkatz presio-sentikorra</translation>
+ </message>
+</context>
+<context>
+ <name>capturePublishingDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translatorcomment>Dialogue</translatorcomment>
+ <translation>Elkarrizketa</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translatorcomment>Titre</translatorcomment>
+ <translation>Titulua</translation>
+ </message>
+ <message>
+ <source>E-mail</source>
+ <translatorcomment>Courriel</translatorcomment>
+ <translation>E-posta</translation>
+ </message>
+ <message>
+ <source>Author</source>
+ <translatorcomment>Auteur</translatorcomment>
+ <translation type="unfinished">Egilea</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translatorcomment>Description</translatorcomment>
+ <translation type="unfinished">Deskribapena</translation>
+ </message>
+</context>
+<context>
+ <name>documentPublishingDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translatorcomment>Dialogue</translatorcomment>
+ <translation>Elkarrizketa</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translatorcomment>Titre</translatorcomment>
+ <translation>Titulua</translation>
+ </message>
+ <message>
+ <source>E-mail</source>
+ <translatorcomment>Courriel</translatorcomment>
+ <translation>E-posta</translation>
+ </message>
+ <message>
+ <source>Author</source>
+ <translation type="unfinished">Egilea</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translatorcomment>Description</translatorcomment>
+ <translation type="unfinished">Deskribapena</translation>
+ </message>
+ <message>
+ <source>Attach Downloadable PDF Version</source>
+ <translatorcomment>Joindre la version PDF</translatorcomment>
+ <translation>PDF bertsioa erantsi</translation>
+ </message>
+ <message>
+ <source>Attach Downloadable Uniboard File (UBZ)</source>
+ <translatorcomment>Joindre le fichier Open-Sankoré (UBZ)</translatorcomment>
+ <translation type="unfinished">Open Sankore fitxategia (UBZ) erantsi</translation>
+ </message>
+ <message>
+ <source>Warning: This documents contains video, which will not be displayed properly on the Web</source>
+ <translatorcomment>Attention : ce document contient une vidéo qui ne s'affichera pas correctement sur le Web</translatorcomment>
+ <translation type="unfinished">Kasu : dokumentu honek Interneten gaizki bistaratuko den bideo bat badauka</translation>
+ </message>
+</context>
+<context>
+ <name>documents</name>
+ <message>
+ <source>Uniboard Documents</source>
+ <translatorcomment>Documents Uniboard</translatorcomment>
+ <translation>Uniboard dokumentuak</translation>
+ </message>
+</context>
+<context>
+ <name>preferencesDialog</name>
+ <message>
+ <source>Preferences</source>
+ <translatorcomment>Préférences</translatorcomment>
+ <translation>Hobespenak</translation>
+ </message>
+ <message>
+ <source>Default Settings</source>
+ <translatorcomment>Réglages par défaut</translatorcomment>
+ <translation type="unfinished">Ezarpen lehenetsiak</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translatorcomment>Fermer</translatorcomment>
+ <translation type="unfinished">Hetsi</translation>
+ </message>
+ <message>
+ <source>Display</source>
+ <translatorcomment>Afficher</translatorcomment>
+ <translation>Bistaratu</translation>
+ </message>
+ <message>
+ <source>Show Page with External Browser</source>
+ <translatorcomment>Ouvrir la page dans un navigateur Web externe</translatorcomment>
+ <translation>Orria kanpoko web arakatzaile batean ireki</translation>
+ </message>
+ <message>
+ <source>Virtual Keyboard</source>
+ <translatorcomment>Clavier virtuel</translatorcomment>
+ <translation type="unfinished">Teklatu birtuala</translation>
+ </message>
+ <message>
+ <source>Keyboard button size:</source>
+ <translatorcomment>Taille des touches du clavier virtuel:</translatorcomment>
+ <translation type="unfinished">Teklatu birtualaren teklen tamaina :</translation>
+ </message>
+ <message>
+ <source>Positioned at the Top (recommended for tablets)</source>
+ <translatorcomment>Positionnée en haut (recommandé pour les tablettes)</translatorcomment>
+ <translation type="unfinished">Gainaldean kokatua (tabletendako gomendatua) </translation>
+ </message>
+ <message>
+ <source>Positioned at the Bottom (recommended for white boards)</source>
+ <translatorcomment>Positionnée en bas (recommandé pour les tableaux interactifs)</translatorcomment>
+ <translation type="unfinished">Behean kokatua (arbela interaktiboentzat gomendatua)</translation>
+ </message>
+ <message>
+ <source>Display Text Under Button</source>
+ <translatorcomment>Afficher les textes sous les boutons</translatorcomment>
+ <translation>Botoien azpiko testua bistaratu</translation>
+ </message>
+ <message>
+ <source>Software Update</source>
+ <translatorcomment>Mise à jour du logiciel</translatorcomment>
+ <translation type="unfinished">Softwarearen eguneratzea</translation>
+ </message>
+ <message>
+ <source>Check software update at launch</source>
+ <translatorcomment>Vérifier la mise à jour au lancement</translatorcomment>
+ <translation type="unfinished">Egiaztatu eguneratzeak softwarearen abiatzean</translation>
+ </message>
+ <message>
+ <source>Internet</source>
+ <translatorcomment>Internet</translatorcomment>
+ <translation>Internet</translation>
+ </message>
+ <message>
+ <source>Home Page:</source>
+ <translatorcomment>Page d'accueil :</translatorcomment>
+ <translation>Harrera orria :</translation>
+ </message>
+ <message utf8="true">
+ <source>version : â¦</source>
+ <translatorcomment>version :...</translatorcomment>
+ <translation type="unfinished">bertsioa : ...</translation>
+ </message>
+ <message>
+ <source>Toolbar</source>
+ <translatorcomment>Barre d'outils</translatorcomment>
+ <translation type="unfinished">Tresna-barra</translation>
+ </message>
+ <message>
+ <source>Stylus Palette</source>
+ <translatorcomment>Barre du stylet</translatorcomment>
+ <translation>Arkatzaren barra</translation>
+ </message>
+ <message>
+ <source>Horizontal</source>
+ <translatorcomment>Horizontale</translatorcomment>
+ <translation>Horizontala</translation>
+ </message>
+ <message>
+ <source>Vertical</source>
+ <translatorcomment>Verticale</translatorcomment>
+ <translation>Bertikala</translation>
+ </message>
+ <message>
+ <source>Pen</source>
+ <translatorcomment>Stylo</translatorcomment>
+ <translation>Arkatza</translation>
+ </message>
+ <message>
+ <source>Marker</source>
+ <translatorcomment>Surligneur</translatorcomment>
+ <translation>Gainmarratzailea</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translatorcomment>A propos</translatorcomment>
+ <translation>Honi buruz</translation>
+ </message>
+ <message>
+ <source>Licences</source>
+ <translatorcomment>Licences</translatorcomment>
+ <translation>Lizentziak</translation>
+ </message>
+ <message>
+ <source>zlib</source>
+ <translatorcomment>zlib</translatorcomment>
+ <translation>zlib</translation>
+ </message>
+ <message>
+ <source>Network</source>
+ <translatorcomment>Réseau</translatorcomment>
+ <translation>Sarea</translation>
+ </message>
+ <message utf8="true">
+ <source>Open-Sankoré</source>
+ <translatorcomment>Open-Sankoré</translatorcomment>
+ <translation type="unfinished">Open-Sankore</translation>
+ </message>
+ <message>
+ <source>Show internal web page content on secondary screen or projector</source>
+ <translatorcomment>Afficher le contenu du navigateur Web interne sur l'écran de projection</translatorcomment>
+ <translation>Barneko web arakatzailea proiekzio pantailan bistaratu</translation>
+ </message>
+ <message>
+ <source>Multi display</source>
+ <translatorcomment>Multi-écrans</translatorcomment>
+ <translation>Pantaila anitzekoa</translation>
+ </message>
+ <message>
+ <source>Swap control display and view display</source>
+ <translatorcomment>Inverser la disposition des écrans</translatorcomment>
+ <translation type="unfinished">Pantailak trukatu</translation>
+ </message>
+ <message>
+ <source>Mode</source>
+ <translatorcomment>Mode</translatorcomment>
+ <translation>Modua</translation>
+ </message>
+ <message>
+ <source>Mode to start in:</source>
+ <translatorcomment>Démarrer en mode :</translatorcomment>
+ <translation>Abiatu modu honetan :</translation>
+ </message>
+ <message>
+ <source>Board</source>
+ <translatorcomment>Tableau</translatorcomment>
+ <translation>Arbela</translation>
+ </message>
+ <message>
+ <source>Desktop</source>
+ <translatorcomment>Bureau</translatorcomment>
+ <translation>Mahaigaina</translation>
+ </message>
+ <message>
+ <source>Proxy User:</source>
+ <translatorcomment>Proxy :</translatorcomment>
+ <translation type="unfinished">Proxy erabil.:</translation>
+ </message>
+ <message>
+ <source>Pass:</source>
+ <translatorcomment>Mot de passe :</translatorcomment>
+ <translation>Pasahitza :</translation>
+ </message>
+ <message>
+ <source>User:</source>
+ <translatorcomment>Nom d'utilisateur :</translatorcomment>
+ <translation>Erabiltzaile izena :</translation>
+ </message>
+ <message>
+ <source>Pass: </source>
+ <translatorcomment>Mot de passe :</translatorcomment>
+ <translation>Pasahitza :</translation>
+ </message>
+ <message>
+ <source>Credits</source>
+ <translatorcomment>Crédits</translatorcomment>
+ <translation>Kredituak</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translatorcomment>Identifiant Planète Sankoré pour l'export de fichier</translatorcomment>
+ <translation>Planète Sankoré Identifikatzaileak fitxategien esportaziorako</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translatorcomment>Sauvegarder les paramètres de connexion.</translatorcomment>
+ <translation>Konekzio ezarpenak gorde</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Start up tips</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show start up tips</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>trapFlashDialog</name>
+ <message>
+ <source>Trap flash</source>
+ <translatorcomment>Capturer du contenu Flash</translatorcomment>
+ <translation>Flash edukia kapturatu</translation>
+ </message>
+ <message>
+ <source>Select a flash to trap</source>
+ <translatorcomment>Sélectionner un contenu Flash à capturer</translatorcomment>
+ <translation type="unfinished">Kapturatzeko Flash edukia hautatu</translation>
+ </message>
+ <message>
+ <source>about:blank</source>
+ <translatorcomment>Ã propos : vide</translatorcomment>
+ <translation>about:blank</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translatorcomment>Nom de l'application</translatorcomment>
+ <translation>Aplikazioaren izena</translation>
+ </message>
+ <message>
+ <source>Create Application</source>
+ <translatorcomment>Créer une application</translatorcomment>
+ <translation>Aplikazio bat sortu</translation>
+ </message>
+</context>
+</TS>
diff --git a/Sankore-3.1/resources/i18n/sankore_fr.ts b/Sankore-3.1/resources/i18n/sankore_fr.ts
index ca0a799..acafd02 100644
--- a/Sankore-3.1/resources/i18n/sankore_fr.ts
+++ b/Sankore-3.1/resources/i18n/sankore_fr.ts
@@ -73,7 +73,7 @@
</message>
<message>
<source>Stylus</source>
- <translation>Stylets</translation>
+ <translation>Stylet</translation>
</message>
<message>
<source>Backgrounds</source>
@@ -177,15 +177,7 @@
</message>
<message>
<source>Configure Podcast Recording</source>
- <translation>Configurer le podcast</translation>
- </message>
- <message>
- <source>Flash Trap</source>
- <translation>Capturer du contenu Flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Capturer du contenu Flash</translation>
+ <translation>Configurer l'enregistrement de l'écran</translation>
</message>
<message>
<source>Web Trap</source>
@@ -309,7 +301,7 @@
</message>
<message>
<source>Add Bookmark</source>
- <translation>Ajouter un favori</translation>
+ <translation>Ajouter un signet</translation>
</message>
<message>
<source>Display Board</source>
@@ -576,14 +568,6 @@
<translation>Capturer une fenêtre</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Embarquer un contenu Web</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Capturer un contenu Web embarquable</translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation>Afficher l'écran principal sur l'écran d'affichage</translation>
</message>
@@ -729,7 +713,7 @@
</message>
<message>
<source>Add to Working Document</source>
- <translation>Ajouter au document</translation>
+ <translation>Ajouter au document courant</translation>
</message>
<message>
<source>Add</source>
@@ -749,7 +733,8 @@
</message>
<message>
<source>Bookmark</source>
- <translation>Signet</translation>
+ <extracomment>tooltip</extracomment>
+ <translation>Ajouter un signet</translation>
</message>
<message>
<source>Preferences</source>
@@ -824,6 +809,44 @@
<source>Group</source>
<translation>Grouper</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translatorcomment>pas certain de la pertinence car le contexte n'est pas précisé ...</translatorcomment>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Télécharger dans</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">la bibliothèque</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Télécharger dans la bibliothèque</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Télécharger sur</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">la page courante</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Télécharger sur la page courante</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ajouter le lien à </p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">la bibliothèque</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Ajouter le lien dans la bibliothèque</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ajouter le lien à </p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">la page courante</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Ajouter le lien à la page courante</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Signet</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -978,7 +1001,7 @@
<name>UBCachePropertiesWidget</name>
<message>
<source>Cache Properties</source>
- <translation>Propriétés du cache</translation>
+ <translation>Propriétés du spot</translation>
</message>
<message>
<source>Color:</source>
@@ -989,12 +1012,110 @@
<translation>Forme :</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Taille :</translation>
+ <source>Alpha:</source>
+ <translation>Alpha :</translation>
</message>
<message>
- <source>Close</source>
- <translation>Fermer</translation>
+ <source>Geometry:</source>
+ <translation>Géométrie :</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Largeur :</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Hauteur :</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Garder les proportions</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Mode :</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Prévisualisation :</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Fermer le spot</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation>Au clic</translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation>Persistant</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><zone de dépôt></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Images non acceptées</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Ne peut pas afficher la donnée</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Le document déposé n'est pas reconnu comme document audio</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Jouer un document audio</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Ajouter un lien vers une page</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Ajouter un lien vers une page Web</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Glisser et déposer un fichier audio depuis la bibliothèque</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Page suivante</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Page précédente</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Page de titre</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Dernière page</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Page numéro</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Insérer une adresse URL</translation>
</message>
</context>
<context>
@@ -1027,10 +1148,6 @@
<context>
<name>UBDocumentController</name>
<message>
- <source>No document selected!</source>
- <translation>Aucun document sélectionné !</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Ouvrir un fichier compatible</translation>
</message>
@@ -1063,40 +1180,12 @@
<translation>Supprimer la page</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Supprimer le document</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Vider la corbeille</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Voulez-vous vraiment vider la corbeille ?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Supression du contenu de la corbeille</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Corbeille vidée</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Supprimer le dossier</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Voulez-vous vraiment supprimer le dossier '%1' et tout son contenu ?</translation>
- </message>
- <message>
<source>Importing file %1...</source>
<translation>Importation du fichier %1...</translation>
</message>
<message>
<source>Failed to import file ... </source>
- <translation>Impossible d'importer le fichier ...</translation>
+ <translation>Impossible d'importer le fichier ... </translation>
</message>
<message>
<source>Import all Images from Folder</source>
@@ -1131,10 +1220,6 @@
<translation>La sélection ne contient aucune image !</translation>
</message>
<message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Voulez-vous vraiment supprimer le document '%1'?</translation>
- </message>
- <message>
<source>Page %1</source>
<translation>Page %1</translation>
</message>
@@ -1161,6 +1246,14 @@
<source>Untitled Documents</source>
<translation>Documents sans titre</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>Cette opération est irréversible !</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1225,7 +1318,7 @@
</message>
<message>
<source>Export canceled ...</source>
- <translation>Export annulée ...</translation>
+ <translation>Exportation annulée ...</translation>
</message>
<message>
<source>Converting page %1/%2 ...</source>
@@ -1249,6 +1342,61 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Accepter</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Remplacer</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Annuler</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translatorcomment>j'ai ajouté le terme "Attention" car cette opération est dangereuse (et pas trop conforme aux habitudes ou l'on place en général un n° de version à la fin du fichier pour les différencier et eviter l'effacement)</translatorcomment>
+ <translation>Le nom %1 est déjà utilisé.
+ATTENTION : En gardant ce nom, l'ancien document sera écrasé par le nouveau.
+Un nouveau nom vous permettra un nouveau document.
+</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Mes documents</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modèles</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Corbeille</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Documents sans titre</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Copie de la page %1/%2 en cours</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 page copiée</numerusform>
+ <numerusform>%1 pages copiées</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1267,6 +1415,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Le téléchargement a échoué.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>le serveur distant refuse l'accès (le serveur n'accepte pas les requêtes)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>le serveur distant a fermé l'accès de manière prématurée avant que la réponse ne soit reçue complètement et ne soit traitée</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>le nom du serveur distant n'a pas été trouvé (nom du serveur distant invalide)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>l'accès au serveur distant a expiré</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>l'opération a été annulée ou fermée avant d'être terminée.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>la connexion SSL/TLS a échoué et la chaîne cryptée n'a pu être établie. Les erreurs SSL () devraient avoir été envoyées.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>la connexion a été interrompue en raison d'une erreur réseau, l'accès a été redirigé. La requête doit être à nouveau présentée et sera traitée dès que la connexion sera rétablie.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>la connexion au serveur proxy a été refusée (le serveur proxy n'accepte pas les requêtes)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>le serveur proxy a fermé la connexion prématurément, avant que la réponse entière n'ait été reçue et traitée</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>le nom d'hôte du proxy n'a pas été trouvé (nom d'hôte du proxy non valide)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>la connexion au proxy a expiré ou le proxy ne répond pas à la requête envoyée</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>le proxy requiert une authentification pour cette demande, mais n'accepte pas les certificats proposés</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>l'accès au contenu distant a été refusé (similaire à l'erreur HTTP 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>l'opération demandée sur le contenu distant n'est pas autorisée</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>le contenu distant n'a pas été trouvé sur le serveur (similaire à l'erreur HTTP 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>le serveur distant requiert une authentification, mais les informations d'identification fournies n'ont pas été acceptées</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>la demande doit être envoyée à nouveau, cela est certainement dû à un problème de relecture.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>l'API d'accès au réseau ne peut pas satisfaire la requête parce que le protocole n'est pas connu</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>l'opération demandée n'est pas valide pour ce protocole</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>une erreur de réseau inconnue a été détectée</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>une erreur de proxy inconnue a été détectée</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>une erreur inconnue liée au contenu distant a été détectée</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>une rupture de protocole a été détectée (erreur d'analyse, réponses non valides ou inattendues...)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1335,6 +1582,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>L'export a échoué...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exporter comme document UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Exportation du document...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Export réussi.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Echec de l'export.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exporter au format UBX Open-Sankoré</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1408,22 +1682,26 @@
<message>
<source>Add to page</source>
<translatorcomment>j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
- <translation>Ajout page</translation>
+ <translation>Page</translation>
</message>
<message>
<source>Set as background</source>
<translatorcomment>j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
- <translation>Ajout en fond</translation>
+ <translation>Fond</translation>
</message>
<message>
<source>Add to library</source>
<translatorcomment>j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
- <translation>Ajout bibliothèque</translation>
+ <translation>Bibliothèque</translation>
</message>
<message>
<source>Object informations</source>
<translation>Informations</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>Ajouter à :</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1506,6 +1784,14 @@
<source>Trash</source>
<translation>Corbeille</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Signets</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1539,6 +1825,22 @@
<source>Visible on Extended Screen</source>
<translation>Visible sur l'écran étendu</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Ajouter une action</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Retirer le lien audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Retirer le lien sur une page</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Retirer le lien Web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1554,6 +1856,22 @@
<source>Go to Content Source</source>
<translation>Aller à la source du contenu</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Ajouter une action</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Retirer le lien audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Retirer le lien sur une page</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Retirer le lien Web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1574,14 +1892,7 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
- <name>UBGraphicsWidgetItem</name>
+ <name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
<translation>Chargement en cours ...</translation>
@@ -1602,7 +1913,7 @@
<name>UBImportCFF</name>
<message>
<source>Common File Format (</source>
- <translation>Format de fichier CFF (</translation>
+ <translation>Format de fichier CFF (*.iwb) (</translation>
</message>
<message>
<source>Importing file %1...</source>
@@ -1610,15 +1921,15 @@
</message>
<message>
<source>Import of file %1 failed.</source>
- <translation>Echec de l'import du fichier %1.</translation>
+ <translation>Echec de l'importation du fichier %1.</translation>
</message>
<message>
<source>Import successful.</source>
- <translation>Import terminée.</translation>
+ <translation>Importation terminée.</translation>
</message>
<message>
<source>Import failed.</source>
- <translation>Echec de l'import.</translation>
+ <translation>Echec de l'importation.</translation>
</message>
</context>
<context>
@@ -1641,6 +1952,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankoré (archive de documents) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1699,7 +2017,7 @@
</message>
<message>
<source>Ok</source>
- <translation>Ok</translation>
+ <translation>Accepter</translation>
</message>
</context>
<context>
@@ -1727,7 +2045,7 @@
%2
Do you want to ignore these errors for this host?</source>
- <translation>Erreur SSL (Secure Socket Layer) sur un serveur sécurisé:
+ <translation>Erreur SSL (Secure Socket Layer) sur un serveur sécurisé :
%1
@@ -1779,7 +2097,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Swiss French</source>
- <translation>Français suisse</translation>
+ <translation>Français (Suisse)</translation>
</message>
</context>
<context>
@@ -1855,6 +2173,142 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
<source>version: </source>
<translation>version : </translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Par défaut</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabe</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgare</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Catalan</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Tchèque</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Danois</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Allemand</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grec</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Anglais</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Anglais UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Espagnol</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Français</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Français (Suisse)</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italien</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hébreux</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japonais</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Coréen</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malgache</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norvégien</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Néerlandais</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polonais</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Romanche</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Roumain</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Russe</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovaque</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Suédois</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turc</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Chinois</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Chinois simplifié</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Chinois traditionnel</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>Corse</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hindi</translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation>Basque</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation>Portugais</translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1896,6 +2350,17 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
<source>My Movies</source>
<translation>Mes films</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Visible lors du prochain démarrage</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -1934,6 +2399,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
<name>UBTeacherBarWidget</name>
<message>
<source></source>
+ <translatorcomment>Je ne sais pas quoi faire avec cet item...</translatorcomment>
<translation></translation>
</message>
</context>
@@ -1945,7 +2411,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Type comment here ...</source>
- <translation>Renseigner le commentaire ici ...</translation>
+ <translation>Ajouter le commentaire ici ...</translation>
</message>
<message>
<source>Add an action</source>
@@ -1961,7 +2427,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Page: %0</source>
- <translation>Page: %0</translation>
+ <translation>Page : %0</translation>
</message>
</context>
<context>
@@ -1972,11 +2438,11 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Author(s)</source>
- <translation>Auteur(s) :</translation>
+ <translation>Auteur(s) et crédits :</translation>
</message>
<message>
<source>Type authors here ...</source>
- <translation>Ajouter les auteurs ici ...</translation>
+ <translation>Ajouter les auteurs et les crédits des médias ici ...</translation>
</message>
<message>
<source>Objective(s)</source>
@@ -2044,8 +2510,8 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Copyright</source>
- <translatorcomment>attention le copyright n'est pas une protection ou une licence puisque ca existe même pour les licences libres les plus ouvertes. C'est simplement la mention détenteur des droits de reproduction (celui qui fixe la licence) . Le terme est donc impropre même en anglais.</translatorcomment>
- <translation>Protection par le droit d'auteur</translation>
+ <translatorcomment>attention le copyright n'est pas une protection ou une licence puisque ca existe même pour les licences libres les plus ouvertes. C'est simplement la mention détenteur des droits de reproduction (celui qui fixe la licence) . Le terme est donc impropre même en anglais. (je suis d'accord avec la remarque Francois)</translatorcomment>
+ <translation>Protection par le droit d'auteur courant</translation>
</message>
<message>
<source>Created the:
@@ -2066,7 +2532,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
<name>UBTeacherGuidePresentationWidget</name>
<message>
<source>Page: %0</source>
- <translation>Page: %0</translation>
+ <translation>Page : %0</translation>
</message>
</context>
<context>
@@ -2112,14 +2578,14 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Page complète</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Embarqué </translation>
</message>
</context>
<context>
@@ -2164,11 +2630,11 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
</message>
<message>
<source>Updating file </source>
- <translation>Mise à jour du fichier</translation>
+ <translation>Mise à jour du fichier </translation>
</message>
<message>
<source>Please wait the import process will start soon...</source>
- <translation>Merci de patienter, le processus d'import va commencer...</translation>
+ <translation>Merci de patienter : le processus d'importation va commencer...</translation>
</message>
<message>
<source>Remind me later</source>
@@ -2323,7 +2789,7 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
</message>
<message>
<source>Error saving: %1</source>
- <translation>Erreur lors de la sauvegarde du fichier : %1</translation>
+ <translation>Erreur lors de l'enregistrement du fichier : %1</translation>
</message>
<message>
<source>Network Error: %1</source>
@@ -2339,7 +2805,7 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
</message>
<message>
<source>- %4 %5 remaining</source>
- <translation>- %4 %5 restante(s)</translation>
+ <translation>- %4 %5 restantes</translation>
</message>
<message>
<source>%1 of %2 (%3/sec) %4</source>
@@ -2372,12 +2838,12 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
<name>WBDownloadManager</name>
<message>
<source>1 Download</source>
- <translation>1 téléchargement(s)</translation>
+ <translation>1 téléchargement</translation>
</message>
<message>
<source>%1 Downloads</source>
<comment>always >= 2</comment>
- <translation>%1 téléchargement(s)</translation>
+ <translation>%1 téléchargements</translation>
</message>
</context>
<context>
@@ -2467,6 +2933,53 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Sélectionner du contenu à capturer :</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nom de l'application</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Restriction et mise en garde.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>La capture de contenu fonctionne sur les pages Web les plus courantes.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Veuillez respecter les droits d'auteur lors de la capture de contenu depuis le Web.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>Télécharger dans
+la bibliothèque</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>Télécharger sur
+la page courante</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>Ajouter un lien
+dans la bibliothèque</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>Ajouter un lien
+sur la page courante</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2540,7 +3053,7 @@ p, li { white-space: pre-wrap; }
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">En cliquant sur le bouton "Téléchargement", vous certifiez que vous respectez les conditions générales d'utilisation de YouTube </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">En cliquant sur le bouton "Téléchargement", vous certifiez que vous respectez les conditions générales d'utilisation de YouTube disponibles ici </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
<message>
<source>Restore credentials on reboot</source>
@@ -2675,7 +3188,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Keyboard button size:</source>
- <translation>Taille des touches du clavier virtuel:</translation>
+ <translation>Taille des touches du clavier virtuel :</translation>
</message>
<message>
<source>Positioned at the Top (recommended for tablets)</source>
@@ -2742,22 +3255,10 @@ p, li { white-space: pre-wrap; }
<translation>Licences</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Réseau</translation>
</message>
@@ -2795,16 +3296,12 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Proxy User:</source>
- <translation>Proxy :</translation>
+ <translation>Login Proxy :</translation>
</message>
<message>
<source>Pass:</source>
<translation>Mot de passe :</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">Identifiant Planète-Sankoré</translation>
- </message>
<message>
<source>User:</source>
<translation>Nom d'utilisateur :</translation>
@@ -2814,691 +3311,70 @@ p, li { white-space: pre-wrap; }
<translation>Mot de passe :</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translatorcomment>non traduisible en l'état (sauf disponibilité d'une version non officielle introuvable sur le web)</translatorcomment>
- <translation></translation>
- </message>
- <message>
<source>Credits</source>
<translation>Crédits</translation>
</message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Identifiant Planète-Sankoré pour l'export de fichier</translation>
+ </message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Les licences proposées ci-dessous sont rédigées en langue anglaise afin de respecter le cadre légal et officiel des traductions approuvées par les auteurs de ces textes.</span></p></td></tr></table></body></html></translation>
+ <source>Restore credentials on reboot </source>
+ <translation>Enrgistrer les paramètres de connexion.</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translatorcomment>ATTENTION AU NUMERO DE VERSION MENTIONNÃ DANS LA VERSION ANGLAISE ! (RESTE EN 1.4)</translatorcomment>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 2.0 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
+ <message>
+ <source>Start up tips</source>
+ <translation>Conseils de démarrage</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translatorcomment>attention ce texte est en français par défaut ce qui signifie qu'il devrait être traduit en anglais pour les utilisateurs non francophones !</translatorcomment>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></translation>
+ <message>
+ <source>Show start up tips</source>
+ <translation>Afficher les conseils au démarrage</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Langue</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Sélectionner la langue</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Cette nouvelle langue sera utilisée lors du redémarrage du logiciel</translation>
</message>
<message utf8="true">
- <source>Planète Sankoré ID for exporting file</source>
- <translation>Identifiant Planète Sankoré pour l'export de fichier</translation>
+ <source>Close Open-Sankoré</source>
+ <translation>Quitter Open-Sankoré</translation>
</message>
<message>
- <source>Restore credentials on reboot </source>
- <translation>Sauvegarder les paramètres de connexion.</translation>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Les licences sont en anglais pour respecter la traduction officielle et légale approuvée.</span></p></td></tr></table></body></html></translation>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
<message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation type="unfinished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Les licences proposées ci-dessous sont en langue anglaise afin de respecter le cadre légal et officiel de ces textes qui ne disposent pas d'une traduction officialisée en français.</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_fr_CH.ts b/Sankore-3.1/resources/i18n/sankore_fr_CH.ts
index ca0a799..acafd02 100644
--- a/Sankore-3.1/resources/i18n/sankore_fr_CH.ts
+++ b/Sankore-3.1/resources/i18n/sankore_fr_CH.ts
@@ -73,7 +73,7 @@
</message>
<message>
<source>Stylus</source>
- <translation>Stylets</translation>
+ <translation>Stylet</translation>
</message>
<message>
<source>Backgrounds</source>
@@ -177,15 +177,7 @@
</message>
<message>
<source>Configure Podcast Recording</source>
- <translation>Configurer le podcast</translation>
- </message>
- <message>
- <source>Flash Trap</source>
- <translation>Capturer du contenu Flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Capturer du contenu Flash</translation>
+ <translation>Configurer l'enregistrement de l'écran</translation>
</message>
<message>
<source>Web Trap</source>
@@ -309,7 +301,7 @@
</message>
<message>
<source>Add Bookmark</source>
- <translation>Ajouter un favori</translation>
+ <translation>Ajouter un signet</translation>
</message>
<message>
<source>Display Board</source>
@@ -576,14 +568,6 @@
<translation>Capturer une fenêtre</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Embarquer un contenu Web</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Capturer un contenu Web embarquable</translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation>Afficher l'écran principal sur l'écran d'affichage</translation>
</message>
@@ -729,7 +713,7 @@
</message>
<message>
<source>Add to Working Document</source>
- <translation>Ajouter au document</translation>
+ <translation>Ajouter au document courant</translation>
</message>
<message>
<source>Add</source>
@@ -749,7 +733,8 @@
</message>
<message>
<source>Bookmark</source>
- <translation>Signet</translation>
+ <extracomment>tooltip</extracomment>
+ <translation>Ajouter un signet</translation>
</message>
<message>
<source>Preferences</source>
@@ -824,6 +809,44 @@
<source>Group</source>
<translation>Grouper</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translatorcomment>pas certain de la pertinence car le contexte n'est pas précisé ...</translatorcomment>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Télécharger dans</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">la bibliothèque</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Télécharger dans la bibliothèque</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Télécharger sur</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">la page courante</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Télécharger sur la page courante</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ajouter le lien à </p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">la bibliothèque</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Ajouter le lien dans la bibliothèque</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ajouter le lien à </p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">la page courante</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Ajouter le lien à la page courante</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Signet</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -978,7 +1001,7 @@
<name>UBCachePropertiesWidget</name>
<message>
<source>Cache Properties</source>
- <translation>Propriétés du cache</translation>
+ <translation>Propriétés du spot</translation>
</message>
<message>
<source>Color:</source>
@@ -989,12 +1012,110 @@
<translation>Forme :</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Taille :</translation>
+ <source>Alpha:</source>
+ <translation>Alpha :</translation>
</message>
<message>
- <source>Close</source>
- <translation>Fermer</translation>
+ <source>Geometry:</source>
+ <translation>Géométrie :</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Largeur :</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Hauteur :</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Garder les proportions</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Mode :</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Prévisualisation :</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Fermer le spot</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation>Au clic</translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation>Persistant</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><zone de dépôt></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Images non acceptées</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Ne peut pas afficher la donnée</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Le document déposé n'est pas reconnu comme document audio</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Jouer un document audio</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Ajouter un lien vers une page</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Ajouter un lien vers une page Web</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Glisser et déposer un fichier audio depuis la bibliothèque</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Page suivante</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Page précédente</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Page de titre</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Dernière page</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Page numéro</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Insérer une adresse URL</translation>
</message>
</context>
<context>
@@ -1027,10 +1148,6 @@
<context>
<name>UBDocumentController</name>
<message>
- <source>No document selected!</source>
- <translation>Aucun document sélectionné !</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Ouvrir un fichier compatible</translation>
</message>
@@ -1063,40 +1180,12 @@
<translation>Supprimer la page</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Supprimer le document</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Vider la corbeille</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Voulez-vous vraiment vider la corbeille ?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Supression du contenu de la corbeille</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Corbeille vidée</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Supprimer le dossier</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Voulez-vous vraiment supprimer le dossier '%1' et tout son contenu ?</translation>
- </message>
- <message>
<source>Importing file %1...</source>
<translation>Importation du fichier %1...</translation>
</message>
<message>
<source>Failed to import file ... </source>
- <translation>Impossible d'importer le fichier ...</translation>
+ <translation>Impossible d'importer le fichier ... </translation>
</message>
<message>
<source>Import all Images from Folder</source>
@@ -1131,10 +1220,6 @@
<translation>La sélection ne contient aucune image !</translation>
</message>
<message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Voulez-vous vraiment supprimer le document '%1'?</translation>
- </message>
- <message>
<source>Page %1</source>
<translation>Page %1</translation>
</message>
@@ -1161,6 +1246,14 @@
<source>Untitled Documents</source>
<translation>Documents sans titre</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>Cette opération est irréversible !</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1225,7 +1318,7 @@
</message>
<message>
<source>Export canceled ...</source>
- <translation>Export annulée ...</translation>
+ <translation>Exportation annulée ...</translation>
</message>
<message>
<source>Converting page %1/%2 ...</source>
@@ -1249,6 +1342,61 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Accepter</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Remplacer</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Annuler</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translatorcomment>j'ai ajouté le terme "Attention" car cette opération est dangereuse (et pas trop conforme aux habitudes ou l'on place en général un n° de version à la fin du fichier pour les différencier et eviter l'effacement)</translatorcomment>
+ <translation>Le nom %1 est déjà utilisé.
+ATTENTION : En gardant ce nom, l'ancien document sera écrasé par le nouveau.
+Un nouveau nom vous permettra un nouveau document.
+</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Mes documents</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modèles</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Corbeille</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Documents sans titre</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Copie de la page %1/%2 en cours</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 page copiée</numerusform>
+ <numerusform>%1 pages copiées</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1267,6 +1415,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Le téléchargement a échoué.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>le serveur distant refuse l'accès (le serveur n'accepte pas les requêtes)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>le serveur distant a fermé l'accès de manière prématurée avant que la réponse ne soit reçue complètement et ne soit traitée</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>le nom du serveur distant n'a pas été trouvé (nom du serveur distant invalide)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>l'accès au serveur distant a expiré</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>l'opération a été annulée ou fermée avant d'être terminée.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>la connexion SSL/TLS a échoué et la chaîne cryptée n'a pu être établie. Les erreurs SSL () devraient avoir été envoyées.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>la connexion a été interrompue en raison d'une erreur réseau, l'accès a été redirigé. La requête doit être à nouveau présentée et sera traitée dès que la connexion sera rétablie.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>la connexion au serveur proxy a été refusée (le serveur proxy n'accepte pas les requêtes)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>le serveur proxy a fermé la connexion prématurément, avant que la réponse entière n'ait été reçue et traitée</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>le nom d'hôte du proxy n'a pas été trouvé (nom d'hôte du proxy non valide)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>la connexion au proxy a expiré ou le proxy ne répond pas à la requête envoyée</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>le proxy requiert une authentification pour cette demande, mais n'accepte pas les certificats proposés</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>l'accès au contenu distant a été refusé (similaire à l'erreur HTTP 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>l'opération demandée sur le contenu distant n'est pas autorisée</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>le contenu distant n'a pas été trouvé sur le serveur (similaire à l'erreur HTTP 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>le serveur distant requiert une authentification, mais les informations d'identification fournies n'ont pas été acceptées</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>la demande doit être envoyée à nouveau, cela est certainement dû à un problème de relecture.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>l'API d'accès au réseau ne peut pas satisfaire la requête parce que le protocole n'est pas connu</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>l'opération demandée n'est pas valide pour ce protocole</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>une erreur de réseau inconnue a été détectée</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>une erreur de proxy inconnue a été détectée</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>une erreur inconnue liée au contenu distant a été détectée</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>une rupture de protocole a été détectée (erreur d'analyse, réponses non valides ou inattendues...)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1335,6 +1582,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>L'export a échoué...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exporter comme document UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Exportation du document...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Export réussi.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Echec de l'export.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exporter au format UBX Open-Sankoré</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1408,22 +1682,26 @@
<message>
<source>Add to page</source>
<translatorcomment>j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
- <translation>Ajout page</translation>
+ <translation>Page</translation>
</message>
<message>
<source>Set as background</source>
<translatorcomment>j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
- <translation>Ajout en fond</translation>
+ <translation>Fond</translation>
</message>
<message>
<source>Add to library</source>
<translatorcomment>j'ai choisi de rendre le bouton plus compact (mais info moins complète)</translatorcomment>
- <translation>Ajout bibliothèque</translation>
+ <translation>Bibliothèque</translation>
</message>
<message>
<source>Object informations</source>
<translation>Informations</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>Ajouter à :</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1506,6 +1784,14 @@
<source>Trash</source>
<translation>Corbeille</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Signets</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1539,6 +1825,22 @@
<source>Visible on Extended Screen</source>
<translation>Visible sur l'écran étendu</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Ajouter une action</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Retirer le lien audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Retirer le lien sur une page</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Retirer le lien Web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1554,6 +1856,22 @@
<source>Go to Content Source</source>
<translation>Aller à la source du contenu</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Ajouter une action</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Retirer le lien audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Retirer le lien sur une page</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Retirer le lien Web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1574,14 +1892,7 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
- <name>UBGraphicsWidgetItem</name>
+ <name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
<translation>Chargement en cours ...</translation>
@@ -1602,7 +1913,7 @@
<name>UBImportCFF</name>
<message>
<source>Common File Format (</source>
- <translation>Format de fichier CFF (</translation>
+ <translation>Format de fichier CFF (*.iwb) (</translation>
</message>
<message>
<source>Importing file %1...</source>
@@ -1610,15 +1921,15 @@
</message>
<message>
<source>Import of file %1 failed.</source>
- <translation>Echec de l'import du fichier %1.</translation>
+ <translation>Echec de l'importation du fichier %1.</translation>
</message>
<message>
<source>Import successful.</source>
- <translation>Import terminée.</translation>
+ <translation>Importation terminée.</translation>
</message>
<message>
<source>Import failed.</source>
- <translation>Echec de l'import.</translation>
+ <translation>Echec de l'importation.</translation>
</message>
</context>
<context>
@@ -1641,6 +1952,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankoré (archive de documents) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1699,7 +2017,7 @@
</message>
<message>
<source>Ok</source>
- <translation>Ok</translation>
+ <translation>Accepter</translation>
</message>
</context>
<context>
@@ -1727,7 +2045,7 @@
%2
Do you want to ignore these errors for this host?</source>
- <translation>Erreur SSL (Secure Socket Layer) sur un serveur sécurisé:
+ <translation>Erreur SSL (Secure Socket Layer) sur un serveur sécurisé :
%1
@@ -1779,7 +2097,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Swiss French</source>
- <translation>Français suisse</translation>
+ <translation>Français (Suisse)</translation>
</message>
</context>
<context>
@@ -1855,6 +2173,142 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
<source>version: </source>
<translation>version : </translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Par défaut</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabe</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgare</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Catalan</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Tchèque</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Danois</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Allemand</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grec</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Anglais</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Anglais UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Espagnol</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Français</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Français (Suisse)</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italien</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hébreux</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japonais</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Coréen</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malgache</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norvégien</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Néerlandais</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polonais</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Romanche</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Roumain</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Russe</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovaque</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Suédois</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turc</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Chinois</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Chinois simplifié</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Chinois traditionnel</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>Corse</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hindi</translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation>Basque</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation>Portugais</translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1896,6 +2350,17 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
<source>My Movies</source>
<translation>Mes films</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Visible lors du prochain démarrage</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -1934,6 +2399,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
<name>UBTeacherBarWidget</name>
<message>
<source></source>
+ <translatorcomment>Je ne sais pas quoi faire avec cet item...</translatorcomment>
<translation></translation>
</message>
</context>
@@ -1945,7 +2411,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Type comment here ...</source>
- <translation>Renseigner le commentaire ici ...</translation>
+ <translation>Ajouter le commentaire ici ...</translation>
</message>
<message>
<source>Add an action</source>
@@ -1961,7 +2427,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Page: %0</source>
- <translation>Page: %0</translation>
+ <translation>Page : %0</translation>
</message>
</context>
<context>
@@ -1972,11 +2438,11 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Author(s)</source>
- <translation>Auteur(s) :</translation>
+ <translation>Auteur(s) et crédits :</translation>
</message>
<message>
<source>Type authors here ...</source>
- <translation>Ajouter les auteurs ici ...</translation>
+ <translation>Ajouter les auteurs et les crédits des médias ici ...</translation>
</message>
<message>
<source>Objective(s)</source>
@@ -2044,8 +2510,8 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
<message>
<source>Copyright</source>
- <translatorcomment>attention le copyright n'est pas une protection ou une licence puisque ca existe même pour les licences libres les plus ouvertes. C'est simplement la mention détenteur des droits de reproduction (celui qui fixe la licence) . Le terme est donc impropre même en anglais.</translatorcomment>
- <translation>Protection par le droit d'auteur</translation>
+ <translatorcomment>attention le copyright n'est pas une protection ou une licence puisque ca existe même pour les licences libres les plus ouvertes. C'est simplement la mention détenteur des droits de reproduction (celui qui fixe la licence) . Le terme est donc impropre même en anglais. (je suis d'accord avec la remarque Francois)</translatorcomment>
+ <translation>Protection par le droit d'auteur courant</translation>
</message>
<message>
<source>Created the:
@@ -2066,7 +2532,7 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
<name>UBTeacherGuidePresentationWidget</name>
<message>
<source>Page: %0</source>
- <translation>Page: %0</translation>
+ <translation>Page : %0</translation>
</message>
</context>
<context>
@@ -2112,14 +2578,14 @@ Voulez-vous ignorer les erreurs pour ce serveur ?</translation>
</message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Page complète</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Embarqué </translation>
</message>
</context>
<context>
@@ -2164,11 +2630,11 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
</message>
<message>
<source>Updating file </source>
- <translation>Mise à jour du fichier</translation>
+ <translation>Mise à jour du fichier </translation>
</message>
<message>
<source>Please wait the import process will start soon...</source>
- <translation>Merci de patienter, le processus d'import va commencer...</translation>
+ <translation>Merci de patienter : le processus d'importation va commencer...</translation>
</message>
<message>
<source>Remind me later</source>
@@ -2323,7 +2789,7 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
</message>
<message>
<source>Error saving: %1</source>
- <translation>Erreur lors de la sauvegarde du fichier : %1</translation>
+ <translation>Erreur lors de l'enregistrement du fichier : %1</translation>
</message>
<message>
<source>Network Error: %1</source>
@@ -2339,7 +2805,7 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
</message>
<message>
<source>- %4 %5 remaining</source>
- <translation>- %4 %5 restante(s)</translation>
+ <translation>- %4 %5 restantes</translation>
</message>
<message>
<source>%1 of %2 (%3/sec) %4</source>
@@ -2372,12 +2838,12 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
<name>WBDownloadManager</name>
<message>
<source>1 Download</source>
- <translation>1 téléchargement(s)</translation>
+ <translation>1 téléchargement</translation>
</message>
<message>
<source>%1 Downloads</source>
<comment>always >= 2</comment>
- <translation>%1 téléchargement(s)</translation>
+ <translation>%1 téléchargements</translation>
</message>
</context>
<context>
@@ -2467,6 +2933,53 @@ Veuillez redémarrer l'application pour accéder aux documents mis à jour.
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Sélectionner du contenu à capturer :</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nom de l'application</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Restriction et mise en garde.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>La capture de contenu fonctionne sur les pages Web les plus courantes.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Veuillez respecter les droits d'auteur lors de la capture de contenu depuis le Web.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>Télécharger dans
+la bibliothèque</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>Télécharger sur
+la page courante</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>Ajouter un lien
+dans la bibliothèque</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>Ajouter un lien
+sur la page courante</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2540,7 +3053,7 @@ p, li { white-space: pre-wrap; }
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">En cliquant sur le bouton "Téléchargement", vous certifiez que vous respectez les conditions générales d'utilisation de YouTube </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">En cliquant sur le bouton "Téléchargement", vous certifiez que vous respectez les conditions générales d'utilisation de YouTube disponibles ici </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
<message>
<source>Restore credentials on reboot</source>
@@ -2675,7 +3188,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Keyboard button size:</source>
- <translation>Taille des touches du clavier virtuel:</translation>
+ <translation>Taille des touches du clavier virtuel :</translation>
</message>
<message>
<source>Positioned at the Top (recommended for tablets)</source>
@@ -2742,22 +3255,10 @@ p, li { white-space: pre-wrap; }
<translation>Licences</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Réseau</translation>
</message>
@@ -2795,16 +3296,12 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Proxy User:</source>
- <translation>Proxy :</translation>
+ <translation>Login Proxy :</translation>
</message>
<message>
<source>Pass:</source>
<translation>Mot de passe :</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">Identifiant Planète-Sankoré</translation>
- </message>
<message>
<source>User:</source>
<translation>Nom d'utilisateur :</translation>
@@ -2814,691 +3311,70 @@ p, li { white-space: pre-wrap; }
<translation>Mot de passe :</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translatorcomment>non traduisible en l'état (sauf disponibilité d'une version non officielle introuvable sur le web)</translatorcomment>
- <translation></translation>
- </message>
- <message>
<source>Credits</source>
<translation>Crédits</translation>
</message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Identifiant Planète-Sankoré pour l'export de fichier</translation>
+ </message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Les licences proposées ci-dessous sont rédigées en langue anglaise afin de respecter le cadre légal et officiel des traductions approuvées par les auteurs de ces textes.</span></p></td></tr></table></body></html></translation>
+ <source>Restore credentials on reboot </source>
+ <translation>Enrgistrer les paramètres de connexion.</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translatorcomment>ATTENTION AU NUMERO DE VERSION MENTIONNÃ DANS LA VERSION ANGLAISE ! (RESTE EN 1.4)</translatorcomment>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 2.0 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
+ <message>
+ <source>Start up tips</source>
+ <translation>Conseils de démarrage</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translatorcomment>attention ce texte est en français par défaut ce qui signifie qu'il devrait être traduit en anglais pour les utilisateurs non francophones !</translatorcomment>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></translation>
+ <message>
+ <source>Show start up tips</source>
+ <translation>Afficher les conseils au démarrage</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Langue</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Sélectionner la langue</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Cette nouvelle langue sera utilisée lors du redémarrage du logiciel</translation>
</message>
<message utf8="true">
- <source>Planète Sankoré ID for exporting file</source>
- <translation>Identifiant Planète Sankoré pour l'export de fichier</translation>
+ <source>Close Open-Sankoré</source>
+ <translation>Quitter Open-Sankoré</translation>
</message>
<message>
- <source>Restore credentials on reboot </source>
- <translation>Sauvegarder les paramètres de connexion.</translation>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Les licences sont en anglais pour respecter la traduction officielle et légale approuvée.</span></p></td></tr></table></body></html></translation>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
<message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation type="unfinished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Les licences proposées ci-dessous sont en langue anglaise afin de respecter le cadre légal et officiel de ces textes qui ne disposent pas d'une traduction officialisée en français.</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_hi.ts b/Sankore-3.1/resources/i18n/sankore_hi.ts
new file mode 100644
index 0000000..7943059
--- /dev/null
+++ b/Sankore-3.1/resources/i18n/sankore_hi.ts
@@ -0,0 +1,3374 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hi_IN">
+<context>
+ <name>BlackoutWidget</name>
+ <message>
+ <source>Click to Return to Application</source>
+ <translation type="unfinished">पà¥à¤°à¤¯à¥à¤ पर लà¥à¤à¤¨à¥ à¤à¥ लिठà¤à¥à¤²à¤¿à¤ à¤à¤°à¥à¤ । </translation>
+ </message>
+</context>
+<context>
+ <name>DownloadDialog</name>
+ <message>
+ <source>Downloads</source>
+ <translation type="unfinished">डाà¤à¤¨à¤²à¥à¤¡</translation>
+ </message>
+ <message>
+ <source>Clean Up</source>
+ <translation>साफ़ à¤à¤°à¥</translation>
+ </message>
+ <message>
+ <source>0 Items</source>
+ <translation type="unfinished">0 वसà¥à¤¤à¥
+</translation>
+ </message>
+</context>
+<context>
+ <name>DownloadItem</name>
+ <message>
+ <source>Form</source>
+ <translation type="unfinished">पà¥à¤°à¤ªà¤¤à¥à¤°</translation>
+ </message>
+ <message>
+ <source>Filename</source>
+ <translation type="unfinished">फ़ाà¤à¤² नाम</translation>
+ </message>
+ <message>
+ <source>Try Again</source>
+ <translation type="unfinished">फिर à¤à¥à¤¶à¤¿à¤¶ à¤à¤°à¥à¤</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="unfinished">रà¥à¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation type="unfinished">à¤à¥à¤²à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>IntranetPodcastPublishingDialog</name>
+ <message>
+ <source>Publish Podcast to YouTube</source>
+ <translation type="unfinished">यà¥à¤à¥à¤¯à¥à¤¬ पर पबà¥à¤²à¤¿à¤¶ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation type="unfinished">विवरण</translation>
+ </message>
+ <message>
+ <source>Author</source>
+ <translation type="unfinished">लà¥à¤à¤</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>Board</source>
+ <translation type="unfinished">बà¥à¤°à¥à¤¡à¤¼ </translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation type="unfinished">वà¥à¤¬</translation>
+ </message>
+ <message>
+ <source>Documents</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤à¤¼</translation>
+ </message>
+ <message>
+ <source>Tutorial</source>
+ <translation type="unfinished">à¤à¥à¤¯à¥à¤à¥à¤°à¤¿à¤¯à¤²</translation>
+ </message>
+ <message>
+ <source>Stylus</source>
+ <translation type="unfinished">लà¥à¤à¤¨à¥</translation>
+ </message>
+ <message>
+ <source>Ctrl+T</source>
+ <translation type="unfinished">Ctrl + T</translation>
+ </message>
+ <message>
+ <source>Backgrounds</source>
+ <translation type="unfinished">पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿</translation>
+ </message>
+ <message>
+ <source>Change Background</source>
+ <translation type="unfinished">पà¥à¤·à¥à¤à¤à¥à¤®à¤¿ बदलà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Undo</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤µà¤µà¤¤à¥ à¤à¤°à¥à¤</translation>
+ </message>
+ <message>
+ <source>Ctrl+Z</source>
+ <translation type="unfinished">Ctrl+Z</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation type="unfinished">फिर सॠà¤à¤°à¤¨à¤¾
+</translation>
+ </message>
+ <message>
+ <source>Ctrl+Y</source>
+ <translation type="unfinished">Ctrl+Y</translation>
+ </message>
+ <message>
+ <source>Previous</source>
+ <translation type="unfinished">पिà¤à¤²à¤¾</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation type="unfinished">पिà¤à¤²à¤¾ पà¥à¤·à¥à¤ </translation>
+ </message>
+ <message>
+ <source>PgUp</source>
+ <translation type="unfinished">पà¥à¤ à¤
प </translation>
+ </message>
+ <message>
+ <source>Next</source>
+ <translation type="unfinished">à¤
à¤à¤²à¤¾ </translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation type="unfinished">à¤
à¤à¤²à¤¾ पà¥à¤·à¥à¤ </translation>
+ </message>
+ <message>
+ <source>PgDown</source>
+ <translation type="unfinished">पà¥à¤ डाà¤à¤¨ </translation>
+ </message>
+ <message>
+ <source>Manage Documents</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ पà¥à¤°à¤¬à¤à¤§à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+D</source>
+ <translation type="unfinished">Ctrl+D</translation>
+ </message>
+ <message>
+ <source>Web Browsing</source>
+ <translation type="unfinished">वà¥à¤¬ बà¥à¤°à¤¾à¤à¤à¤¿à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+W</source>
+ <translation type="unfinished">Ctrl+W</translation>
+ </message>
+ <message>
+ <source>Quit</source>
+ <translation type="unfinished">बाहर à¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation type="unfinished">वापस </translation>
+ </message>
+ <message>
+ <source>Left</source>
+ <translation type="unfinished">बाà¤à¤¯à¤¾ </translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translation type="unfinished">à¤à¤à¥ </translation>
+ </message>
+ <message>
+ <source>Right</source>
+ <translation type="unfinished">दाà¤à¤¯à¥</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <translation type="unfinished">फिर लà¥à¤¡ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Home</source>
+ <translation type="unfinished">हà¥à¤® </translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation type="unfinished">बà¥à¤à¤®à¤¾à¤°à¥à¤à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
+ <translation type="unfinished">बà¥à¤à¤®à¤¾à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+B</source>
+ <translation type="unfinished">Ctrl+B</translation>
+ </message>
+ <message>
+ <source>Erase</source>
+ <translation type="unfinished">मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Preferences</source>
+ <translation type="unfinished">वरियताà¤à¤ </translation>
+ </message>
+ <message>
+ <source>Library</source>
+ <translation type="unfinished">पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯ </translation>
+ </message>
+ <message>
+ <source>Ctrl+L</source>
+ <translation type="unfinished">Ctrl+L</translation>
+ </message>
+ <message>
+ <source>Show Desktop</source>
+ <translation type="unfinished">डà¥à¤¸à¥à¤à¤à¤¾à¤ª दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Bigger</source>
+ <translation type="unfinished">बà¥à¤¾ </translation>
+ </message>
+ <message>
+ <source>Ctrl++</source>
+ <translation type="unfinished">Ctrl++</translation>
+ </message>
+ <message>
+ <source>Smaller</source>
+ <translation type="unfinished">à¤à¥à¤à¤¾ </translation>
+ </message>
+ <message>
+ <source>Ctrl+-</source>
+ <translation type="unfinished">Ctrl+-</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation type="unfinished">नया फà¥à¤²à¥à¤¡à¤° </translation>
+ </message>
+ <message>
+ <source>New Document</source>
+ <translation type="unfinished">नया दसà¥à¤¤à¤¾à¤µà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Import</source>
+ <translation type="unfinished">à¤à¤à¤ªà¥à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Export</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Open in Board</source>
+ <translation type="unfinished">बà¥à¤°à¥à¤¡ मà¥à¤ à¤à¥à¤²à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+O</source>
+ <translation type="unfinished">Ctrl+O</translation>
+ </message>
+ <message>
+ <source>Duplicate</source>
+ <translation type="unfinished">डà¥à¤ªà¥à¤²à¤¿à¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation type="unfinished">मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Del</source>
+ <translation type="unfinished">मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Add to Working Document</source>
+ <translation type="unfinished">à¤à¤¾à¤²à¥ दसà¥à¤¤à¤¾à¤µà¥à¤ मà¥à¤ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add Selected Content to Open Document</source>
+ <translation type="unfinished">à¤à¤¯à¤¨à¤¿à¤¤ विषयसामà¤à¥à¤°à¥ à¤à¥ यहाठà¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">à¤à¥à¤¡à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Rename</source>
+ <translation type="unfinished">फिर नाम दà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Tools</source>
+ <translation type="unfinished">à¤à¥à¤²à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>Multi Screen</source>
+ <translation type="unfinished">à¤à¤ सॠà¤
धिठसà¥à¤à¥à¤°à¥à¤¨ </translation>
+ </message>
+ <message>
+ <source>Wide Size (16/9)</source>
+ <translation type="unfinished">à¤à¥à¥à¤¾ à¤à¤à¤¾à¤° (16/9)</translation>
+ </message>
+ <message>
+ <source>Regular Size (4/3)</source>
+ <translation type="unfinished">नियमित à¤à¤à¤¾à¤° (4/3)</translation>
+ </message>
+ <message>
+ <source>Custom Size</source>
+ <translation type="unfinished">पà¥à¤°à¤à¤²à¤¿à¤¤ à¤à¤à¤¾à¤° </translation>
+ </message>
+ <message>
+ <source>Stop Loading</source>
+ <translation type="unfinished">लà¥à¤¡à¤¿à¤à¤ रà¥à¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation type="unfinished">à¤à¤¾à¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation type="unfinished">à¤à¤¾à¤ªà¥ </translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation type="unfinished">पà¥à¤¸à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Sleep</source>
+ <translation type="unfinished">सà¥à¤²à¥à¤ª </translation>
+ </message>
+ <message>
+ <source>Virtual Keyboard</source>
+ <translation type="unfinished">à¤à¤à¤¾à¤¸à¥ à¤à¥à¤¬à¥à¤°à¥à¤¡ </translation>
+ </message>
+ <message>
+ <source>Plain Light Background</source>
+ <translation type="unfinished">सपाठहलà¥à¤à¥ पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿ </translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation type="unfinished">हलà¥à¤à¥ </translation>
+ </message>
+ <message>
+ <source>Grid Light Background</source>
+ <translation type="unfinished">à¤à¥à¥à¤¦à¤¾à¤° हलà¥à¤à¥ पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿ </translation>
+ </message>
+ <message>
+ <source>Plain Dark Background</source>
+ <translation type="unfinished">सपाठà¤à¤¹à¤°à¥ पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿ </translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation type="unfinished">à¤à¤¹à¤°à¥ </translation>
+ </message>
+ <message>
+ <source>Grid Dark Background</source>
+ <translation type="unfinished">à¤à¥à¥à¤¦à¤¾à¤° à¤à¤¹à¤°à¥ पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿ </translation>
+ </message>
+ <message>
+ <source>Podcast</source>
+ <translation type="unfinished">पà¥à¤¡à¤à¤¾à¤¸à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Record</source>
+ <translation type="unfinished">रिà¤à¤¾à¤°à¥à¤¡ </translation>
+ </message>
+ <message>
+ <source>Start Screen Recording</source>
+ <translation type="unfinished">सà¥à¤à¥à¤°à¥à¤¨ रिà¤à¤¾à¤°à¥à¤¡à¤¿à¤à¤ शà¥à¤°à¥ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Erase Items</source>
+ <translation type="unfinished">वसà¥à¤¤à¥à¤à¤ मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Erase Annotations</source>
+ <translation type="unfinished">à¤à¤¿à¤ªà¥à¤ªà¤£à¤¿à¤¯à¤¾à¤ मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Clear Page</source>
+ <translation type="unfinished">पà¥à¤·à¥à¤ हà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Pen</source>
+ <translation type="unfinished">पà¥à¤¨ </translation>
+ </message>
+ <message>
+ <source>Open the tutorial</source>
+ <translation type="unfinished">à¤à¥à¤¯à¥à¤à¥à¤°à¤¿à¤¯à¤² à¤à¥à¤²à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Check Update</source>
+ <translation type="unfinished">à¤
पडà¥à¤ à¤à¤¾à¤à¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+H</source>
+ <translation type="unfinished">Ctrl+H</translation>
+ </message>
+ <message>
+ <source>Eraser</source>
+ <translation type="unfinished">à¤à¤°à¥à¤à¤° </translation>
+ </message>
+ <message>
+ <source>Marker</source>
+ <translation type="unfinished">मारà¥à¤à¤°à¥</translation>
+ </message>
+ <message>
+ <source>Selector</source>
+ <translation type="unfinished">सिलà¥à¤à¥à¤à¤° </translation>
+ </message>
+ <message>
+ <source>Hand</source>
+ <translation type="unfinished">हà¥à¤£à¥à¤¡ </translation>
+ </message>
+ <message>
+ <source>Zoom In</source>
+ <translation type="unfinished">बà¥à¤¾ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Zoom Out</source>
+ <translation type="unfinished">à¤à¥à¤à¤¾ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Line</source>
+ <translation type="unfinished">लाà¤à¤¨ </translation>
+ </message>
+ <message>
+ <source>Small Line</source>
+ <translation type="unfinished">à¤à¥à¤à¥ लाà¤à¤¨ </translation>
+ </message>
+ <message>
+ <source>Medium Line</source>
+ <translation type="unfinished">मधà¥à¤¯à¤® लाà¤à¤¨ </translation>
+ </message>
+ <message>
+ <source>Large Line</source>
+ <translation type="unfinished">बà¥à¥ लाà¤à¤¨ </translation>
+ </message>
+ <message>
+ <source>Smalle Eraser</source>
+ <translation type="unfinished">à¤à¥à¤à¤¾ à¤à¤°à¥à¤à¤° </translation>
+ </message>
+ <message>
+ <source>Medium Eraser</source>
+ <translation type="unfinished">मधà¥à¤¯à¤® à¤à¤°à¥à¤à¤° </translation>
+ </message>
+ <message>
+ <source>Large Eraser</source>
+ <translation type="unfinished">बà¥à¤¾ à¤à¤°à¥à¤à¤° </translation>
+ </message>
+ <message>
+ <source>Color</source>
+ <translation type="unfinished">à¤à¤²à¤° </translation>
+ </message>
+ <message>
+ <source>Reload Current Page</source>
+ <translation type="unfinished">वरà¥à¤¤à¤®à¤¾à¤¨ पà¥à¤ à¤à¥ फिर लà¥à¤¡ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Load Home Page</source>
+ <translation type="unfinished">हà¥à¤® पà¥à¤ लà¥à¤¡ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Show Bookmarks</source>
+ <translation type="unfinished">बà¥à¤à¤®à¤¾à¤°à¥à¤à¥à¤¸ दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Add Bookmark</source>
+ <translation type="unfinished">बà¥à¤à¤®à¤¾à¤°à¥à¤à¥à¤¸ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Display Board</source>
+ <translation type="unfinished">बà¥à¤°à¥à¤¡ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Erase Content</source>
+ <translation type="unfinished">विषयवसà¥à¤¤à¥ मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Display Preferences</source>
+ <translation type="unfinished">वरियता दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Show Library</source>
+ <translation type="unfinished">पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯ दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Show Computer Desktop</source>
+ <translation type="unfinished">à¤à¤®à¥à¤ªà¥à¤¯à¥à¤à¤° डà¥à¤¸à¥à¤à¤à¤¾à¤ª दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+Shift+H</source>
+ <translation type="unfinished">Ctrl+Shift+H</translation>
+ </message>
+ <message>
+ <source>Create a New Folder</source>
+ <translation type="unfinished">à¤à¤ नया फà¥à¤²à¥à¤¡à¤° बनाà¤à¤ </translation>
+ </message>
+ <message>
+ <source>Create a New Document</source>
+ <translation type="unfinished">à¤à¤ नया दसà¥à¤¤à¤¾à¤µà¥à¤ बनाà¤à¤ </translation>
+ </message>
+ <message>
+ <source>Import a Document</source>
+ <translation type="unfinished">à¤à¤ दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Export a Document</source>
+ <translation type="unfinished">à¤à¤ दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Open Page in Board</source>
+ <translation type="unfinished">पà¥à¤ à¤à¥ बà¥à¤°à¥à¤¡ मà¥à¤ à¤à¥à¤²à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Duplicate Selected Content</source>
+ <translation type="unfinished">à¤à¤¯à¤¨à¤¿à¤¤ डà¥à¤ªà¥à¤²à¤¿à¤à¥à¤ विषयसामà¤à¥à¤°à¥ </translation>
+ </message>
+ <message>
+ <source>Delete Selected Content</source>
+ <translation type="unfinished">à¤à¤¯à¤¨à¤¿à¤¤ विषयसामà¤à¥à¤°à¥ à¤à¥ मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Add Content to Document</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ मà¥à¤ विषयसामà¤à¥à¤°à¥ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Rename Content</source>
+ <translation type="unfinished">विषयवसà¥à¤¤à¥ à¤à¥ फिर नाम दà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Display Tools</source>
+ <translation type="unfinished">à¤à¥à¤²à¥à¤¸ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Use Document Wide Size (16/9)</source>
+ <translation type="unfinished">à¤à¥à¥à¥ à¤à¤à¤¾à¤° à¤à¤¾ दसà¥à¤¤à¤¾à¤µà¥à¤ पà¥à¤°à¤¯à¥à¤ à¤à¤°à¥à¤ (16/9)</translation>
+ </message>
+ <message>
+ <source>Use Document Regular Size (4/3)</source>
+ <translation type="unfinished">नियमित à¤à¤à¤¾à¤° à¤à¤¾ दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤ªà¤¯à¥à¤ à¤à¤°à¥à¤ (4/3)</translation>
+ </message>
+ <message>
+ <source>Use Custom Document Size</source>
+ <translation type="unfinished">पà¥à¤°à¤à¤²à¤¿à¤¤ à¤à¤à¤¾à¤° à¤à¤¾ दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤ªà¤¯à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Stop Loading Web Page</source>
+ <translation type="unfinished">वà¥à¤¬ पà¥à¤ लà¥à¤¡à¤¿à¤à¤ रà¥à¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Put Presentation to Sleep</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤à¤à¥à¤¶à¤¨ à¤à¥ सà¥à¤²à¥à¤ª पर रà¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Display Virtual Keyboard</source>
+ <translation type="unfinished">à¤à¤à¤¾à¤¸à¥ à¤à¥à¤¬à¥à¤°à¥à¤¡ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Record Presentation to Video</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤à¤à¥à¤¶à¤¨ à¤à¥ वà¥à¤¡à¤¿à¤¯à¥ पर रिà¤à¤¾à¤°à¥à¤¡ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Erase All Items</source>
+ <translation type="unfinished">सà¤à¥ वसà¥à¤¤à¥à¤à¤ à¤à¥ मिà¤à¤¾ दà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Erase All Annotations</source>
+ <translation type="unfinished">सà¤à¥ à¤à¤¿à¤ªà¥à¤ªà¤£à¤¿à¤¯à¥à¤ à¤à¥ मिà¤à¤¾ दà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Clear All Elements</source>
+ <translation type="unfinished">सà¤à¥ ततà¥à¤µà¥à¤ à¤à¥ मिà¤à¤¾ दà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Annotate Document</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¥ वà¥à¤¯à¤¾à¤à¥à¤¯à¤¾ </translation>
+ </message>
+ <message>
+ <source>Ctrl+I</source>
+ <translation type="unfinished">Ctrl+I</translation>
+ </message>
+ <message>
+ <source>Erase Annotation</source>
+ <translation type="unfinished">à¤à¤¿à¤ªà¥à¤ªà¤£à¥ मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+E</source>
+ <translation type="unfinished">Ctrl+E</translation>
+ </message>
+ <message>
+ <source>Highlight </source>
+ <translation type="unfinished">हाà¤à¤²à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+M</source>
+ <translation type="unfinished">Ctrl+M</translation>
+ </message>
+ <message>
+ <source>Select And Modify Objects</source>
+ <translation type="unfinished">वसà¥à¤¤à¥à¤à¤ à¤à¥ à¤à¥à¤¨à¥à¤ à¤à¤° बदलà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+F</source>
+ <translation type="unfinished">Ctrl+F</translation>
+ </message>
+ <message>
+ <source>Scroll Page</source>
+ <translation type="unfinished">सà¥à¤à¥à¤°à¥à¤² पà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Laser Pointer</source>
+ <translation type="unfinished">लà¥à¤à¤° पाà¤à¤à¤à¤° </translation>
+ </message>
+ <message>
+ <source>Virtual Laser Pointer</source>
+ <translation type="unfinished">à¤à¤à¤¾à¤¸à¥ लà¥à¤à¤° पाà¤à¤à¤à¤° </translation>
+ </message>
+ <message>
+ <source>Ctrl+G</source>
+ <translation type="unfinished">Ctrl+G</translation>
+ </message>
+ <message>
+ <source>Draw Lines</source>
+ <translation type="unfinished">लाà¤à¤¨ à¤à¥à¤à¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+J</source>
+ <translation type="unfinished">Ctrl+J</translation>
+ </message>
+ <message>
+ <source>Text</source>
+ <translation type="unfinished">पाठ</translation>
+ </message>
+ <message>
+ <source>Write Text</source>
+ <translation type="unfinished">पाठलिà¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Ctrl+K</source>
+ <translation type="unfinished">Ctrl+K</translation>
+ </message>
+ <message>
+ <source>Capture</source>
+ <translation type="unfinished">à¤
धिà¤à¥à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add To Current Page</source>
+ <translation type="unfinished">वरà¥à¤¤à¤®à¤¾à¤¨à¥à¤¹ पà¥à¤ पर à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add Item To Current Page</source>
+ <translation type="unfinished">वरà¥à¤¤à¤®à¤¾à¤¨ पà¥à¤ पर वसà¥à¤¤à¥ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add To New Page</source>
+ <translation type="unfinished">नयॠपà¥à¤ पर à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add Item To New Page</source>
+ <translation type="unfinished">नयॠपà¥à¤ पर वसà¥à¤¤à¥ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add To Library</source>
+ <translation type="unfinished">पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯ पर à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add Item To Library</source>
+ <translation type="unfinished">वसà¥à¤¤à¥ à¤à¥ पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯ पर à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Pages</source>
+ <translation type="unfinished">पà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Create a New Page</source>
+ <translation type="unfinished">à¤à¤ नया पà¥à¤ बनाà¤à¤ </translation>
+ </message>
+ <message>
+ <source>New Page</source>
+ <translation type="unfinished">नया पà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Duplicate Page</source>
+ <translation type="unfinished">डà¥à¤ªà¥à¤²à¤¿à¤à¥à¤ पà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Duplicate the Current Page</source>
+ <translation type="unfinished">वरà¥à¤¤à¤®à¤¾à¤¨ पà¥à¤ à¤à¤¾ डà¥à¤ªà¥à¤²à¤¿à¤à¥à¤ तà¥à¤¯à¤¾à¤° à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Import Page</source>
+ <translation type="unfinished">पà¥à¤ à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Import an External Page</source>
+ <translation type="unfinished">à¤à¤ बाहरॠपà¥à¤ à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation type="unfinished">विराम </translation>
+ </message>
+ <message>
+ <source>Pause Podcast Recording</source>
+ <translation type="unfinished">पà¥à¤¡à¤à¤¾à¤¸à¥à¤ रिà¤à¤¾à¤°à¥à¤¡à¤¿à¤à¤ à¤à¥ विराम दà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Podcast Config</source>
+ <translation type="unfinished">पà¥à¤¡à¤à¤¾à¤¸à¥à¤ विनà¥à¤¯à¤¾à¤¸ </translation>
+ </message>
+ <message>
+ <source>Configure Podcast Recording</source>
+ <translation type="unfinished">पà¥à¤¡à¤à¤¾à¤¸à¥à¤ रिà¤à¤¾à¤°à¥à¤¡à¤¿à¤à¤ à¤à¤¾ विनà¥à¤¯à¤¾à¤¸ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Web Trap</source>
+ <translation type="unfinished">वà¥à¤¬ à¤à¥à¤°à¥à¤ª </translation>
+ </message>
+ <message>
+ <source>Trap Web Content</source>
+ <translation type="unfinished">à¤à¥à¤°à¥à¤ª वà¥à¤¬ विषयसामà¤à¥à¤°à¥ </translation>
+ </message>
+ <message>
+ <source>Capture Part of the Screen</source>
+ <translation type="unfinished">सà¥à¤à¥à¤°à¥à¤¨ à¤à¤¾ à¤
धिà¤à¥à¤¹à¤¿à¤¤ à¤à¤¾à¤ </translation>
+ </message>
+ <message>
+ <source>Custom Capture</source>
+ <translation type="unfinished">पà¥à¤°à¤à¤²à¤¿à¤¤ à¤
धिà¤à¥à¤°à¤¹à¤£ </translation>
+ </message>
+ <message>
+ <source>Capture a Window</source>
+ <translation type="unfinished">à¤à¤ विणà¥à¤¡à¥ à¤
धिà¤à¥à¤¹à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Show Main Screen on Display Screen</source>
+ <translation type="unfinished">मà¥à¤¨ सà¥à¤à¥à¤°à¥à¤¨ à¤à¥ डिसपà¥à¤²à¥ सà¥à¤à¥à¤°à¥à¤¨ पर दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Erase all Annotations</source>
+ <translation type="unfinished">सà¤à¥ à¤à¤¿à¤ªà¥à¤ªà¤£à¤¿à¤¯à¤¾à¤ मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>eduMedia</source>
+ <translation type="unfinished">à¤à¤à¥à¤¯à¥ मà¥à¤¡à¤¿à¤¯à¤¾ </translation>
+ </message>
+ <message>
+ <source>Import eduMedia simulation</source>
+ <translation type="unfinished">à¤à¤à¥à¤¯à¥ मà¥à¤¡à¤¿à¤¯à¤¾ सिमà¥à¤²à¥à¤¶à¤¨ à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Window Capture</source>
+ <translation type="unfinished">विणà¥à¤¡à¥ à¤
धिà¤à¥à¤¹à¤£ </translation>
+ </message>
+ <message>
+ <source>Show on Display</source>
+ <translation type="unfinished">डिसपà¥à¤²à¥ पर दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message utf8="true">
+ <source>Open-Sankoré</source>
+ <translation type="unfinished">सà¤à¤à¥à¤°à¤-à¤à¥à¤²à¥à¤ </translation>
+ </message>
+ <message utf8="true">
+ <source>Quit Open-Sankoré</source>
+ <translation type="unfinished">सà¤à¤à¥à¤°à¥_à¤à¥à¤²à¥à¤ सॠबाहर à¤à¤¾à¤à¤</translation>
+ </message>
+ <message utf8="true">
+ <source>Open-Sankoré Editor</source>
+ <translation type="unfinished">सà¤à¤à¥à¤°-à¤à¤¡à¤¿à¤à¤° à¤à¥à¤²à¥à¤ </translation>
+ </message>
+ <message utf8="true">
+ <source>Show Open-Sankoré Widgets Editor</source>
+ <translation type="unfinished">सà¤à¤à¥à¤° विà¤à¥à¤à¥à¤¸ à¤à¤ªà¤¯à¥à¤ à¤à¥à¤²à¥à¤ दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message utf8="true">
+ <source>Hide Open-Sankoré</source>
+ <translation type="unfinished">सà¤à¤à¥à¤°à¥_à¤à¥à¤²à¥à¤ à¤à¥à¤ªà¤¾à¤¯à¥à¤ </translation>
+ </message>
+ <message utf8="true">
+ <source>Hide Open-Sankoré Application</source>
+ <translation type="unfinished">सà¤à¤à¥à¤°à¥_à¤à¥à¤²à¥à¤ à¤à¤ªà¤¯à¥à¤ à¤à¥à¤ªà¤¾à¤¯à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Import Uniboard Documents</source>
+ <translation type="unfinished">यà¥à¤¨à¤¿à¤¬à¥à¤°à¥à¤¡ दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Import old Sankore or Uniboard documents</source>
+ <translation type="unfinished">पà¥à¤°à¤¾à¤¨à¥ सà¤à¤à¥à¤° या यà¥à¤¨à¤¿à¤¬à¥à¤°à¥à¤¡ दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Group items</source>
+ <translation type="unfinished">समà¥à¤¹ वसà¥à¤¤à¥à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Play</source>
+ <translation type="unfinished">पà¥à¤²à¥ </translation>
+ </message>
+ <message>
+ <source>Interact with items</source>
+ <translation type="unfinished">वसà¥à¤¤à¥à¤à¤ à¤à¥ साथ सà¤à¤µà¤¾à¤¦ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Erase Background</source>
+ <translation type="unfinished">पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿ मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Remove the backgound</source>
+ <translation type="unfinished">पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿ हà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation type="unfinished">समà¥à¤¹</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation type="unfinished">पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯ मॠडाà¤à¤¨à¤²à¥à¤¡ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation type="unfinished">वरà¥à¤¤à¤®à¤¾à¤¨ पà¥à¤·à¥à¤ पर डाà¤à¤¨à¤²à¥à¤¡ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation type="unfinished">पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯ सॠसमà¥à¤¬à¤¨à¥à¤§ à¤à¥à¤¡à¤¼ </translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation type="unfinished">वरà¥à¤¤à¤®à¤¾à¤¨ पà¥à¤·à¥à¤ सॠसमà¥à¤¬à¤¨à¥à¤§ à¤à¥à¤¡à¤¼ </translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">बà¥à¤à¤®à¤¾à¤°à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>PasswordDialog</name>
+ <message>
+ <source>Authentication Required</source>
+ <translation type="unfinished">पà¥à¤°à¤®à¤¾à¤£à¥à¤à¤°à¤£ à¤à¥ à¤à¤µà¤¶à¥à¤¯à¤ </translation>
+ </message>
+ <message>
+ <source>Username:</source>
+ <translation type="unfinished">पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾ नाम</translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translation type="unfinished">पासवरà¥à¤¡ </translation>
+ </message>
+</context>
+<context>
+ <name>ProxyDialog</name>
+ <message>
+ <source>Proxy Authentication</source>
+ <translation type="unfinished">पà¥à¤°à¤¾à¤à¥à¤¸à¥ पà¥à¤°à¤®à¤¾à¤£à¥à¤à¤°à¤£ </translation>
+ </message>
+ <message>
+ <source>Connect to Proxy</source>
+ <translation type="unfinished">पà¥à¤°à¤¾à¤à¥à¤¸à¥ सॠà¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Username:</source>
+ <translation type="unfinished">पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾ à¤à¤¾ नाम :</translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translation type="unfinished">पासवरà¥à¤¡ :</translation>
+ </message>
+ <message>
+ <source>Save username and password for future use</source>
+ <translation type="unfinished">à¤à¤à¤¾à¤®à¥ à¤à¤ªà¤¯à¥à¤ à¤à¥ लिठपà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾ à¤à¤¾ नाम à¤à¤° पासवरà¥à¤¡ सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>Element ID = </source>
+ <translation type="unfinished">ततà¥à¤µ à¤à¤ डॠ= </translation>
+ </message>
+ <message>
+ <source>Content is not supported in destination format.</source>
+ <translation type="unfinished">विषय सामà¤à¥à¤°à¥ à¤à¤à¤¤à¤µà¥à¤¯ पà¥à¤°à¤¾à¤°à¥à¤ª मà¥à¤ समरà¥à¤¥à¤¿à¤¤ नहà¥à¤ हà¥. </translation>
+ </message>
+ <message>
+ <source>Remove Page</source>
+ <translation type="unfinished">पà¥à¤ हà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Are you sure you want to remove 1 page from the selected document '%0'?</source>
+ <translation type="unfinished">à¤à¥à¤¯à¤¾ à¤à¤ª सà¥à¤¨à¤¿à¤¶à¥à¤à¤¿à¤¤ हà¥à¤ à¤à¤¿ à¤à¤ª à¤à¤¯à¤¨à¤¿à¤¤ दसà¥à¤¤à¤¾à¤µà¥à¤ मà¥à¤ सॠ1 पà¥à¤ हà¤à¤¾à¤¨à¤¾ à¤à¤¾à¤¹à¤¤à¥ हà¥à¤ ? </translation>
+ </message>
+</context>
+<context>
+ <name>UBApplication</name>
+ <message>
+ <source>Page Size</source>
+ <translation type="unfinished">पà¥à¤ à¤à¤¾ à¤à¤à¤¾à¤° </translation>
+ </message>
+ <message>
+ <source>Podcast</source>
+ <translation type="unfinished">पà¥à¤¡à¤à¤¾à¤¸à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBApplicationController</name>
+ <message>
+ <source>Web</source>
+ <translation type="unfinished">वà¥à¤¬ </translation>
+ </message>
+ <message>
+ <source>New update available, would you go to the web page ?</source>
+ <translation type="unfinished">नया à¤
पडà¥à¤ तà¥à¤¯à¤¾à¤° हà¥, à¤à¥à¤¯à¤¾ à¤à¤ª वà¥à¤¬ पà¥à¤ पर à¤à¤¾à¤à¤à¤à¥ ? </translation>
+ </message>
+ <message>
+ <source>No update available</source>
+ <translation type="unfinished">à¤à¥à¤ à¤
पडà¥à¤ à¤à¤ªà¤²à¤¬à¥à¤§ नहà¥à¤ हॠ</translation>
+ </message>
+ <message>
+ <source>Update available</source>
+ <translation type="unfinished">à¤
पडà¥à¤ à¤à¤ªà¤²à¤¬à¥à¤§ हà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation type="unfinished">à¤
पडà¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBBoardController</name>
+ <message>
+ <source>Downloading content %1 failed</source>
+ <translation type="unfinished">विषय सामà¤à¥à¤°à¥ %1 à¤à¥ डाà¤à¤¨à¤²à¥à¤¡à¤¿à¤à¤ विफल </translation>
+ </message>
+ <message>
+ <source>Download finished</source>
+ <translation type="unfinished">डाà¤à¤¨à¤²à¥à¤¡ पà¥à¤°à¥à¤£ </translation>
+ </message>
+ <message>
+ <source>Unknown tool type %1</source>
+ <translation type="unfinished">à¤
à¤à¥à¤à¤¾à¤¤ à¤à¥à¤² पà¥à¤°à¤à¤¾à¤° %1 </translation>
+ </message>
+ <message>
+ <source>Unknown content type %1</source>
+ <translation type="unfinished">à¤
à¤à¥à¤à¤¾à¤¤ विषय वसà¥à¤¤à¥ à¤à¤¾ पà¥à¤°à¤à¤¾à¤° %1</translation>
+ </message>
+ <message>
+ <source>Add Item</source>
+ <translation type="unfinished">वसà¥à¤¤à¥ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>All Supported (%1)</source>
+ <translation type="unfinished">सà¤à¥ समरà¥à¤¥à¤¿à¤¤ (%1) </translation>
+ </message>
+ <message>
+ <source>Delete page %1 from document</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ सॠ%1पà¥à¤ मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Page %1 deleted</source>
+ <translation type="unfinished">पà¥à¤ %1 मिà¤à¤¾à¤¯à¤¾ à¤à¤¯à¤¾ </translation>
+ </message>
+ <message>
+ <source>Add file operation failed: file copying error</source>
+ <translation type="unfinished">फाà¤à¤² à¤à¥à¥à¤¨à¥ à¤à¤¾ à¤à¤¾à¤°à¥à¤¯ विफल: फाà¤à¤² à¤à¤¾à¤ªà¥ तà¥à¤°à¥à¤à¤¿ </translation>
+ </message>
+ <message>
+ <source>Group</source>
+ <translation type="unfinished">समà¥à¤¹ बनाà¤à¤ </translation>
+ </message>
+ <message>
+ <source>Ungroup</source>
+ <translation type="unfinished">समà¥à¤¹ सॠहà¤à¤¾à¤à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBBoardPaletteManager</name>
+ <message>
+ <source>Error Adding Image to Library</source>
+ <translation type="unfinished">पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯ पर à¤à¤¿à¤¤à¥à¤° à¤à¥à¥à¤¨à¥ मà¥à¤ तà¥à¤°à¥à¤à¤¿ </translation>
+ </message>
+ <message>
+ <source>CapturedImage</source>
+ <translation type="unfinished">à¤à¤¿à¤¤à¥à¤° à¤
धिà¤à¥à¤¹à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBCachePropertiesWidget</name>
+ <message>
+ <source>Cache Properties</source>
+ <translation type="unfinished">à¤à¥à¤ विशà¥à¤·à¤¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Color:</source>
+ <translation type="unfinished">रà¤à¤ : </translation>
+ </message>
+ <message>
+ <source>Shape:</source>
+ <translation type="unfinished">रà¥à¤ª : </translation>
+ </message>
+ <message>
+ <source>Alpha:</source>
+ <translation type="unfinished">à¤
लà¥à¤«à¤¾ </translation>
+ </message>
+ <message>
+ <source>Geometry:</source>
+ <translation type="unfinished">à¤à¥à¤¯à¤¾à¤®à¤¿à¤¤à¤¿</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation type="unfinished">à¤à¥à¤¡à¤¾à¤</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation type="unfinished">à¤à¤à¤à¤¾à¤</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation type="unfinished">à¤
नà¥à¤ªà¤¾à¤¤ रà¤à¤¨à¤¾</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation type="unfinished">पà¥à¤°à¤à¤¾à¤°</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤µà¤¾à¤µà¤²à¥à¤à¤¨</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation type="unfinished">cache बà¤à¤¦ à¤à¤°à¤¨à¤¾</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation type="unfinished">विषय सामà¤à¥à¤°à¥ à¤à¤¿à¤°à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation type="unfinished">à¤à¤µà¤¿à¤¯à¥à¤ à¤à¥ सà¥à¤µà¥à¤à¤¾à¤° नहà¥à¤ à¤à¤° सà¤à¤¤à¥</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation type="unfinished">डà¥à¤à¤¾ पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ नहà¥à¤ à¤à¤° सà¤à¤¤à¥</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation type="unfinished">à¤à¤¡à¤¿à¤¯à¥ फ़ाà¤à¤² नहà¥à¤ हà¥</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation type="unfinished"> à¤à¤¡à¤¿à¤¯à¥ फ़ाà¤à¤² à¤à¤²à¤¾à¤¯à¥ </translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation type="unfinished">पà¥à¤ पॠलिà¤à¤ à¤à¥à¤¡à¤¼à¤¨à¥ à¤à¥ लिà¤</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation type="unfinished">वà¥à¤¬à¤ªà¥à¤ पॠलिà¤à¤ à¤à¥à¤¡à¤¼à¤¨à¥ à¤à¥ लिà¤</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation type="unfinished">पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯ सॠà¤à¤¡à¤¿à¤¯à¥ फ़ाà¤à¤² à¤à¥à¤à¤à¥à¤ à¤à¤° à¤à¤¸ बà¥à¤à¥à¤¸ मà¥à¤ डà¥à¤°à¥à¤ª à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation type="unfinished">ठà¥à¤ हॠ</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation type="unfinished">à¤
à¤à¤²à¤¾ पà¥à¤·à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation type="unfinished">पिà¤à¤²à¤¾ पà¥à¤·à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤ पà¥à¤·à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation type="unfinished">à¤
à¤à¤¤à¤¿à¤® पà¥à¤·à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation type="unfinished">पà¥à¤·à¥à¤ सà¤à¤à¥à¤¯à¤¾</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation type="unfinished">Url पाठयहाठसमà¥à¤®à¤¿à¤²à¤¿à¤¤ à¤à¤°à¥à¤</translation>
+ </message>
+</context>
+<context>
+ <name>UBDesktopPalette</name>
+ <message>
+ <source>Capture Part of the Screen</source>
+ <translation type="unfinished">सà¥à¤à¥à¤°à¥à¤¨ à¤à¤¾ हिसà¥à¤¸à¤¾ à¤
धिà¤à¥à¤¹à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Capture the Screen</source>
+ <translation type="unfinished">सà¥à¤à¥à¤°à¥à¤¨ à¤
धिà¤à¥à¤°à¤¹à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Show the stylus palette</source>
+ <translation type="unfinished">लà¥à¤à¤¨à¥à¤-पà¥à¤²à¥à¤ दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Show Board on Secondary Screen</source>
+ <translation type="unfinished">बà¥à¤°à¥à¤¡ à¤à¥ सà¥à¤à¤£à¥à¤¡à¤°à¥ सà¥à¤à¥à¤°à¥à¤¨ पर दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Show Desktop on Secondary Screen</source>
+ <translation type="unfinished">सà¥à¤à¤£à¥à¤¡à¤°à¥ सà¥à¤à¥à¤°à¥à¤¨ पर डà¥à¤¸à¥à¤à¤à¤¾à¤ª दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Show Open-Sankore</source>
+ <translation type="unfinished">सà¤à¤à¥à¤°à¤-à¤à¥à¤²à¥à¤ दिà¤à¤¾à¤à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentController</name>
+ <message>
+ <source>New Folder</source>
+ <translation type="unfinished">नया फà¥à¤²à¥à¤¡à¤° </translation>
+ </message>
+ <message>
+ <source>Page %1</source>
+ <translation type="unfinished">पà¥à¤ %1</translation>
+ </message>
+ <message>
+ <source>Add Folder of Images</source>
+ <translation type="unfinished">à¤à¤¿à¤¤à¥à¤°à¥à¤ à¤à¥ फà¥à¤²à¥à¤¡à¤° à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add Images</source>
+ <translation type="unfinished">à¤à¤¿à¤¤à¥à¤° à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add Pages from File</source>
+ <translation type="unfinished">फाà¤à¤² सॠपà¥à¤ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Duplicating Document %1</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ %1 à¤à¥ नà¤à¤² हॠरहॠहॠ</translation>
+ </message>
+ <message>
+ <source>Document %1 copied</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ %1 à¤à¤¾à¤ªà¥ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ </translation>
+ </message>
+ <message>
+ <source>Remove Page</source>
+ <translation type="unfinished">पà¥à¤ हà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Open Supported File</source>
+ <translation type="unfinished">समरà¥à¤¥à¤¿à¤¤ फाà¤à¤² à¤à¥à¤²à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Importing file %1...</source>
+ <translation type="unfinished">फाà¤à¤² %1 à¤à¤à¤ªà¥à¤°à¥à¤ हॠरहॠहà¥...</translation>
+ </message>
+ <message>
+ <source>Failed to import file ... </source>
+ <translation type="unfinished">फाà¤à¤² à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤°à¤¨à¥ मà¥à¤ विफल... </translation>
+ </message>
+ <message>
+ <source>Import all Images from Folder</source>
+ <translation type="unfinished">फà¥à¤²à¥à¤¡à¤° सॠसà¤à¥ à¤à¤¿à¤¤à¥à¤°à¥à¤ à¤à¥ à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation type="unfinished">मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Empty</source>
+ <translation type="unfinished">à¤à¤¾à¤²à¥ </translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation type="unfinished">à¤à¥à¤°à¥à¤¶ </translation>
+ </message>
+ <message>
+ <source>Open Document</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¥à¤²à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add all Images to Document</source>
+ <translation type="unfinished">सà¤à¥ à¤à¤¿à¤¤à¥à¤°à¥à¤ à¤à¥ दसà¥à¤¤à¤¾à¤µà¥à¤ मà¥à¤ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>All Images (%1)</source>
+ <translation type="unfinished">सà¤à¥ à¤à¤¿à¤¤à¥à¤° (%1)</translation>
+ </message>
+ <message>
+ <source>Selection does not contain any image files!</source>
+ <translation type="unfinished">à¤à¤¯à¤¨ मà¥à¤ à¤à¥à¤ à¤à¤¿à¤¤à¥à¤° फाà¤à¤²à¥à¤ नहà¥à¤ हà¥à¤ ! </translation>
+ </message>
+ <message>
+ <source>The document '%1' 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 type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ '%1'सà¤à¤à¥à¤° à¤à¥ à¤à¤ नवà¥à¤¨ सà¤à¤¸à¥à¤à¤°à¤£ (%2) सॠतà¥à¤¯à¤¾à¤° हà¥à¤ हॠ। à¤à¤¸à¥ à¤à¥à¤²à¤à¤° à¤à¤ª à¤à¥à¤ à¤à¤¾à¤¨à¤à¤¾à¤°à¥ à¤à¤à¤µà¤¾ सà¤à¤¤à¥ हà¥à¤ । à¤à¥à¤¯à¤¾ à¤à¤ª à¤à¤à¥ बà¥à¤¨à¤¾ à¤à¤¾à¤¹à¤¤à¥ हà¥à¤ ? </translation>
+ </message>
+ <message numerus="yes">
+ <source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
+ <translation type="unfinished">
+ <numerusform>à¤à¤ª सà¥à¤¨à¤¿à¤¶à¥à¤à¤¿à¤¤ हà¥à¤ à¤à¤¿ à¤à¤ª à¤à¤¯à¤¨à¤¿à¤¤ दसà¥à¤¤à¤¾à¤µà¥à¤ %1 सॠपà¥à¤ %n (पà¥à¤à¥à¤) à¤à¥ हà¤à¤¾à¤¨à¤¾ à¤à¤¾à¤¹à¤¤à¥ हà¥à¤ ?</numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Title page</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤ पà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Folder does not contain any image files</source>
+ <translation type="unfinished">फà¥à¤²à¥à¤¡à¤° मà¥à¤ à¤à¥à¤ à¤à¤¿à¤¤à¥à¤° फाà¤à¤²à¥à¤ नहà¥à¤ हॠ</translation>
+ </message>
+ <message>
+ <source>Untitled Documents</source>
+ <translation type="unfinished">बिना शà¥à¤°à¥à¤·à¤ à¤à¥ दसà¥à¤¤à¤¾à¤µà¥à¤ </translation>
+ </message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentManager</name>
+ <message>
+ <source>images</source>
+ <translation type="unfinished">à¤à¤¿à¤¤à¥à¤° </translation>
+ </message>
+ <message>
+ <source>videos</source>
+ <translation type="unfinished">विडà¥à¤¯à¥à¤ </translation>
+ </message>
+ <message>
+ <source>objects</source>
+ <translation type="unfinished">वसà¥à¤¤à¥à¤à¤ </translation>
+ </message>
+ <message>
+ <source>widgets</source>
+ <translation type="unfinished">विà¤à¥à¤à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>All supported files (*.%1)</source>
+ <translation type="unfinished">सà¤à¥ समरà¥à¤¥à¤¿à¤¤ फाà¤à¤²à¥à¤ (*.%1)</translation>
+ </message>
+ <message>
+ <source>File %1 saved</source>
+ <translation type="unfinished">फाà¤à¤² %1 सà¥à¤°à¤à¥à¤·à¤¿à¤¤ </translation>
+ </message>
+ <message>
+ <source>Inserting page %1 of %2</source>
+ <translation type="unfinished">%2 à¤à¤¾ पà¥à¤ %1 पà¥à¤°à¤µà¤¿à¤·à¥à¤ हॠरहा हॠ</translation>
+ </message>
+ <message>
+ <source>Import successful.</source>
+ <translation type="unfinished">à¤à¤à¤ªà¥à¤°à¥à¤ सफल. </translation>
+ </message>
+ <message>
+ <source>Import of file %1 successful.</source>
+ <translation type="unfinished">फाà¤à¤² %1 à¤à¤¾ à¤à¤à¤ªà¥à¤°à¥à¤ सफल. </translation>
+ </message>
+ <message>
+ <source>Importing file %1</source>
+ <translation type="unfinished">फाà¤à¤² %1 à¤à¤à¤ªà¥à¤°à¥à¤ हॠरहॠहॠ</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentNavigator</name>
+ <message>
+ <source>Page %0</source>
+ <translation type="unfinished">पà¥à¤ %0</translation>
+ </message>
+ <message>
+ <source>Title page</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤ पà¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentPublisher</name>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ विफल. </translation>
+ </message>
+ <message>
+ <source>Export canceled ...</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ निरसà¥à¤¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ ...</translation>
+ </message>
+ <message>
+ <source>Converting page %1/%2 ...</source>
+ <translation type="unfinished">पà¥à¤ %1/%2 रà¥à¤ªà¤¾à¤à¤¤à¤°à¤¿à¤¤ हॠरहा हॠ...</translation>
+ </message>
+ <message>
+ <source>Credentials has to not been filled out yet.</source>
+ <translation type="unfinished">à¤
ब तठपरिà¤à¤¯ पतà¥à¤° नहॠà¤à¤°à¥ à¤à¤ हà¥à¤. </translation>
+ </message>
+ <message>
+ <source>Uploading Sankore File on Web.</source>
+ <translation type="unfinished">सà¤à¤à¥à¤° फाà¤à¤² वà¥à¤¬ पर à¤
पलà¥à¤¡ à¤à¤° रहा हॠ</translation>
+ </message>
+ <message>
+ <source>Document uploaded correctly on the web.</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¥ वà¥à¤¬ पर सहॠतरà¥à¤à¥ सॠà¤
पलà¥à¤¡ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾. </translation>
+ </message>
+ <message>
+ <source>Failed to upload document on the web.</source>
+ <translation type="unfinished">वà¥à¤¬ पर दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¥ à¤
पलà¥à¤¡ à¤à¤°à¤¨à¥ मà¥à¤ विफल </translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation type="unfinished">सà¥à¤µà¥à¤à¤¾à¤° </translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation type="unfinished">बदलà¥à¤</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished">निरसà¥à¤¤ </translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation type="unfinished">नाम% 1 पहलॠसॠपà¥à¤°à¤¯à¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ हà¥
+à¤à¤¸ नाम à¤à¥ रà¤à¤¨à¥ सà¥à¤¦à¤¸à¥à¤¤à¤¾à¤µà¥à¤à¤¼ बदल à¤à¤¾à¤¯à¥à¤à¤¾
+नया नाम पà¥à¤°à¤¦à¤¾à¤¨ à¤à¤°à¤¨à¥ सॠà¤à¤ नया दसà¥à¤¤à¤¾à¤µà¥à¤à¤¼ बनà¥à¤à¤¾</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation type="unfinished">मà¥à¤°à¥ दसà¥à¤¤à¤¾à¤µà¥à¤à¤¼</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation type="unfinished">मà¥à¤¡à¤²</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation type="unfinished">à¤à¥à¤°à¥à¤¶ </translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation type="unfinished">à¤
नामाà¤à¤à¤¿à¤¤ दसà¥à¤¤à¤¾à¤µà¥à¤à¤¼</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">पà¥à¤ %1/%2 à¤à¤¾à¤ªà¥ à¤à¤° रहा हॠ</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 पà¥à¤ à¤à¤¾à¤ªà¥ हà¥à¤ </numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeWidget</name>
+ <message>
+ <source>%1 (copy)</source>
+ <translation type="unfinished">%1 (à¤à¤¾à¤ªà¥)</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">पà¥à¤ %1/%2 à¤à¤¾à¤ªà¥ à¤à¤° रहा हॠ</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 पà¥à¤ à¤à¤¾à¤ªà¥ हà¥à¤ </numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation type="unfinished">डाà¤à¤¨à¤²à¥à¤¡ विफल.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation type="unfinished">दà¥à¤°à¤¸à¥à¤¥ सरà¥à¤µà¤° नॠà¤à¤¨à¥à¤à¥à¤¶à¤¨ सॠà¤à¤¨à¤à¤¾à¤° à¤à¤° दिया हॠ(सरà¥à¤µà¤° à¤
नà¥à¤°à¥à¤§à¥à¤ à¤à¥ सà¥à¤µà¥à¤à¤¾à¤° नहà¥à¤ à¤à¤° रहा हà¥)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤¸à¥ सरà¥à¤µà¤° नॠà¤à¤¨à¥à¤à¥à¤¶à¤¨ à¤à¥ समय सॠपहलॠहॠबà¤à¤¦ à¤à¤° दिया हà¥, à¤à¤¸à¤¸à¥ पहलॠà¤à¤¿ पà¥à¤°à¥ à¤à¤¤à¥à¤¤à¤° पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤° à¤à¤° सà¤à¤¸à¤¾à¤§à¤¿à¤¤ à¤à¤¿à¤¯à¥ à¤à¤¾à¤¤à¥</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation type="unfinished">दà¥à¤°à¤¸à¥à¤¥ मà¥à¤à¤¬à¤¾à¤¨ नाम (हà¥à¤¸à¥à¤à¤¨à¤¾à¤® à¤
मानà¥à¤¯) नहà¥à¤ मिला हà¥</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation type="unfinished">दà¥à¤°à¤¸à¥à¤¥ सरà¥à¤µà¤° सॠà¤à¤¨à¥à¤à¥à¤¶à¤¨ समयबाहà¥à¤¯ हॠà¤à¤ हà¥</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation type="unfinished">à¤à¤ªà¤°à¥à¤¶à¤¨ पà¥à¤°à¤¾ हà¥à¤¨à¥ सॠपहलॠसमापन () या बनà¥à¤¦() à¤à¥ माधà¥à¤¯à¤® सॠरदà¥à¤¦ à¤à¤° दिया à¤à¤¯à¤¾ हà¥</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation type="unfinished">SSL / TLS हाथ मिलानॠमà¥à¤ विफल रहा हॠà¤à¤° à¤à¤¨à¥à¤à¥à¤°à¤¿à¤ªà¥à¤à¥à¤¡ à¤à¥à¤¨à¤² सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ नहà¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¾ सà¤à¤¾. (SslErrors) सà¤à¤à¥à¤¤ à¤à¤¤à¥à¤¸à¤°à¥à¤à¤¿à¤¤ à¤à¤¿à¤¯à¥ à¤à¤¾à¤¨à¥ à¤à¤¾à¤¹à¤¿à¤ थà¥.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation type="unfinished">à¤à¤¨à¥à¤à¥à¤¶à¤¨ नà¥à¤à¤µà¤°à¥à¤ सॠवियà¥à¤ à¤à¥ à¤à¤¾à¤°à¤£ à¤à¥à¤ à¤à¤¯à¤¾ हà¥, लà¥à¤à¤¿à¤¨ पà¥à¤°à¤£à¤¾à¤²à¥ à¤à¤ à¤à¤° पहà¥à¤à¤ बिà¤à¤¦à¥ à¤à¥ लिठà¤à¥à¤® शà¥à¤°à¥ à¤à¤° दॠहà¥à¥¤à¤
नà¥à¤°à¥à¤§ पà¥à¤¨: सबमिठà¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¨à¤¾ à¤à¤¾à¤¹à¤¿à¤, à¤à¤²à¥à¤¦ हॠसà¤à¤¬à¤à¤§ फिर सॠसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ हà¥à¤¨à¥ पर à¤à¤¾à¤°à¥à¤°à¤µà¤¾à¤ à¤à¥ à¤à¤¾à¤à¤à¥.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤¸à¥ सरà¥à¤µà¤° नॠà¤à¤¨à¥à¤à¥à¤¶à¤¨ सॠà¤à¤¨à¤à¤¾à¤° à¤à¤° दिया हà¥(पà¥à¤°à¥à¤à¥à¤¸à¥ सरà¥à¤µà¤° à¤
नà¥à¤°à¥à¤§ सà¥à¤µà¥à¤à¤¾à¤° नहà¥à¤ à¤à¤° रहा हà¥)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤¸à¥ सरà¥à¤µà¤° नॠà¤à¤¨à¥à¤à¥à¤¶à¤¨ à¤à¥ समय सॠपहलॠहॠबà¤à¤¦ à¤à¤° दिया हà¥, à¤à¤¸à¤¸à¥ पहलॠà¤à¤¿ पà¥à¤°à¥ à¤à¤¤à¥à¤¤à¤° पà¥à¤°à¤¾à¤ªà¥à¤¤ à¤à¤° à¤à¤° सà¤à¤¸à¤¾à¤§à¤¿à¤¤ à¤à¤¿à¤¯à¥ à¤à¤¾à¤¤à¥
+</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤¸à¥ हà¥à¤¸à¥à¤ नाम (हà¥à¤¸à¥à¤à¤¨à¤¾à¤® à¤
मानà¥à¤¯ पà¥à¤°à¥à¤à¥à¤¸à¥) नहà¥à¤ मिला हà¥</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤¸à¥ à¤à¥ लिठà¤à¤¨à¥à¤à¥à¤¶à¤¨ समयबाहà¥à¤¯ हॠà¤à¤¯ हॠया पà¥à¤°à¥à¤à¥à¤¸à¥ समय मà¥à¤ à¤à¥à¤à¤¾ à¤
नà¥à¤°à¥à¤§ à¤à¤¾ à¤à¤µà¤¾à¤¬ नहà¥à¤ दॠरहा हà¥</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤¸à¥ à¤à¥ à¤
नà¥à¤°à¥à¤§ à¤à¤¾ समà¥à¤®à¤¾à¤¨ à¤à¤°à¤¨à¥ à¤à¥ लिठपà¥à¤°à¤®à¤¾à¤£à¥à¤à¤°à¤£ à¤à¥ à¤à¤µà¤¶à¥à¤¯à¤à¤¤à¤¾ हॠलà¥à¤à¤¿à¤¨ à¤à¤¿à¤¸à¥ à¤à¥ à¤à¥à¤°à¥à¤¡à¥à¤à¤¶à¤¿à¤¯à¤²à¥à¤¸ (यदि à¤à¥à¤ हà¥) à¤à¥ पà¥à¤¶à¤à¤¶ à¤à¥ सà¥à¤µà¥à¤à¤¾à¤° नहà¥à¤ à¤à¤¿à¤¯à¤¾ हॠ</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation type="unfinished">दà¥à¤°à¤¸à¥à¤¥ सामà¤à¥à¤°à¥ à¤à¤¾ à¤à¤ªà¤¯à¥à¤ à¤à¤°à¤¨à¥ सॠà¤à¤¨à¤à¤¾à¤° à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ हॠ(HTTP 401 तà¥à¤°à¥à¤à¤¿ à¤à¥ समान)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation type="unfinished">दà¥à¤°à¤¸à¥à¤¥ सामà¤à¥à¤°à¥ पर à¤
नà¥à¤°à¥à¤§ à¤à¤ªà¤°à¥à¤¶à¤¨ à¤à¥ à¤
नà¥à¤®à¤¤à¤¿ नहà¥à¤ हà¥</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation type="unfinished">दà¥à¤°à¤¸à¥à¤¥ सामà¤à¥à¤°à¥ सरà¥à¤µà¤° पर नहà¥à¤ मिलि (HTTP 404 तà¥à¤°à¥à¤à¤¿ à¤à¥ लिठà¤à¤¸à¥ तरह à¤à¥)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation type="unfinished">दà¥à¤°à¤¸à¥à¤¥ सरà¥à¤µà¤° à¤à¥ पà¥à¤°à¤®à¤¾à¤£à¥à¤à¤°à¤£ à¤à¥ लिठसामà¤à¥à¤°à¥ à¤à¥ à¤à¤µà¤¶à¥à¤¯à¤à¤¤à¤¾ हॠलà¥à¤à¤¿à¤¨ पà¥à¤°à¤¦à¤¾à¤¨ à¤à¤¿à¤¯à¥ à¤à¤¯à¥ à¤à¥à¤°à¥à¤¡à¥à¤à¤¶à¤¿à¤¯à¤²à¥à¤¸ (यदि à¤à¥à¤ हà¥) à¤à¥ सà¥à¤µà¥à¤à¤¾à¤° नहà¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ हà¥</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation type="unfinished">à¤
नà¥à¤°à¥à¤§ फिर सॠà¤à¥à¤à¤¾ à¤à¤¾à¤¨à¤¾ à¤à¤°à¥à¤°à¥ हà¥,लà¥à¤à¤¿à¤¨ यह à¤à¤¦à¤¾à¤¹à¤°à¤£ विफल रहा à¤à¥à¤¯à¥à¤à¤à¤¿ à¤
पलà¥à¤¡ डà¥à¤à¤¾ à¤à¤ दà¥à¤¸à¤°à¥ बार पढ़ा नहà¥à¤ à¤à¤¾ सà¤à¤¾.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation type="unfinished">नà¥à¤à¤µà¤°à¥à¤ पà¥à¤°à¤µà¥à¤¶ à¤à¤ªà¥à¤à¤ à¤
नà¥à¤°à¥à¤§ à¤à¤¾ समà¥à¤®à¤¾à¤¨ नहà¥à¤ à¤à¤° सà¤à¤¤à¤¾ à¤à¥à¤¯à¥à¤à¤à¤¿ पà¥à¤°à¥à¤à¥à¤à¥à¤² à¤à¥à¤à¤¾à¤¤ नहà¥à¤ हॠहॠपा रहा हà¥</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation type="unfinished">à¤
नà¥à¤°à¥à¤§à¤¿à¤¤ à¤à¤ªà¤°à¥à¤¶à¤¨ à¤à¤¸ पà¥à¤°à¥à¤à¥à¤à¥à¤² à¤à¥ लिठà¤
मानà¥à¤¯ हà¥</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation type="unfinished">à¤à¤ à¤
à¤à¥à¤à¤¾à¤¤ नà¥à¤à¤µà¤°à¥à¤ सॠसà¤à¤¬à¤à¤§à¤¿à¤¤ तà¥à¤°à¥à¤à¤¿ à¤à¤¾ पता à¤à¤²à¤¾ हà¥</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation type="unfinished">à¤à¤ à¤
à¤à¥à¤à¤¾à¤¤ पà¥à¤°à¥à¤à¥à¤¸à¥ सॠसà¤à¤¬à¤à¤§à¤¿à¤¤ तà¥à¤°à¥à¤à¤¿ à¤à¤¾ पता à¤à¤²à¤¾ हà¥</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation type="unfinished">à¤à¤ à¤
à¤à¥à¤à¤¾à¤¤ दà¥à¤°à¤¸à¥à¤¥ सामà¤à¥à¤°à¥ सॠसà¤à¤¬à¤à¤§à¤¿à¤¤ तà¥à¤°à¥à¤à¤¿ à¤à¤¾ पता à¤à¤²à¤¾ हà¥</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤à¥à¤² मà¥à¤ à¤à¥à¤à¤¨à¥ à¤à¤¾ पता à¤à¤²à¤¾ हॠ(पारà¥à¤¸à¤¿à¤à¤ तà¥à¤°à¥à¤à¤¿, à¤
वà¥à¤§ या à¤
पà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ पà¥à¤°à¤¤à¤¿à¤à¥à¤°à¤¿à¤¯à¤¾à¤à¤ , à¤à¤¦à¤¿)</translation>
+ </message>
+</context>
+<context>
+ <name>UBDownloadWidget</name>
+ <message>
+ <source>Downloading files</source>
+ <translation type="unfinished">फाà¤à¤²à¥à¤ डाà¤à¤¨à¤²à¥à¤¡ हॠरहॠहॠ</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished">निरसà¥à¤¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBExportAdaptor</name>
+ <message>
+ <source>Warnings during export was appeared</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¥ दà¥à¤°à¤¾à¤¨ à¤à¥à¤¤à¤¾à¤µà¤¨à¥ à¤à¤à¤°à¥ थॠ</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportCFF</name>
+ <message>
+ <source>Export to IWB</source>
+ <translation type="unfinished">IWB पर à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Export as IWB File</source>
+ <translation type="unfinished">IWB फाà¤à¤² à¤à¥ रà¥à¤ª मà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ हॠरहा हॠ...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ सफल. </translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ विफल. </translation>
+ </message>
+</context>
+<context>
+ <name>UBExportDocument</name>
+ <message>
+ <source>Page</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हॠ.. </translation>
+ </message>
+ <message>
+ <source>Export as UBZ File</source>
+ <translation type="unfinished">UBZ फाà¤à¤² à¤à¥ रà¥à¤ª मà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हॠ..</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ सफल. </translation>
+ </message>
+ <message>
+ <source>Exporting %1 %2 of %3</source>
+ <translation type="unfinished">%3 à¤à¤¾ %1 %2 à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हॠ</translation>
+ </message>
+ <message>
+ <source>Export to Sankore Format</source>
+ <translation type="unfinished">सà¤à¤à¥à¤° पà¥à¤°à¤¾à¤°à¥à¤ª मà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation type="unfinished">निरà¥à¤¯à¤¾à¤¤ à¤à¤°à¤¨à¥ मà¥à¤ विफल ...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation type="unfinished">UBX फ़ाà¤à¤² à¤à¥ रà¥à¤ª मà¥à¤ निरà¥à¤¯à¤¾à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">निरà¥à¤¯à¤¾à¤¤ दसà¥à¤¤à¤¾à¤µà¥à¤à¤¼ ...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished">निरà¥à¤¯à¤¾à¤¤ मà¥à¤ सफल रहा </translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished">निरà¥à¤¯à¤¾à¤¤ मà¥à¤ विफल रहा </translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation type="unfinished">Sankore UBX फ़ाà¤à¤² à¤à¥ रà¥à¤ª मà¥à¤ निरà¥à¤¯à¤¾à¤¤ à¤à¤°à¥à¤</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportFullPDF</name>
+ <message>
+ <source>Export as PDF File</source>
+ <translation type="unfinished">PDF फाà¤à¤² à¤à¥ रà¥à¤ª मà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हà¥...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ सफल </translation>
+ </message>
+ <message>
+ <source>Export to PDF</source>
+ <translation type="unfinished">PDF पर à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हॠ</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportPDF</name>
+ <message>
+ <source>Export as PDF File</source>
+ <translation type="unfinished">PDF फाà¤à¤² à¤à¥ रà¥à¤ª मà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हà¥...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ सफल </translation>
+ </message>
+ <message>
+ <source>Exporting page %1 of %2</source>
+ <translation type="unfinished">%2 à¤à¤¾ %1 पà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हॠ</translation>
+ </message>
+ <message>
+ <source>Export to PDF</source>
+ <translation type="unfinished">PDF पर à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ हॠरहा हà¥</translation>
+ </message>
+</context>
+<context>
+ <name>UBExportWeb</name>
+ <message>
+ <source>Page</source>
+ <translation type="unfinished">पà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Export as Web data</source>
+ <translation type="unfinished">वà¥à¤¬ डाà¤à¤¾ à¤à¥ रà¥à¤ª मà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ हॠरहा हà¥...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ सफल. .</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished">à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ विफल. </translation>
+ </message>
+ <message>
+ <source>Export to Web Browser</source>
+ <translation type="unfinished">वà¥à¤¬ बà¥à¤°à¤¾à¤à¤à¤° पर à¤à¤à¥à¤¸à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हॠ</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeatureProperties</name>
+ <message>
+ <source>Add to page</source>
+ <translation type="unfinished">पà¥à¤ पर à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Set as background</source>
+ <translation type="unfinished">पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿ à¤à¥ रà¥à¤ª मà¥à¤ सà¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add to library</source>
+ <translation type="unfinished">पà¥à¤¸à¥à¤¤à¤à¤¾à¤²à¤¯ पर à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Object informations</source>
+ <translation type="unfinished">वसà¥à¤¤à¥ à¤à¥ à¤à¤¾à¤¨à¤à¤¾à¤°à¥ </translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">à¤à¥à¤¡à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesActionBar</name>
+ <message>
+ <source>Add to favorites</source>
+ <translation type="unfinished">पसनà¥à¤¦à¥à¤¦à¤¾ पर à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Share</source>
+ <translation type="unfinished">साà¤à¤¾ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation type="unfinished">तलाश </translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation type="unfinished">मिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Back to folder</source>
+ <translation type="unfinished">फà¥à¤²à¥à¤¡à¤° पर लà¥à¤à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Remove from favorites</source>
+ <translation type="unfinished">पसनà¥à¤¦à¥à¤¦à¤¾ सॠहà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Create new folder</source>
+ <translation type="unfinished">नया फà¥à¤²à¥à¤¡à¤° बनाà¤à¤ </translation>
+ </message>
+ <message>
+ <source>Rescan file system</source>
+ <translation type="unfinished">फाà¤à¤² सिसà¥à¤à¤® फिर सà¥à¤à¥à¤¨ à¤à¤°à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesController</name>
+ <message>
+ <source>ImportedImage</source>
+ <translation type="unfinished">à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤¿à¤ à¤à¤ à¤à¤¿à¤¤à¥à¤° </translation>
+ </message>
+ <message>
+ <source>Audios</source>
+ <translation type="unfinished">à¤à¤¡à¤¿à¤¯à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Movies</source>
+ <translation type="unfinished">मà¥à¤µà¥à¤¹à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Pictures</source>
+ <translation type="unfinished">à¤à¤¿à¤¤à¥à¤° </translation>
+ </message>
+ <message>
+ <source>Animations</source>
+ <translation type="unfinished">à¤à¤¨à¤¿à¤®à¥à¤¶à¤¨à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>Interactivities</source>
+ <translation type="unfinished">परसà¥à¤ªà¤° सà¤à¤µà¤¾à¤¦ </translation>
+ </message>
+ <message>
+ <source>Applications</source>
+ <translation type="unfinished">à¤à¤ªà¤¯à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Shapes</source>
+ <translation type="unfinished">रà¥à¤ª </translation>
+ </message>
+ <message>
+ <source>Favorites</source>
+ <translation type="unfinished">पसनà¥à¤¦à¥à¤¦à¤¾ </translation>
+ </message>
+ <message>
+ <source>Web search</source>
+ <translation type="unfinished">वà¥à¤¬ तलाश </translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation type="unfinished">à¤à¥à¤°à¥à¤¶ </translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation type="unfinished">बà¥à¤à¤®à¤¾à¤°à¥à¤à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation type="unfinished">वà¥à¤¬</translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesNewFolderDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation type="unfinished">सà¥à¤µà¥à¤à¤¾à¤° </translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished">निरसà¥à¤¤ </translation>
+ </message>
+ <message>
+ <source>Enter a new folder name</source>
+ <translation type="unfinished">à¤à¤ नया फà¥à¤²à¥à¤¡à¤° नाम पà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBFeaturesProgressInfo</name>
+ <message>
+ <source>Loading </source>
+ <translation type="unfinished">लà¥à¤¡ हॠरहा हॠ</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsGroupContainerItemDelegate</name>
+ <message>
+ <source>Locked</source>
+ <translation type="unfinished">बनà¥à¤¦ </translation>
+ </message>
+ <message>
+ <source>Visible on Extended Screen</source>
+ <translation type="unfinished">विसà¥à¤¤à¤¾à¤°à¤¿à¤¤ सà¥à¤à¥à¤°à¥à¤¨ पर दिà¤à¤¾à¤ दà¥à¤¨à¥ यà¥à¤à¥à¤¯ </translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished">à¤à¤ à¤à¤¾à¤°à¥à¤¯à¤µà¤¾à¤¹à¥ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished">à¤à¤¡à¤¿à¤¯à¥ à¤à¥ लिठलिà¤à¤ निà¤à¤¾à¤²à¥à¤</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished">पà¥à¤ à¤à¥ लिठलिà¤à¤ निà¤à¤¾à¤²à¥à¤</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished">वà¥à¤¬ url à¤à¥ लिठलिà¤à¤ निà¤à¤¾à¤²à¥à¤</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsItemDelegate</name>
+ <message>
+ <source>Locked</source>
+ <translation type="unfinished">बनà¥à¤¦ </translation>
+ </message>
+ <message>
+ <source>Visible on Extended Screen</source>
+ <translation type="unfinished">विसà¥à¤¤à¤¾à¤°à¤¿à¤¤ सà¥à¤à¥à¤°à¥à¤¨ पर दिà¤à¤¾à¤ दà¥à¤¨à¥ यà¥à¤à¥à¤¯ </translation>
+ </message>
+ <message>
+ <source>Go to Content Source</source>
+ <translation type="unfinished">विषय सामà¤à¥à¤°à¥ सà¥à¤¤à¥à¤°à¥à¤¤ पर à¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished">à¤à¤ à¤à¤¾à¤°à¥à¤¯à¤µà¤¾à¤¹à¥ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished">à¤à¤¡à¤¿à¤¯à¥ à¤à¥ लिठलिà¤à¤ निà¤à¤¾à¤²à¥à¤</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished">पà¥à¤ à¤à¥ लिठलिà¤à¤ निà¤à¤¾à¤²à¥à¤</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished">वà¥à¤¬ url à¤à¥ लिठलिà¤à¤ निà¤à¤¾à¤²à¥à¤</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsTextItem</name>
+ <message>
+ <source><Type Text Here></source>
+ <translation type="unfinished"><यहाठपाठà¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ></translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsTextItemDelegate</name>
+ <message>
+ <source>Text Color</source>
+ <translation type="unfinished">पाठरà¤à¤ </translation>
+ </message>
+ <message>
+ <source>Editable</source>
+ <translation type="unfinished">सà¥à¤§à¤¾à¤° à¤à¥ यà¥à¤à¥à¤¯ </translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsWidgetItem</name>
+ <message>
+ <source>Loading ...</source>
+ <translation type="unfinished">लà¥à¤¡ हॠरहा हॠ... </translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsWidgetItemDelegate</name>
+ <message>
+ <source>Frozen</source>
+ <translation type="unfinished">à¤à¤®à¤¾ हà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Transform as Tool </source>
+ <translation type="unfinished">à¤à¥à¤² à¤à¥ रà¥à¤ª मà¥à¤ रà¥à¤ªà¤¾à¤à¤¤à¤°à¤¿à¤¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBImportCFF</name>
+ <message>
+ <source>Common File Format (</source>
+ <translation type="unfinished">सामानà¥à¤¯ फाà¤à¤² पà¥à¤°à¤¾à¤°à¥à¤ª </translation>
+ </message>
+ <message>
+ <source>Importing file %1...</source>
+ <translation type="unfinished">फाà¤à¤² %1 à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हॠ...</translation>
+ </message>
+ <message>
+ <source>Import of file %1 failed.</source>
+ <translation type="unfinished">फाà¤à¤² %1 à¤à¤¾ à¤à¤à¤ªà¥à¤°à¥à¤ विफल. </translation>
+ </message>
+ <message>
+ <source>Import successful.</source>
+ <translation type="unfinished">à¤à¤à¤ªà¥à¤°à¥à¤ सफल. </translation>
+ </message>
+ <message>
+ <source>Import failed.</source>
+ <translation type="unfinished">à¤à¤à¤ªà¥à¤°à¥à¤ विफल. </translation>
+ </message>
+</context>
+<context>
+ <name>UBImportDocument</name>
+ <message>
+ <source>Importing file %1...</source>
+ <translation type="unfinished">फाà¤à¤² %1 à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हà¥...</translation>
+ </message>
+ <message>
+ <source>Import successful.</source>
+ <translation type="unfinished">à¤à¤à¤ªà¥à¤°à¥à¤ सफल. </translation>
+ </message>
+ <message>
+ <source>Import of file %1 failed.</source>
+ <translation type="unfinished">फाà¤à¤² %1 à¤à¤¾ à¤à¤à¤ªà¥à¤°à¥à¤ विफल. </translation>
+ </message>
+ <message>
+ <source>Open-Sankore (*.ubz)</source>
+ <translation type="unfinished">सà¤à¤à¥à¤°-à¤à¥à¤²à¥à¤ (*.ubz)</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation type="unfinished">à¤à¤ªà¤¨ - Sankore (दसà¥à¤¤à¤¾à¤µà¥à¤à¥à¤ à¤à¤¾ सà¥à¤) (ubx *.)</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportImage</name>
+ <message>
+ <source>Image Format (</source>
+ <translation type="unfinished">à¤à¤¿à¤¤à¥à¤° पà¥à¤°à¤¾à¤°à¥à¤ª (</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportPDF</name>
+ <message>
+ <source>Portable Document Format (*.pdf)</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤¬à¤² डाà¤à¥à¤¯à¥à¤®à¥à¤à¤ फारà¥à¤®à¥à¤ (*.pdf)</translation>
+ </message>
+ <message>
+ <source>PDF import failed.</source>
+ <translation type="unfinished">PDF à¤à¤à¤ªà¥à¤°à¥à¤ विफल. </translation>
+ </message>
+ <message>
+ <source>Importing page %1 of %2</source>
+ <translation type="unfinished">%2 à¤à¤¾ पà¥à¤ %1 à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤° रहा हà¥.</translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublisher</name>
+ <message>
+ <source>Error while publishing video to intranet (%1)</source>
+ <translation type="unfinished">à¤à¤à¤à¤°à¤¨à¥à¤ पर विडà¥à¤¯à¥ पबà¥à¤²à¤¿à¤¶à¤¿à¤à¤ à¤à¤°à¤¨à¥ à¤à¥ दà¥à¤°à¤¾à¤¨ तà¥à¤°à¥à¤à¤¿ (%1)</translation>
+ </message>
+ <message>
+ <source>Publishing to Intranet in progress %1 %</source>
+ <translation type="unfinished">à¤à¤à¤à¥à¤°à¤¾à¤¨à¥à¤ पर पबà¥à¤²à¤¿à¤¶à¤¿à¤à¤ पà¥à¤°à¤à¤¤à¤¿ पर हॠ%1 %</translation>
+ </message>
+</context>
+<context>
+ <name>UBIntranetPodcastPublishingDialog</name>
+ <message>
+ <source>Publish</source>
+ <translation type="unfinished">पबà¥à¤²à¤¿à¤¶ </translation>
+ </message>
+</context>
+<context>
+ <name>UBKeyboardPalette</name>
+ <message>
+ <source>Enter</source>
+ <translation type="unfinished">पà¥à¤°à¤µà¤¿à¤·à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBMainWindow</name>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished">हाठ</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished">नहà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation type="unfinished">ठà¥à¤ हॠ</translation>
+ </message>
+</context>
+<context>
+ <name>UBMessagesDialog</name>
+ <message>
+ <source>Close</source>
+ <translation type="unfinished">बनà¥à¤¦ </translation>
+ </message>
+</context>
+<context>
+ <name>UBNetworkAccessManager</name>
+ <message>
+ <source><qt>Enter username and password for "%1" at %2</qt></source>
+ <translation type="unfinished"><qt> %2</qt> पर %1 à¤à¥ लिठपà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾ à¤à¤¾ नाम à¤à¤° पासवरà¥à¤¡ पà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Failed to log to Proxy</source>
+ <translation type="unfinished">पà¥à¤°à¤¾à¤à¥à¤¸à¥ पर लाठà¤à¤°à¤¨à¥ मà¥à¤ विफल </translation>
+ </message>
+ <message>
+ <source>SSL Errors:
+
+%1
+
+%2
+
+Do you want to ignore these errors for this host?</source>
+ <translation type="unfinished">SSL तà¥à¤°à¥à¤à¤¿à¤¯à¤¾à¤ : %1 %2 à¤à¥à¤¯à¤¾ à¤à¤ª à¤à¤¸ मà¥à¤à¤¬à¤¾à¤¨ à¤à¥ लिठà¤à¤¨ तà¥à¤°à¥à¤à¤¿à¤¯à¥à¤ à¤à¥ नà¤à¤° à¤
नà¥à¤¦à¤¾à¤ à¤à¤°à¤¨à¤¾ à¤à¤¾à¤¹à¤¤à¥ हà¥à¤ ? </translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation type="unfinished">हाठ</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation type="unfinished">नहà¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBPersistenceManager</name>
+ <message>
+ <source>(copy)</source>
+ <translation type="unfinished">(à¤à¤¾à¤ªà¥) </translation>
+ </message>
+ <message>
+ <source>Document Repository Loss</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ रिपाà¤à¤¿à¤à¤°à¥ हानि </translation>
+ </message>
+ <message>
+ <source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ रिपाà¤à¤¿à¤à¤°à¥ '%1 पर सà¤à¤à¥à¤° नॠà¤
पनॠपहà¥à¤à¤ à¤à¤à¤µà¤¾ दॠहà¥. दà¥à¤°à¥à¤à¤¾à¤à¥à¤¯ सॠडाà¤à¤¾ à¤à¤°à¤ªà¥à¤¶à¤¨ सॠबà¤à¤¨à¥ à¤à¥ लिठपà¥à¤°à¤¯à¥à¤ à¤à¥ बनà¥à¤¦ à¤à¤°à¤¨à¤¾ à¤à¤°à¥à¤°à¥ हà¥. नवà¥à¤¨à¤¤à¤® बदलाव à¤à¥ हानि à¤à¥ हॠसà¤à¤¤à¥ हà¥. </translation>
+ </message>
+</context>
+<context>
+ <name>UBPlatformUtils</name>
+ <message>
+ <source>English</source>
+ <translation type="unfinished">à¤à¤à¤à¥à¤²à¤¿à¤¶ </translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished">रà¥à¤¸à¥ </translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished">à¤à¤°à¥à¤®à¤¨ </translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished">फà¥à¤°à¥à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation type="unfinished">सà¥à¤µà¤¿à¤¸ फà¥à¤°à¥à¤à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBPodcastController</name>
+ <message>
+ <source>Failed to start encoder ...</source>
+ <translation type="unfinished">à¤à¤¨à¤à¥à¤¡à¤° शà¥à¤°à¥ à¤à¤°à¤¨à¥ मà¥à¤ विफल... </translation>
+ </message>
+ <message>
+ <source>No Podcast encoder available ...</source>
+ <translation type="unfinished">à¤à¥à¤ पà¥à¤¡à¤à¤¾à¤¸à¥à¤ à¤à¤¨à¤à¥à¤¡à¤° à¤à¤ªà¤²à¤¬à¥à¤§ नहà¥à¤... </translation>
+ </message>
+ <message>
+ <source>Part %1</source>
+ <translation type="unfinished">पारà¥à¤ %1</translation>
+ </message>
+ <message>
+ <source>on your desktop ...</source>
+ <translation type="unfinished">à¤à¤ªà¤à¥ डà¥à¤¸à¥à¤à¤à¤¾à¤ª पर ...</translation>
+ </message>
+ <message>
+ <source>in folder %1</source>
+ <translation type="unfinished">फà¥à¤²à¥à¤¡à¤° %1 मà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Podcast created %1</source>
+ <translation type="unfinished">पà¥à¤¡à¤à¤¾à¤¸à¥à¤ तà¥à¤¯à¤¾à¤° %1</translation>
+ </message>
+ <message>
+ <source>Podcast recording error (%1)</source>
+ <translation type="unfinished">पà¥à¤¡à¤à¤¾à¤¸à¥à¤ रिà¤à¤¾à¤°à¥à¤¡à¤¿à¤à¤ तà¥à¤°à¥à¤à¤¿ (%1)</translation>
+ </message>
+ <message>
+ <source>Default Audio Input</source>
+ <translation type="unfinished">डिफालà¥à¤ à¤à¤¡à¤¿à¤¯à¥ à¤à¤¨à¤ªà¥à¤ </translation>
+ </message>
+ <message>
+ <source>No Audio Recording</source>
+ <translation type="unfinished">à¤à¥à¤ à¤à¤¡à¤¿à¤¯à¥ रिà¤à¤¾à¤°à¥à¤¡à¤¿à¤à¤ नहà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Small</source>
+ <translation type="unfinished">à¤à¥à¤à¤¾ </translation>
+ </message>
+ <message>
+ <source>Medium</source>
+ <translation type="unfinished">माधà¥à¤¯à¤® </translation>
+ </message>
+ <message>
+ <source>Full</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤£ </translation>
+ </message>
+ <message>
+ <source>Publish to Intranet</source>
+ <translation type="unfinished">à¤à¤à¤à¥à¤°à¤¾à¤¨à¥à¤ पर पबà¥à¤²à¤¿à¤¶ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Publish to Youtube</source>
+ <translation type="unfinished">यà¥à¤à¥à¤¯à¥à¤¬ पर पबà¥à¤²à¤¿à¤¶ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Sankore Cast</source>
+ <translation type="unfinished">सà¤à¤à¥à¤° à¤à¤¾à¤¸à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBPreferencesController</name>
+ <message>
+ <source>version: </source>
+ <translation type="unfinished">सà¤à¤¸à¥à¤à¤°à¤£ : </translation>
+ </message>
+ <message>
+ <source>Marker is pressure sensitive</source>
+ <translation type="unfinished">मारà¥à¤à¤° दबाव à¤à¥ पà¥à¤°à¤¤à¤¿ सà¤à¤µà¥à¤¦à¤¨à¤¶à¥à¤² हॠ</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation type="unfinished">डिफ़à¥à¤²à¥à¤</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation type="unfinished">à¤
रबॠà¤à¤¾à¤·à¤¾</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished">बलà¥à¤à¥à¤°à¤¿à¤¯à¤¾à¤</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation type="unfinished">à¤à¥à¤à¤²à¤¨</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished">à¤à¥à¤</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation type="unfinished">डà¥à¤¨à¤¿à¤¶</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished">à¤à¤°à¥à¤®à¤¨ </translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished">à¤à¥à¤°à¥à¤</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation type="unfinished">à¤à¤à¤à¥à¤²à¤¿à¤¶ </translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation type="unfinished">à¤à¤à¤à¥à¤²à¤¿à¤¶ UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished">सà¥à¤ªà¥à¤¨à¤¿à¤¶</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished">फà¥à¤°à¥à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation type="unfinished">सà¥à¤µà¤¿à¤¸ फà¥à¤°à¥à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished">à¤à¤¤à¤¾à¤²à¤µà¥</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation type="unfinished">यहà¥à¤¦à¥</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished">à¤à¤¾à¤ªà¤¾à¤¨à¥</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished">à¤à¥à¤°à¤¿à¤¯à¤¾à¤</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation type="unfinished">मà¥à¤²à¥à¤à¤¸à¥</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation type="unfinished">नारà¥à¤µà¥à¤à¤¿à¤¯à¤¨</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation type="unfinished">डà¤</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished">पà¥à¤²à¤¿à¤¶</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation type="unfinished">रà¥à¤®à¤¾à¤à¤¶</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation type="unfinished">रà¥à¤®à¤¾à¤¨à¤¿à¤¯à¤¾à¤</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished">रà¥à¤¸à¥ </translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished">सà¥à¤²à¥à¤µà¤¾à¤</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished">सà¥à¤µà¥à¤¡à¤¿à¤¶</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation type="unfinished">तà¥à¤°à¥à¤à¥</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished">à¤à¥à¤¨à¥</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation type="unfinished">à¤à¥à¤¨à¥ सरलà¥à¤à¥à¤¤</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation type="unfinished">पारà¤à¤ªà¤°à¤¿à¤ à¤à¥à¤¨à¥</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBProxyLoginDlg</name>
+ <message>
+ <source>Proxy Login</source>
+ <translation type="unfinished">पà¥à¤°à¤¾à¤à¥à¤¸à¥ लाठà¤à¤¨ </translation>
+ </message>
+ <message>
+ <source>Username:</source>
+ <translation type="unfinished">पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾ à¤à¤¾ नाम : </translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translation type="unfinished">पासवरà¥à¤¡ : </translation>
+ </message>
+</context>
+<context>
+ <name>UBPublicationDlg</name>
+ <message>
+ <source>Publish document on the web</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¥ वà¥à¤¬ पर पबà¥à¤²à¤¿à¤¶ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Title:</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤ : </translation>
+ </message>
+ <message>
+ <source>Description:</source>
+ <translation type="unfinished">विवरण : </translation>
+ </message>
+ <message>
+ <source>Publish</source>
+ <translation type="unfinished">पबà¥à¤²à¤¿à¤¶ </translation>
+ </message>
+</context>
+<context>
+ <name>UBSettings</name>
+ <message>
+ <source>My Movies</source>
+ <translation type="unfinished">मà¥à¤°à¥ à¤à¤²à¤à¤¿à¤¤à¥à¤° </translation>
+ </message>
+ <message>
+ <source>/Web</source>
+ <translation type="unfinished">/वà¥à¤µ</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation type="unfinished">à¤
à¤à¤²à¥ बार दरà¥à¤¶à¤¨à¥à¤¯</translation>
+ </message>
+</context>
+<context>
+ <name>UBTGActionWidget</name>
+ <message>
+ <source>Teacher</source>
+ <translation type="unfinished">शिà¤à¥à¤·à¤ </translation>
+ </message>
+ <message>
+ <source>Student</source>
+ <translation type="unfinished">विदà¥à¤¯à¤¾à¤°à¥à¤¥à¥ </translation>
+ </message>
+ <message>
+ <source>Type task here ...</source>
+ <translation type="unfinished">à¤à¤¾à¤°à¥à¤¯ यहाठà¤à¤¾à¤à¤ª à¤à¤°à¥à¤... </translation>
+ </message>
+</context>
+<context>
+ <name>UBTGMediaWidget</name>
+ <message>
+ <source>drop media here ...</source>
+ <translation type="unfinished">मà¥à¤¡à¤¿à¤¯à¤¾ यहाठडà¥à¤°à¤¾à¤ª à¤à¤°à¥à¤ ... </translation>
+ </message>
+ <message>
+ <source>Type title here...</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤ यहाठà¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ... </translation>
+ </message>
+</context>
+<context>
+ <name>UBTGUrlWidget</name>
+ <message>
+ <source>Insert link title here...</source>
+ <translation type="unfinished">लिà¤à¤ à¤à¤¾ शà¥à¤°à¥à¤·à¤ यहाठपà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤à¤°à¥à¤ ... </translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherBarWidget</name>
+ <message>
+ <source></source>
+ <translatorcomment><सनà¥à¤¦à¤°à¥à¤ à¤à¤¿à¤ªà¥à¤ªà¤£à¥ ></translatorcomment>
+ <translation></translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherGuideEditionWidget</name>
+ <message>
+ <source>Type title here ...</source>
+ <translation type="unfinished">यहाठशà¥à¤°à¥à¤·à¤ à¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ... </translation>
+ </message>
+ <message>
+ <source>Type comment here ...</source>
+ <translation type="unfinished">यहाठà¤à¤¿à¤ªà¥à¤ªà¤£à¥ à¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ... </translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished">à¤à¤ à¤à¤¾à¤°à¥à¤¯à¤µà¤¾à¤¹à¥ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add a media</source>
+ <translation type="unfinished">à¤à¤ मà¥à¤¡à¤¿à¤¯à¤¾ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Add a link</source>
+ <translation type="unfinished">à¤à¤ लिà¤à¤ à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Page: %0</source>
+ <translation type="unfinished">पà¥à¤à¥: %0</translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherGuidePageZeroWidget</name>
+ <message>
+ <source>Type session title here ...</source>
+ <translation type="unfinished">सतà¥à¤° à¤à¤¾ शà¥à¤°à¥à¤·à¤ यहाठà¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ... </translation>
+ </message>
+ <message>
+ <source>Author(s)</source>
+ <translation type="unfinished">लà¥à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Type authors here ...</source>
+ <translation type="unfinished">लà¥à¤à¤à¥à¤ à¤à¥ नाम यहाठà¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ... </translation>
+ </message>
+ <message>
+ <source>Objective(s)</source>
+ <translation type="unfinished">à¤à¤¦à¥à¤¦à¥à¤¶à¥à¤¯ </translation>
+ </message>
+ <message>
+ <source>Type objectives here...</source>
+ <translation type="unfinished">à¤à¤¦à¥à¤¦à¥à¤¶à¥à¤¯à¥à¤ à¤à¥ यहाठà¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ... </translation>
+ </message>
+ <message>
+ <source>Resource indexing</source>
+ <translation type="unfinished">सà¤à¤¸à¤¾à¤§à¤¨ à¤
नà¥à¤¸à¥à¤à¥ </translation>
+ </message>
+ <message>
+ <source>Keywords:</source>
+ <translation type="unfinished">à¤à¥à¤µà¤°à¥à¤¡à¥à¤¸ : </translation>
+ </message>
+ <message>
+ <source>Type keywords here ...</source>
+ <translation type="unfinished">à¤à¥à¤µà¤°à¥à¤¡à¥à¤¸ यहाठà¤à¤¾à¤à¤ª à¤à¤°à¥à¤ ... </translation>
+ </message>
+ <message>
+ <source>Level:</source>
+ <translation type="unfinished">सà¥à¤¤à¤°:</translation>
+ </message>
+ <message>
+ <source>Subjects:</source>
+ <translation type="unfinished">विषय : </translation>
+ </message>
+ <message>
+ <source>Type:</source>
+ <translation type="unfinished">à¤à¤¾à¤à¤ª : </translation>
+ </message>
+ <message>
+ <source>Licence</source>
+ <translation type="unfinished">लाà¤à¤¸à¥à¤à¤¸</translation>
+ </message>
+ <message>
+ <source>Attribution CC BY</source>
+ <translation type="unfinished">à¤à¤à¥à¤°à¥à¤¬à¥à¤¯à¥à¤¶à¤¨ सà¥à¤¸à¥ बाय </translation>
+ </message>
+ <message>
+ <source>Attribution-NoDerivs CC BY-ND</source>
+ <translation type="unfinished">à¤à¤à¥à¤°à¥à¤¬à¥à¤¯à¥à¤¶à¤¨-नॠडà¥à¤°à¤¾à¤à¤µà¥à¤ सà¥à¤¸à¥ बाय-à¤à¤¨à¤¡à¥ </translation>
+ </message>
+ <message>
+ <source>Attribution-ShareAlike CC BY-SA</source>
+ <translation type="unfinished">à¤à¤à¥à¤°à¥à¤¬à¥à¤¯à¥à¤¶à¤¨ -शà¥à¤¯à¤° à¤
लाà¤à¤ सà¥à¤¸à¥ बाय-à¤à¤¸à¤ </translation>
+ </message>
+ <message>
+ <source>Attribution-NonCommercial CC BY-NC</source>
+ <translation type="unfinished">à¤à¤à¥à¤°à¥à¤¬à¥à¤¯à¥à¤¶à¤¨-नान à¤à¤®à¤°à¥à¤¶à¤¿à¤¯à¤² सà¥à¤¸à¥ बà¥à¤¯-à¤à¤¨à¤¸à¥ </translation>
+ </message>
+ <message>
+ <source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
+ <translation type="unfinished">à¤à¤à¥à¤°à¥à¤¬à¥à¤¯à¥à¤¶à¤¨-नान à¤à¤®à¤°à¥à¤¶à¤¿à¤¯à¤²-नॠडिराà¤à¤µà¥à¤ सà¥à¤¸à¥ बाय-... </translation>
+ </message>
+ <message>
+ <source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
+ <translation type="unfinished">à¤à¤à¥à¤°à¥à¤¬à¥à¤¯à¥à¤¶à¤¨-नान à¤à¤®à¤°à¥à¤¶à¤¿à¤¯à¤²-शà¥à¤¯à¤° à¤
लाà¤à¤ सà¥à¤¸à¥ बाय ..à¤à¤¨à¤¸à¥-à¤à¤¸à¤ </translation>
+ </message>
+ <message>
+ <source>Public domain</source>
+ <translation type="unfinished">पबà¥à¤²à¤¿à¤ डà¥à¤®à¥à¤¨ </translation>
+ </message>
+ <message>
+ <source>Copyright</source>
+ <translation type="unfinished">सरà¥à¤µà¤¾à¤§à¤¿à¤à¤¾à¤° </translation>
+ </message>
+ <message>
+ <source>Created the:
+</source>
+ <translation type="unfinished">बनाया à¤à¤¯à¤¾ : </translation>
+ </message>
+ <message>
+ <source>Updated the:
+</source>
+ <translation type="unfinished">à¤
पडà¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ : </translation>
+ </message>
+ <message>
+ <source>Title page</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤ पà¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBTeacherGuidePresentationWidget</name>
+ <message>
+ <source>Page: %0</source>
+ <translation type="unfinished">पà¥à¤ : %0</translation>
+ </message>
+</context>
+<context>
+ <name>UBThumbnailAdaptor</name>
+ <message>
+ <source>Generating preview thumbnails ...</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤µ à¤
वलà¥à¤à¤¨ थà¤à¤¬à¤¨à¥à¤²à¥à¤¸ तà¥à¤¯à¤¾à¤° हॠरहा हॠ... </translation>
+ </message>
+ <message>
+ <source>%1 thumbnails generated ...</source>
+ <translation type="unfinished">%1 थà¤à¤¬à¤¨à¥à¤²à¥à¤¸ तà¥à¤¯à¤¾à¤° ... </translation>
+ </message>
+</context>
+<context>
+ <name>UBToolsManager</name>
+ <message>
+ <source>Mask</source>
+ <translation type="unfinished">मà¥à¤à¥à¤à¤¾</translation>
+ </message>
+ <message>
+ <source>Ruler</source>
+ <translation type="unfinished">पà¥à¤®à¤¾à¤¨à¤¾</translation>
+ </message>
+ <message>
+ <source>Compass</source>
+ <translation type="unfinished">पà¥à¤°à¤à¤¾à¤° </translation>
+ </message>
+ <message>
+ <source>Protractor</source>
+ <translation type="unfinished">à¤à¤¾à¤¨à¥à¤¦à¤¾</translation>
+ </message>
+ <message>
+ <source>Triangle</source>
+ <translation type="unfinished">तà¥à¤°à¤¿à¤à¥à¤£ </translation>
+ </message>
+ <message>
+ <source>Magnifier</source>
+ <translation type="unfinished">सà¥à¤à¥à¤·à¥à¤®à¤¦à¤°à¥à¤¶à¥ </translation>
+ </message>
+ <message>
+ <source>Cache</source>
+ <translation type="unfinished">à¤à¥à¤¶</translation>
+ </message>
+</context>
+<context>
+ <name>UBTrapWebPageContentController</name>
+ <message>
+ <source>Whole page</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤£ पà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Embed </source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBUpdateDlg</name>
+ <message>
+ <source>Document updater</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤
पडà¥à¤à¤° </translation>
+ </message>
+ <message>
+ <source> files require an update.</source>
+ <translation type="unfinished">फाà¤à¤²à¥à¤ à¤à¥ à¤à¤ à¤
पडà¥à¤ à¤à¥ à¤à¤°à¥à¤°à¤¤ हà¥. </translation>
+ </message>
+ <message>
+ <source>Backup path: </source>
+ <translation type="unfinished">बà¥à¤ à¤
प मारà¥à¤ : </translation>
+ </message>
+ <message>
+ <source>Browse</source>
+ <translation type="unfinished">बà¥à¤°à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation type="unfinished">à¤
पडà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Select a backup folder</source>
+ <translation type="unfinished">à¤à¤ बà¥à¤ à¤
प फà¥à¤²à¥à¤¡à¤° à¤à¥à¤¨à¥ </translation>
+ </message>
+ <message>
+ <source>Files update successful!
+Please reboot the application to access the updated documents.</source>
+ <translation type="unfinished">फाà¤à¤²à¥à¤¸ à¤
पडà¥à¤ सफल ! à¤à¥à¤ªà¤¯à¤¾ à¤
पडà¥à¤ à¤à¤¿à¤ दसà¥à¤¤à¤¾à¤µà¥à¤à¥à¤ à¤à¥ दà¥à¤à¤¨à¥ à¤à¥ लिठपà¥à¤°à¤¯à¥à¤à¥à¤ à¤à¥ रिबà¥à¤ à¤à¤°à¥à¤. </translation>
+ </message>
+ <message>
+ <source>An error occured during the update. The files have not been affected.</source>
+ <translation type="unfinished">à¤
पडà¥à¤ à¤à¥ दà¥à¤°à¤¾à¤¨ à¤à¤ तà¥à¤°à¥à¤à¤¿ à¤à¤ हà¥. फाà¤à¤²à¥à¤¸ पà¥à¤°à¤à¤¾à¤µà¤¿à¤¤ नहॠहà¥à¤ हà¥. </translation>
+ </message>
+ <message>
+ <source>Files update results</source>
+ <translation type="unfinished">फाà¤à¤²à¥à¤¸ à¤
पडà¥à¤ परिणाम </translation>
+ </message>
+ <message>
+ <source>Updating file </source>
+ <translation type="unfinished">फाà¤à¤² à¤
पडà¥à¤ हॠरहॠहॠ</translation>
+ </message>
+ <message>
+ <source>Please wait the import process will start soon...</source>
+ <translation type="unfinished">à¤à¥à¤ªà¤¯à¤¾ à¤à¤à¤¤à¤à¤¾à¤° à¤à¤°à¥à¤ à¤à¤à¤ªà¥à¤°à¥à¤ पà¥à¤°à¤à¥à¤°à¤¿à¤¯à¤¾ à¤à¤²à¥à¤¦à¥ हॠशà¥à¤°à¥ हà¥à¤à¥... </translation>
+ </message>
+ <message>
+ <source>Remind me later</source>
+ <translation type="unfinished">मà¥à¤à¥ बाद मà¥à¤ याद दिलाà¤à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBWebPluginWidget</name>
+ <message>
+ <source>Loading...</source>
+ <translation type="unfinished">लà¥à¤¡ हॠरहा हà¤... </translation>
+ </message>
+</context>
+<context>
+ <name>UBWebPublisher</name>
+ <message>
+ <source>Publish Document on Sankore Web</source>
+ <translation type="unfinished">दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¥ सà¤à¤à¥à¤° वà¥à¤¬ पर पबà¥à¤²à¤¿à¤¶ à¤à¤°à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBWidgetUniboardAPI</name>
+ <message>
+ <source>%0 called (method=%1, status=%2)</source>
+ <translation type="unfinished">%0 à¤à¤¾à¤²à¥à¤¡ (विधि=%1, सà¥à¤¥à¤¿à¤¤à¤¿=%2)</translation>
+ </message>
+</context>
+<context>
+ <name>UBYouTubePublisher</name>
+ <message>
+ <source>YouTube authentication failed.</source>
+ <translation type="unfinished">यà¥à¤à¤¯à¥à¤¬ पà¥à¤°à¤®à¤¾à¤£à¥à¤à¤°à¤£ विफल. </translation>
+ </message>
+ <message>
+ <source>Error while uploading video to YouTube (%1)</source>
+ <translation type="unfinished">यà¥à¤à¥à¤¯à¥à¤¬ पर विडà¥à¤¯à¥ à¤
पलà¥à¤¡ à¤à¤°à¤¨à¥ à¤à¥ दà¥à¤°à¤¾à¤¨ तà¥à¤°à¥à¤à¤¿ (%1)</translation>
+ </message>
+ <message>
+ <source>Upload to YouTube in progress %1 %</source>
+ <translation type="unfinished">यà¥à¤à¤¯à¥à¤¬ पर विडà¥à¤¯à¥ à¤
पलà¥à¤¡ हॠरहा हॠ%1 %</translation>
+ </message>
+ <message>
+ <source>Open-Sankore</source>
+ <translation type="unfinished">सà¤à¤à¥à¤°-à¤à¥à¤²à¥à¤ </translation>
+ </message>
+ <message>
+ <source>OpenSankore</source>
+ <translation type="unfinished">सà¤à¤à¥à¤° à¤à¥à¤²à¥à¤</translation>
+ </message>
+</context>
+<context>
+ <name>UBYouTubePublishingDialog</name>
+ <message>
+ <source>Upload</source>
+ <translation type="unfinished">à¤
पलà¥à¤¡ </translation>
+ </message>
+ <message>
+ <source>Autos & Vehicles</source>
+ <translation type="unfinished">à¤à¤à¥ तथा à¤à¤¾à¥à¤¿à¤¯à¤¾à¤ </translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation type="unfinished">सà¤à¤à¥à¤¤ </translation>
+ </message>
+ <message>
+ <source>Pets & Animals</source>
+ <translation type="unfinished">पालतॠà¤à¤¾à¤¨à¤µà¤° तथा पशॠ</translation>
+ </message>
+ <message>
+ <source>Sports</source>
+ <translation type="unfinished">à¤à¥à¤²à¤à¥à¤¦ </translation>
+ </message>
+ <message>
+ <source>Travel & Events</source>
+ <translation type="unfinished">यातà¥à¤°à¤¾ तथा à¤à¤à¤¨à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Gaming</source>
+ <translation type="unfinished">à¤à¥à¤®à¤¿à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Comedy</source>
+ <translation type="unfinished">à¤à¤¾à¤®à¥à¤¡à¥ </translation>
+ </message>
+ <message>
+ <source>People & Blogs</source>
+ <translation type="unfinished">लà¥à¤ तथा बà¥à¤²à¤¾à¤à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>News & Politics</source>
+ <translation type="unfinished">समाà¤à¤¾à¤° तथा राà¤à¤¨à¥à¤¤à¤¿ </translation>
+ </message>
+ <message>
+ <source>Entertainment</source>
+ <translation type="unfinished">मनà¥à¤°à¤à¤à¤¨ </translation>
+ </message>
+ <message>
+ <source>Education</source>
+ <translation type="unfinished">शिà¤à¥à¤·à¤¾ </translation>
+ </message>
+ <message>
+ <source>Howto & Style</source>
+ <translation type="unfinished">à¤à¥à¤¸à¥ तथा शà¥à¤²à¥ </translation>
+ </message>
+ <message>
+ <source>Nonprofits & Activism</source>
+ <translation type="unfinished">à¤à¥à¤° लाà¤à¤à¤¾à¤°à¥ तथा सà¤à¥à¤°à¤¿à¤¯à¤¤à¤¾à¤µà¤¾à¤¦ </translation>
+ </message>
+ <message>
+ <source>Science & Technology</source>
+ <translation type="unfinished">विà¤à¥à¤à¤¾à¤¨ तथा तà¤à¤¨à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>UBZoomPalette</name>
+ <message>
+ <source>%1 x</source>
+ <translation type="unfinished">%1 x</translation>
+ </message>
+</context>
+<context>
+ <name>UniboardSankoreTransition</name>
+ <message>
+ <source>Import old Uniboard/Sankore documents</source>
+ <translation type="unfinished">पà¥à¤°à¤¾à¤¨à¥ यà¥à¤¨à¤¿à¤¬à¥à¤°à¥à¤¡/सà¤à¤à¥à¤° दसà¥à¤¤à¤¾à¤µà¥à¤ à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>There are no documents that should be imported</source>
+ <translation type="unfinished">à¤à¤¸à¥ à¤à¥à¤ दसà¥à¤¤à¤¾à¤µà¥à¤ नहà¥à¤ हॠà¤à¤¿à¤¨à¥à¤¹à¥à¤ à¤à¤à¤ªà¥à¤°à¥à¤ à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤¨à¤¾ à¤à¤¾à¤¹à¤¿à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>WBClearButton</name>
+ <message>
+ <source>Clear</source>
+ <translation type="unfinished">à¤à¥à¤²à¤¿à¤¯à¤° </translation>
+ </message>
+</context>
+<context>
+ <name>WBDownloadItem</name>
+ <message>
+ <source>Save File</source>
+ <translation type="unfinished">फाà¤à¤² सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Download canceled: %1</source>
+ <translation type="unfinished">डाà¤à¤¨à¤²à¥à¤¡ निरसà¥à¤¤ : %1</translation>
+ </message>
+ <message>
+ <source>Error opening saved file: %1</source>
+ <translation type="unfinished">सà¥à¤°à¤à¥à¤·à¤¿à¤¤ फाà¤à¤² à¤à¥à¤²à¤¨à¥ मà¥à¤ तà¥à¤°à¥à¤à¤¿ : %1</translation>
+ </message>
+ <message>
+ <source>Error saving: %1</source>
+ <translation type="unfinished">सà¥à¤°à¤à¥à¤·à¤¿à¤¤ à¤à¤°à¤¨à¥ मà¥à¤ तà¥à¤°à¥à¤à¤¿ : %1</translation>
+ </message>
+ <message>
+ <source>Network Error: %1</source>
+ <translation type="unfinished">नà¥à¤à¤µà¤°à¥à¤ तà¥à¤°à¥à¤à¤¿ : %1</translation>
+ </message>
+ <message>
+ <source>seconds</source>
+ <translation type="unfinished">सà¥à¤à¤£à¥à¤¡à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>minutes</source>
+ <translation type="unfinished">मिनà¤à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>- %4 %5 remaining</source>
+ <translation type="unfinished">- %4 %5 शà¥à¤· </translation>
+ </message>
+ <message>
+ <source>%1 of %2 (%3/sec) %4</source>
+ <translation type="unfinished">%2 (%3/sec) %4 à¤à¤¾ %1 </translation>
+ </message>
+ <message>
+ <source>?</source>
+ <comment>unknown file size</comment>
+ <translation type="unfinished">?</translation>
+ </message>
+ <message>
+ <source>%1 of %2 - Stopped</source>
+ <translation type="unfinished"> %2 à¤à¤¾ %1 - रà¥à¤à¤¾ à¤à¤¯à¤¾ </translation>
+ </message>
+ <message>
+ <source>bytes</source>
+ <translation type="unfinished">बाà¤à¤à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>KB</source>
+ <translation type="unfinished">à¤à¥à¤¬à¥ </translation>
+ </message>
+ <message>
+ <source>MB</source>
+ <translation type="unfinished">à¤à¤®à¤¬à¥ </translation>
+ </message>
+</context>
+<context>
+ <name>WBDownloadManager</name>
+ <message>
+ <source>1 Download</source>
+ <translation type="unfinished">1 डाà¤à¤¨à¤²à¥à¤¡ </translation>
+ </message>
+ <message>
+ <source>%1 Downloads</source>
+ <comment>always >= 2</comment>
+ <translation type="unfinished">%1 डाà¤à¤¨à¤²à¥à¤¡à¥à¤¸ </translation>
+ </message>
+</context>
+<context>
+ <name>WBHistoryModel</name>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤</translation>
+ </message>
+ <message>
+ <source>Address</source>
+ <translation type="unfinished">पता </translation>
+ </message>
+</context>
+<context>
+ <name>WBHistoryTreeModel</name>
+ <message>
+ <source>Earlier Today</source>
+ <translation type="unfinished">à¤à¤ पहलॠ</translation>
+ </message>
+ <message>
+ <source>%1 items</source>
+ <translation type="unfinished">%1 वसà¥à¤¤à¥à¤à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>WBSearchLineEdit</name>
+ <message>
+ <source>Search</source>
+ <translation type="unfinished">तलाश </translation>
+ </message>
+</context>
+<context>
+ <name>WBTabBar</name>
+ <message>
+ <source>New &Tab</source>
+ <translation type="unfinished">नया à¤à¤° à¤à¥à¤¬ </translation>
+ </message>
+ <message>
+ <source>Clone Tab</source>
+ <translation type="unfinished">à¤à¥à¤²à¥à¤¨ à¤à¥à¤¬ </translation>
+ </message>
+ <message>
+ <source>&Close Tab</source>
+ <translation type="unfinished">à¤à¤° बनà¥à¤¦ à¤à¥à¤¬ </translation>
+ </message>
+ <message>
+ <source>Close &Other Tabs</source>
+ <translation type="unfinished">बनà¥à¤¦ à¤à¤° à¤
नà¥à¤¯ à¤à¥à¤¬à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Reload Tab</source>
+ <translation type="unfinished">रिलà¥à¤¡ à¤à¥à¤¬ </translation>
+ </message>
+ <message>
+ <source>Reload All Tabs</source>
+ <translation type="unfinished">सà¤à¥ à¤à¥à¤¬à¥à¤ रिलà¥à¤¡ à¤à¤°à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>WBTabWidget</name>
+ <message>
+ <source>Recently Closed Tabs</source>
+ <translation type="unfinished">हाल मà¥à¤ हॠबनà¥à¤¦ à¤à¥à¤¬à¥à¤ </translation>
+ </message>
+ <message>
+ <source>(Untitled)</source>
+ <translation type="unfinished">(बिना शà¥à¤°à¥à¤·à¤ à¤à¥) </translation>
+ </message>
+</context>
+<context>
+ <name>WBToolbarSearch</name>
+ <message>
+ <source>Search</source>
+ <translation type="unfinished">तलाश </translation>
+ </message>
+ <message>
+ <source>No Recent Searches</source>
+ <translation type="unfinished">हाल à¤à¥ à¤à¥à¤ तलाश नहà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Recent Searches</source>
+ <translation type="unfinished">हाल à¤à¥ तलाशà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Clear Recent Searches</source>
+ <translation type="unfinished">हाल à¤à¥ à¤à¥à¤à¥à¤ à¤à¥ à¤à¤¤à¥à¤® à¤à¤°à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation type="unfinished">à¤à¤¾à¤² à¤à¥ लिठसामà¤à¥à¤°à¥ à¤à¤¾ à¤à¤¯à¤¨ à¤à¤°à¥à¤:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation type="unfinished">पà¥à¤°à¤¯à¥à¤ à¤à¤¾ नाम </translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation type="unfinished">पà¥à¤°à¤¤à¤¿à¤¬à¤à¤§ à¤à¤° à¤
सà¥à¤µà¥à¤à¤°à¤£.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation type="unfinished">यह सà¥à¤µà¤¿à¤§à¤¾ सबसॠà¤à¤® वà¥à¤¬ पनà¥à¤¨à¥à¤ पर à¤à¤¾à¤® à¤à¤°à¤¨à¥ à¤à¥ लिठविà¤à¤¸à¤¿à¤¤ à¤à¥ हà¥</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation type="unfinished">à¤à¥à¤ªà¤¯à¤¾ लिà¤à¤ बनानॠया वà¥à¤¬ सॠसामà¤à¥à¤°à¥ à¤à¥ पà¤à¤¡à¤¼à¤¨à¥ à¤à¥ लिठà¤à¥à¤ªà¥à¤°à¤¾à¤à¤ à¤à¤¾ समà¥à¤®à¤¾à¤¨ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>WBWebPage</name>
+ <message>
+ <source>Download</source>
+ <translation type="unfinished">डाà¤à¤¨à¤²à¥à¤¡ </translation>
+ </message>
+ <message>
+ <source>Add to Current Document</source>
+ <translation type="unfinished">वरà¥à¤¤à¤®à¤¾à¤¨ दसà¥à¤¤à¤¾à¤µà¥à¤ पर à¤à¥à¥à¥à¤ </translation>
+ </message>
+ <message>
+ <source>PDF</source>
+ <translation type="unfinished">पà¥à¤¡à¥à¤à¤« </translation>
+ </message>
+ <message>
+ <source>Error loading page: %1</source>
+ <translation type="unfinished">पà¥à¤ लà¥à¤¡ à¤à¤°à¤¨à¥ मà¥à¤ तà¥à¤°à¥à¤à¤¿ : %1</translation>
+ </message>
+ <message>
+ <source>Download PDF Document: would you prefer to download the PDF file or add it to the current Sankore document?</source>
+ <translation type="unfinished">डाà¤à¤¨à¤²à¥à¤¡ à¤à¤¿à¤¯à¤¾ à¤à¤¯à¤¾ पà¥à¤¡à¥à¤à¤«-दसà¥à¤¤à¤¾à¤µà¥à¤ : à¤à¤ª पà¥à¤¡à¥à¤à¤«-फाà¤à¤² डाà¤à¤¨à¤²à¥à¤¡ à¤à¤°à¤¨à¤¾ à¤à¤¾à¤¹à¥à¤à¤à¥ या à¤à¤¸à¥ वरà¥à¤¤à¤®à¤¾à¤¨ सà¤à¤à¥à¤° दसà¥à¤¤à¤¾à¤µà¥à¤ पर à¤à¥à¥à¥à¤¨à¤¾ पसनà¥à¤¦ à¤à¤°à¥à¤à¤à¥ ? </translation>
+ </message>
+</context>
+<context>
+ <name>WBWebView</name>
+ <message>
+ <source>Open in New Tab</source>
+ <translation type="unfinished">नयॠà¤à¥à¤¬ पर à¤à¥à¤²à¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>YouTubePublishingDialog</name>
+ <message>
+ <source>Publish Podcast to YouTube</source>
+ <translation type="unfinished">पà¥à¤¡à¤à¤¾à¤¸à¥à¤ à¤à¥ यà¥à¤à¤¯à¥à¤¬ पर पबà¥à¤²à¤¿à¤¶ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤ </translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation type="unfinished">विवरण </translation>
+ </message>
+ <message>
+ <source>Keywords</source>
+ <translation type="unfinished">à¤à¥à¤µà¤°à¥à¤¡à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>Uniboard</source>
+ <translation type="unfinished">यà¥à¤¨à¤¿à¤¬à¥à¤°à¥à¤¡ </translation>
+ </message>
+ <message>
+ <source>Category</source>
+ <translation type="unfinished">à¤à¥à¤à¥à¤à¤°à¥ </translation>
+ </message>
+ <message>
+ <source>YouTube Username</source>
+ <translation type="unfinished">यà¥à¤à¤¯à¥à¤¬ पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾ à¤à¤¾ नाम </translation>
+ </message>
+ <message>
+ <source>YouTube Password</source>
+ <translation type="unfinished">यà¥à¤à¤¯à¥à¤¬ पासवरà¥à¤¡ </translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">By clicking 'Upload,' you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></source>
+ <translation type="unfinished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">'à¤
पलà¥à¤¡' à¤à¥à¤²à¤¿à¤ à¤à¤°à¤¤à¥ हà¥à¤, à¤à¤ª यह पà¥à¤°à¤®à¤¾à¤£à¤¿à¤¤ à¤à¤°à¤¤à¥ हà¥à¤ à¤à¤¿ à¤à¤ªà¤à¥ पास विषय सामà¤à¥à¤°à¥ à¤à¥ सरà¥à¤µà¤¾à¤§à¤¿à¤à¤¾à¤° हà¥à¤ या à¤à¤ª सà¥à¤µà¤¾à¤®à¥ à¤à¥ दà¥à¤µà¤¾à¤°à¤¾ विषय सामà¤à¥à¤°à¥ à¤à¥ यà¥à¤à¤¯à¥à¤¬ पर सारà¥à¤µà¤à¤¨à¤¿à¤ रà¥à¤ª सॠà¤à¤ªà¤²à¤¬à¥à¤§ à¤à¤°à¤¾à¤¨à¥ à¤à¥ लिठà¤
धिà¤à¥à¤¤ à¤à¤¿à¤ à¤à¤ हà¥, à¤à¤° à¤
नà¥à¤¯à¤¥à¤¾ यह यहाठसà¥à¤¥à¤¿à¤¤ यà¥à¤à¥à¤¯à¥à¤¬ à¤à¥ नियमà¥à¤ à¤à¥ à¤
नà¥à¤¸à¤¾à¤° हॠ</span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation type="unfinished">रिबà¥à¤ पर साठपà¥à¤¨à¤°à¥à¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤</translation>
+ </message>
+</context>
+<context>
+ <name>brushProperties</name>
+ <message>
+ <source>Opacity</source>
+ <translation type="unfinished">à¤
सà¥à¤ªà¤·à¥à¤à¤¤à¤¾</translation>
+ </message>
+ <message>
+ <source>On Light Background</source>
+ <translation type="unfinished">हलà¤à¥ पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿ पर </translation>
+ </message>
+ <message>
+ <source>On Dark Background</source>
+ <translation type="unfinished">à¤à¤¹à¤°à¥ पà¥à¤·à¥à¤ à¤à¥à¤®à¤¿ पर</translation>
+ </message>
+ <message>
+ <source>Line Width</source>
+ <translation type="unfinished">लाà¤à¤¨ à¤à¥ à¤à¥à¥à¤¾à¤ </translation>
+ </message>
+ <message>
+ <source>Medium</source>
+ <translation type="unfinished">माधà¥à¤¯à¤® </translation>
+ </message>
+ <message>
+ <source>Strong</source>
+ <translation type="unfinished">शà¤à¥à¤¤à¤¿à¤¶à¤¾à¤²à¥</translation>
+ </message>
+ <message>
+ <source>Fine</source>
+ <translation type="unfinished">à¤à¤¤à¥à¤à¥à¤·à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Pen is Pressure Sensitive</source>
+ <translation type="unfinished">पà¥à¤¨ दबाव à¤à¥ पà¥à¤°à¤¤à¤¿ सà¤à¤µà¥à¤¦à¤¨à¤¶à¥à¤² हॠ</translation>
+ </message>
+</context>
+<context>
+ <name>capturePublishingDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation type="unfinished">डायलाठ</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤</translation>
+ </message>
+ <message>
+ <source>E-mail</source>
+ <translation type="unfinished">à¤-मà¥à¤² </translation>
+ </message>
+ <message>
+ <source>Author</source>
+ <translation type="unfinished">लà¥à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation type="unfinished">विवरण</translation>
+ </message>
+</context>
+<context>
+ <name>documentPublishingDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation type="unfinished">डायलाà¤</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished">शà¥à¤°à¥à¤·à¤</translation>
+ </message>
+ <message>
+ <source>E-mail</source>
+ <translation type="unfinished">à¤-मà¥à¤²</translation>
+ </message>
+ <message>
+ <source>Author</source>
+ <translation type="unfinished">लà¥à¤à¤</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation type="unfinished">विवरण</translation>
+ </message>
+ <message>
+ <source>Attach Downloadable PDF Version</source>
+ <translation type="unfinished">डाà¤à¤¨à¤²à¥à¤¡ à¤à¤°à¤¨à¥ यà¥à¤à¥à¤¯ पà¥à¤¡à¥à¤à¤« वरà¥à¤¶à¤¨ सà¤à¤²à¤à¥à¤¨ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Attach Downloadable Uniboard File (UBZ)</source>
+ <translation type="unfinished">डाà¤à¤¨à¤²à¥à¤¡ à¤à¤¿à¤ à¤à¤¾à¤¨à¥ यà¥à¤à¥à¤¯ यà¥à¤¨à¤¿à¤¬à¥à¤°à¥à¤¡ फाà¤à¤² (UBZ) सà¤à¤²à¤à¥à¤¨ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Warning: This documents contains video, which will not be displayed properly on the Web</source>
+ <translation type="unfinished">à¤à¥à¤¤à¤¾à¤µà¤¨à¥ : à¤à¤¸ दसà¥à¤¤à¤¾à¤µà¥à¤ मà¥à¤ वà¥à¤¡à¤¿à¤¯à¥ हॠà¤à¥ वà¥à¤¬ पर सहॠढà¤à¤ सॠनहà¥à¤ दिà¤à¤¾à¤ दà¥à¤à¤¾ । </translation>
+ </message>
+</context>
+<context>
+ <name>documents</name>
+ <message>
+ <source>Uniboard Documents</source>
+ <translation type="unfinished">यà¥à¤¨à¤¿à¤¬à¥à¤°à¥à¤¡ दसà¥à¤¤à¤¾à¤µà¥à¤ </translation>
+ </message>
+</context>
+<context>
+ <name>preferencesDialog</name>
+ <message>
+ <source>Preferences</source>
+ <translation type="unfinished">वरियताà¤à¤ </translation>
+ </message>
+ <message>
+ <source>Default Settings</source>
+ <translation type="unfinished">डिफालà¥à¤ सà¥à¤à¤¿à¤à¤à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation type="unfinished">बनà¥à¤¦ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Display</source>
+ <translation type="unfinished">पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Show Page with External Browser</source>
+ <translation type="unfinished">बाहरॠबà¥à¤°à¤¾à¤à¤à¤° à¤à¥ साथ पà¥à¤ दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Virtual Keyboard</source>
+ <translation type="unfinished">à¤à¤à¤¾à¤¸à¥ à¤à¥à¤¬à¥à¤°à¥à¤¡ </translation>
+ </message>
+ <message>
+ <source>Keyboard button size:</source>
+ <translation type="unfinished">à¤à¥à¤¬à¥à¤°à¥à¤¡ बà¤à¤¨ साà¤à¤ : </translation>
+ </message>
+ <message>
+ <source>Positioned at the Top (recommended for tablets)</source>
+ <translation type="unfinished">à¤à¤ªà¤° सà¥à¤¥à¤¿à¤¤ (à¤à¥à¤¬à¤²à¥à¤à¥à¤¸ à¤à¥ लिठà¤
नà¥à¤¶à¤à¤¸à¤¿à¤¤) </translation>
+ </message>
+ <message>
+ <source>Positioned at the Bottom (recommended for white boards)</source>
+ <translation type="unfinished">नà¥à¤à¥ सà¥à¤¥à¤¿à¤¤ (वà¥à¤¹à¤¾à¤à¤ बà¥à¤°à¥à¤¡à¥à¤¸ à¤à¥ लिठà¤
नà¥à¤¶à¤à¤¸à¤¿à¤¤) </translation>
+ </message>
+ <message>
+ <source>Display Text Under Button</source>
+ <translation type="unfinished">बà¤à¤¨ à¤à¥ नà¥à¤à¥ पाठपà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ </translation>
+ </message>
+ <message>
+ <source>Stylus Palette</source>
+ <translation type="unfinished">लà¥à¤à¤¨à¥ पà¥à¤²à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Horizontal</source>
+ <translation type="unfinished">à¤à¥à¤·à¥à¤¤à¤¿à¤ </translation>
+ </message>
+ <message>
+ <source>Vertical</source>
+ <translation type="unfinished">लà¤à¤¬ </translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation type="unfinished">à¤à¥ बारॠमà¥à¤ </translation>
+ </message>
+ <message>
+ <source>Software Update</source>
+ <translation type="unfinished">साफà¥à¤à¤µà¥à¤¯à¤° à¤
पडà¥à¤à¥à¤¸ </translation>
+ </message>
+ <message>
+ <source>Check software update at launch</source>
+ <translation type="unfinished">लाà¤à¤ पर साफà¥à¤à¤µà¥à¤¯à¤° à¤à¤¾à¤à¤ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Internet</source>
+ <translation type="unfinished">à¤à¤à¤à¤°à¤¨à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Home Page:</source>
+ <translation type="unfinished">हà¥à¤® पà¥à¤ : </translation>
+ </message>
+ <message>
+ <source>Toolbar</source>
+ <translation type="unfinished">à¤à¥à¤²à¤¬à¤¾à¤° </translation>
+ </message>
+ <message>
+ <source>Pen</source>
+ <translation type="unfinished">पà¥à¤¨ </translation>
+ </message>
+ <message>
+ <source>Marker</source>
+ <translation type="unfinished">मारà¥à¤à¤° </translation>
+ </message>
+ <message utf8="true">
+ <source>version : â¦</source>
+ <translation type="unfinished">सà¤à¤¸à¥à¤à¤°à¤£ : </translation>
+ </message>
+ <message>
+ <source>Licences</source>
+ <translation type="unfinished">लाà¤à¤¸à¥à¤à¤¸ </translation>
+ </message>
+ <message>
+ <source>zlib</source>
+ <translation type="unfinished">zlib</translation>
+ </message>
+ <message>
+ <source>Network</source>
+ <translation type="unfinished">नà¥à¤à¤µà¤°à¥à¤ </translation>
+ </message>
+ <message utf8="true">
+ <source>Open-Sankoré</source>
+ <translation type="unfinished">सà¤à¤à¥à¤°-à¤à¥à¤²à¥à¤ </translation>
+ </message>
+ <message>
+ <source>Show internal web page content on secondary screen or projector</source>
+ <translation type="unfinished">सà¥à¤à¤£à¥à¤¡à¤°à¥ सà¥à¤à¥à¤°à¥à¤¨ या पà¥à¤°à¥à¤à¥à¤à¥à¤à¤° पर à¤à¤à¤¤à¤°à¤¿à¤ वà¥à¤¬ पà¥à¤ विषयसामà¤à¥à¤°à¥ दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Multi display</source>
+ <translation type="unfinished">मलà¥à¤à¥ डिसपà¥à¤²à¥ </translation>
+ </message>
+ <message>
+ <source>Swap control display and view display</source>
+ <translation type="unfinished">सà¥à¤µà¥à¤ª à¤à¤à¤à¥à¤°à¥à¤² डिसपà¥à¤²à¥ तथा वà¥à¤¯à¥ डिसपà¥à¤²à¥ </translation>
+ </message>
+ <message>
+ <source>Mode</source>
+ <translation type="unfinished">माधà¥à¤¯à¤® </translation>
+ </message>
+ <message>
+ <source>Mode to start in:</source>
+ <translation type="unfinished">शà¥à¤°à¥ à¤à¤°à¤¨à¥ à¤à¥ लिठमाधà¥à¤¯à¤® :</translation>
+ </message>
+ <message>
+ <source>Board</source>
+ <translation type="unfinished">बà¥à¤°à¥à¤¡ </translation>
+ </message>
+ <message>
+ <source>Desktop</source>
+ <translation type="unfinished">डà¥à¤¸à¥à¤à¤à¤¾à¤ª </translation>
+ </message>
+ <message>
+ <source>Proxy User:</source>
+ <translation type="unfinished">पà¥à¤°à¥à¤à¥à¤¸à¥ यà¥à¤à¤° :</translation>
+ </message>
+ <message>
+ <source>Pass:</source>
+ <translation type="unfinished">पास : </translation>
+ </message>
+ <message>
+ <source>User:</source>
+ <translation type="unfinished">पà¥à¤°à¤¯à¥à¤à¥à¤¤à¤¾ : </translation>
+ </message>
+ <message>
+ <source>Pass: </source>
+ <translation type="unfinished">पास : </translation>
+ </message>
+ <message>
+ <source>Credits</source>
+ <translation type="unfinished">à¤à¥à¤°à¥à¤¡à¤¿à¤à¥à¤¸</translation>
+ </message>
+ <message>
+ <source>Start up tips</source>
+ <translation type="unfinished">पà¥à¤°à¤¾à¤°à¤à¤ à¤à¤°à¤¨à¥ à¤à¥ यà¥à¤à¥à¤¤à¤¿à¤¯à¤¾à¤ </translation>
+ </message>
+ <message>
+ <source>Show start up tips</source>
+ <translation type="unfinished">पà¥à¤°à¤¾à¤°à¤à¤ à¤à¤°à¤¨à¥ à¤à¥ यà¥à¤à¥à¤¤à¤¿à¤¯à¤¾à¤ दिà¤à¤¾à¤à¤ </translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation type="unfinished">à¤à¤¾à¤·à¤¾</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation type="unfinished">à¤à¤ à¤à¤¾à¤·à¤¾ à¤à¤¾ à¤à¤¯à¤¨ à¤à¤°à¥à¤</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation type="unfinished">नठà¤à¤¾à¤·à¤¾ à¤
à¤à¤²à¥ पà¥à¤¨à¤°à¥à¤ªà¥à¤°à¤¾à¤°à¤à¤ पर लà¥à¤¡ à¤à¤¿à¤¯à¤¾ à¤à¤¾à¤à¤à¤¾</translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation type="unfinished"> Open-Sankoré बनà¥à¤¦ à¤à¤°à¥à¤ </translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation type="unfinished">फ़ाà¤à¤² निरà¥à¤¯à¤¾à¤¤ à¤à¤°à¤¨à¥ à¤à¥ लियॠPlanete Sankoré à¤à¤à¤¡à¥</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation type="unfinished">रिबà¥à¤ पर साठपà¥à¤¨à¤°à¥à¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation type="unfinished"> à¤à¤ªà¤¨ SSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation type="unfinished">Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation type="unfinished">QuaZIP</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>trapFlashDialog</name>
+ <message>
+ <source>Trap flash</source>
+ <translation type="unfinished">à¤à¥à¤°à¥à¤ª फà¥à¤²à¥à¤¶ </translation>
+ </message>
+ <message>
+ <source>Select a flash to trap</source>
+ <translation type="unfinished">à¤à¥à¤°à¥à¤ª à¤à¥ लिठà¤à¤ फà¥à¤²à¥à¤¶ à¤à¥à¤¨à¥à¤ </translation>
+ </message>
+ <message>
+ <source>about:blank</source>
+ <translation type="unfinished">à¤à¥ बारॠमà¥à¤ : à¤à¤¾à¤²à¥ </translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation type="unfinished">पà¥à¤°à¤¯à¥à¤ à¤à¤¾ नाम </translation>
+ </message>
+ <message>
+ <source>Create Application</source>
+ <translation type="unfinished">पà¥à¤°à¤¯à¥à¤ तà¥à¤¯à¤¾à¤° à¤à¤°à¥à¤ </translation>
+ </message>
+</context>
+</TS>
diff --git a/Sankore-3.1/resources/i18n/sankore_it.ts b/Sankore-3.1/resources/i18n/sankore_it.ts
index 1db687f..e98816a 100644
--- a/Sankore-3.1/resources/i18n/sankore_it.ts
+++ b/Sankore-3.1/resources/i18n/sankore_it.ts
@@ -50,7 +50,7 @@
<name>IntranetPodcastPublishingDialog</name>
<message>
<source>Publish Podcast to YouTube</source>
- <translation>Pubblica su YouTube</translation>
+ <translation>Pubblica Podcast su YouTube</translation>
</message>
<message>
<source>Title</source>
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Segnalibro</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>Configura la registrazione del Podcast</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Cattura Flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Cattura contenuto flash</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Cattura Web</translation>
</message>
@@ -728,20 +721,12 @@
<translation>Cattura una finestra</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Incorpora contenuto web</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Cattura un contenuto web incorporabile</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>Visualizza sullo schermo</translation>
</message>
<message>
<source>Show Main Screen on Display Screen</source>
- <translation>Visualizza lo schermo principale sullo schermo</translation>
+ <translation>Visualizza lo schermo principale sullo schermo esteso</translation>
</message>
<message>
<source>Erase all Annotations</source>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>Raggruppa</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download nella</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">biblioteca</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Download nella libreria</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download nella</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">pagina corrente</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Download nella pagina corrente</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Aggiungi collegamento nella</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">biblioteca</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Aggiungi collegamento nella libreria</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Aggiungi collegamento nella</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">pagina corrente</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Aggiungi collegamento nella pagina corrente</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Segnalibro</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1010,110 @@
<translation>Forma:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Dimensione:</translation>
+ <source>Alpha:</source>
+ <translation>Alfa:</translation>
</message>
<message>
- <source>Close</source>
- <translation>Chiudi</translation>
+ <source>Geometry:</source>
+ <translation>Geometria:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Larghezza: </translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Altezza:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Mantieni le proporzioni</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Modalità :</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Anteprima:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Chiudi cache</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><rilascia il contenuto></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Le immagini non sono accettate</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Impossibile visualizzare dati</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Il file rilasciato non è riconosciuto come file audio</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Riproduce un file audio</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Aggiungi il collegamento nella pagina</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Aggiungi collegamento ad una pagina Web</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Trascina e rilascia in questo box il file audio prelevato dalla biblioteca</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Pagina successiva</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Pagina precedente</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Titolo pagina</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Ultima pagina</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Numero Pagina</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Inserisci il testo del collegamento qui</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>Elimina pagina</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Elimina documento</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Sei sicuro di voler eliminare il documento '%1'?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Svuota il cestino</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Sei sicuro di voler svuotare il cestino?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Sto svuotanto il cestino</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Cestino svuotato</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Elimina cartella</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Sei sicuro di voler eliminare la cartella '%1' e tutto il suo contenuto?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Nessun documento selezionato!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Apri file supportato</translation>
</message>
@@ -1144,8 +1228,7 @@
<message numerus="yes">
<source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
<translation type="unfinished">
- <numerusform>Sei sicuro di voler rimuovere %n pagine dal documento '%1' selezionato?
- </numerusform>
+ <numerusform>Sei sicuro di voler rimuovere %n pagine dal documento '%1' selezionato?</numerusform>
</translation>
</message>
<message>
@@ -1160,6 +1243,14 @@
<source>Untitled Documents</source>
<translation>Documenti senza titolo</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1247,6 +1338,58 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Accetta</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Sostituisci</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Annulla</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Il nome %1 è già usato.
+Mantenendo questo nome sarà sovrascritto il documento esistente.
+Fornendo un nome nuovo sarà creato un nuovo documento.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>I miei documenti</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modelli</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Cestino</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Documenti senza titolo</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Sto copiando pagina %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 pagine copiate</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1259,12 +1402,110 @@
<message numerus="yes">
<source>%1 pages copied</source>
<translation type="unfinished">
- <numerusform>%1 pagine copiate
- </numerusform>
+ <numerusform>%1 pagine copiate</numerusform>
</translation>
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Download fallito.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>il server remoto ha rifiutato la connessione (il server non sta accettando richieste)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>il server remoto ha chiuso la connessione prematuramente, prima che l'intera risposta fosse ricevuta ed elaborata</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>il nome dell'host remoto non è stato trovato (nome host non valido)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>la connessione al server remoto è scaduta</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>l'operazione è stata annullata con chiamate ad abort() o close() prima che fosse completata.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>la connessione SSL/TLS non è riuscita e non è stato stabilito il canale criptato. Dovrebbe essere stato emesso un segnale sslErrors().</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>la connessione è stata interrotta a causa della disconnessione dalla rete, tuttavia il sistema ha avviato il roaming a un altro punto di accesso. La richiesta sarà nuovamente sottomesssa e sarà elaborata non appena la connessione verrà ristabilita.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>la connessione al server proxy è stata rifiutata (il server proxy non sta accettando richieste)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>il proxy server ha chiuso la connessione prematuramente, prima che l'intera risposta fosse ricevuta e processata</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>il nome host del proxy non è stato trovato (proxy hostname non valido)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>la connessione al proxy è scaduta o il proxy non ha risposto in tempo utile alla richiesta inviata</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>il proxy richiede autenticazione per soddisfare la richiesta ma non ha accettato le credenziali fornite (se fornite)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>l'accesso al contenuto remoto è stato negato (simile all'errore HTTP 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>l'operazione richiesta sul contenuto remoto non è permessa</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>il contenuto remoto non è stato trovato sul server (simile all'errore HTTP 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>il server remoto richiede l'autenticazione per restituire il contenuto, ma le credenziali fornite non sono state accettate (se fornite)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>la richiesta necessitava di un reinvio, ma ciò non è riuscito per esempio perché non è possibile leggere i dati di upload una seconda volta.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>l'API di accesso alla rete non può soddisfare la richiesta perché il protocollo non è noto</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>l'operazione richiesta non è valida per questo protocollo</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>è stato rilevato un errore sconosciuto relativo alla rete</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>è stato rilevato un errore sconosciuto relativo al proxy</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>è stato rilevato un errore sconosciuto relativo al contenuto remoto</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>è stata rilevata un'interruzione nel protocollo (errore di parsing, risposte non valide o impreviste, ecc)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1333,6 +1574,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Esportazione fallita...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Esporta come file UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Esportazione documento in corso...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Esportazione riuscita.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Esportazione fallita.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Esporta nel formato UBX di Sankoré</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1419,6 +1687,10 @@
<source>Object informations</source>
<translation>Informazioni sull'oggetto</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Aggiungi</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1501,6 +1773,14 @@
<source>Trash</source>
<translation>Cestino</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Segnalibri</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1534,6 +1814,22 @@
<source>Visible on Extended Screen</source>
<translation>Visibile sullo schermo esteso</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Aggiungi un'azione</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Rimuovi il collegamento all'audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Rimuovi il collegamento alla pagina</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Rimuovi il collegamento all'indirizzo web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1549,6 +1845,22 @@
<source>Go to Content Source</source>
<translation>Vai alla sorgente del contenuto</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Aggiungi un'azione</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Rimuovi il collegamento all'audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Rimuovi il collegamento alla pagina</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Rimuovi il collegamento all'indirizzo web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1569,13 +1881,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1636,6 +1941,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (insieme di documenti) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1844,12 +2156,148 @@ Vuoi ignorare gli errori per questo host?</translation>
<name>UBPreferencesController</name>
<message>
<source>version: </source>
- <translation>versione:</translation>
+ <translation>versione: </translation>
</message>
<message>
<source>Marker is pressure sensitive</source>
<translation>L'evidenziatore è sensibile alla pressione</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Predefinito</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabo</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgaro</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Catalano</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Ceco</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Danese</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Tedesco</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Greco</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Inglese</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Inglese UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Spagnolo</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Francese</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Francese Svizzero</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italiano</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Ebraico</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Giapponese</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Coreano</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malgascio</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norvegese</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Olandese</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polacco</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Romancio</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Rumeno</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Russo</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovacco</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Svedese</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turco</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Cinese</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Cinese Semplificato</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Cinese Tradizionale</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1891,6 +2339,17 @@ Vuoi ignorare gli errori per questo host?</translation>
<source>My Movies</source>
<translation>I miei film</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Visibile la prossima volta</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2107,20 +2566,16 @@ risorsa multimediale ...</translation>
<source>Cache</source>
<translation>Cache</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation type="obsolete">Goniometro 2</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
- <translation>Pagina intera</translation>
+ <translation>Intera pagina</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Incorporato </translation>
</message>
</context>
<context>
@@ -2467,6 +2922,49 @@ Si prega di riavviare l'applicazione per accedere ai documenti aggiornati.<
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Seleziona il contenuto da catturare:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nome applicazione</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Restrizioni e limitazioni di responsabilità . </translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Questa funzione è sviluppata per lavorare sulle pagine web più comuni.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Si prega di rispettare il diritto d'autore durante la creazione di collegamenti o nella cattura di contenuto dal web.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2544,7 +3042,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>Ripristina le credenziali al riavvio</translation>
</message>
</context>
<context>
@@ -2742,22 +3240,10 @@ p, li { white-space: pre-wrap; }
<translation>Licenze</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSL</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Rete</translation>
</message>
@@ -2801,10 +3287,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Password:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">ID Pianeta Sankoré</translation>
- </message>
<message>
<source>User:</source>
<translation>Utente:</translation>
@@ -2814,560 +3296,62 @@ p, li { white-space: pre-wrap; }
<translation>Password: </translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation></translation>
- </message>
- <message>
<source>Credits</source>
<translation>Riconoscimenti</translation>
</message>
- <message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Le licenze sono in inglese per rispettare le traduzioni ufficiali legalmente approvate.</span></p></td></tr></table></body></html></translation>
- </message>
<message utf8="true">
<source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <translation>ID Planète Sankoré per l'esportazione file</translation>
</message>
<message>
<source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <translation>Ripristina le credenziali al riavvio </translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>Suggerimenti all'avvio</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Show start up tips</source>
+ <translation>Mostra i suggerimenti all'avvio</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Lingua</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Seleziona una lingua</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>La nuova lingua sarà caricate al successivo riavvio</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Chiudi Open-Sankoré</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_iw.ts b/Sankore-3.1/resources/i18n/sankore_iw.ts
index 7005e79..e00c50f 100644
--- a/Sankore-3.1/resources/i18n/sankore_iw.ts
+++ b/Sankore-3.1/resources/i18n/sankore_iw.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>ס××× ××ת</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>ק××¢ תצ×רת ×ק××ת ×פ××קס×</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>×××××ת פ××ש</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>ת××× ×××××ת פ××ש</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>×××××ת ××× ××¨× ×</translation>
</message>
@@ -728,14 +721,6 @@
<translation>××× ××××</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>ש×× ×ª××× ××× ××¨× ×</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>××× ×ª××× ××× ××¨× × ×××× ×¡</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>×ר×× ×¢× ××ס×</translation>
</message>
@@ -810,7 +795,7 @@
<message>
<source>Interact with items</source>
<translatorcomment>There is no direct translation of this sentence- please provide contexte</translatorcomment>
- <translation type="unfinished">××ª×¤×¢× ×ת ×פר××</translation>
+ <translation>××ª×¤×¢× ×ת ×פר××××</translation>
</message>
<message>
<source>Erase Background</source>
@@ -824,6 +809,43 @@
<source>Group</source>
<translation>ק××צ×</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">××ר×× ×</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ספר××</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>××ר×× ×ספר××</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">××ר×× ×</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">××£ ×× ××××</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>××ר×× ×××£ ×× ××××</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">××סף ק×ש×ר ×</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ספר××</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>××סף ק×ש×ר ×ספר××</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">××ספת ק×ש×ר </p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">×××£ ×× ××××</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>××ספת ק×ש×ר ×××£ ×× ××××</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">ס××× ××ת</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -989,12 +1011,110 @@
<translation>צ×ר×:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>××××××:</translation>
+ <source>Alpha:</source>
+ <translation>××פ×:</translation>
</message>
<message>
- <source>Close</source>
- <translation>ס××ר</translation>
+ <source>Geometry:</source>
+ <translation>××××××ר××:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>ר×××:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>××××:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>ש××ר ×¢× ×××¡× ×××××ת</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>×צ×:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>צפ××× ××ק××ת:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>ס××ר ×××××</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>ת××× ×ת ×× ×תק×××ת</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>×× × ××ª× ××צ×× × ×ª×× ××</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>×ק×××¥ ×©× ×©×× ××× × ××××× ×ק×××¥ ש××¢</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>× ×× ×§×××¥ ש××¢</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>××סף ק×ש×ר ×××£</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>××סף ק×ש×ר ×××£ ××× ××¨× ×</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>×ר×ר ×ש×רר ×ת ק×××¥ ×ש××¢ ××ספר×× ×ת××× ××</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>××ש×ר</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>×××£ ×××</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>××£ ק×××</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>××£ ××תרת</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>××£ ××ר××</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>×ספר ××£</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>××× ×¡ ××× ××§×¡× URL</translation>
</message>
</context>
<context>
@@ -1059,42 +1179,6 @@
<translation>×סר ×ת ×××£</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>×סר ×ת ××ס××</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>××ª× ×××× ×©×רצ×× × ××ס×ר ×ת %1'××ס××?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>ר××§× ×ת ×ס×</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>××ª× ×××× ×©×רצ×× × ×ר××§× ×ת ×ס×?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>×ר××§× ×¡×</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>××¡× ××רק</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>×סר ת×ק××</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>××ª× ×××× ×©×רצ×× × ××ס×ר ×ת ×ת×ק×× %1 ××ת ×× ×ª×× ×?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>×× × ××ר ×× ×ס××!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>×¤×ª× ×§×××¥ ×ת×××</translation>
</message>
@@ -1161,6 +1245,14 @@
<source>Untitled Documents</source>
<translation>×ס×××× ××× ×©×</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>×××× ×¤×¢××× ×××ª× ×פ×××!</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1248,6 +1340,57 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>ק××</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>××××£</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>×××</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>××©× %1 ××ר × ××¦× ×ש×××ש. ×××©× ×©×××ש ××©× ×× ×××××£ ×ת ××ס××. ××ª× ×©× ××ש ××צ×ר ×ס×× ××ש.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>××ס×××× ×©××</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>ת×× ××ת</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation> ×שפ×ס×</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>×ס×× ××× ×©×</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">×עת×ק ×¢××× %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 ×פ×× ××עתק×</numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1266,6 +1409,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>×××ר×× × ×ש××</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>×שרת ××ר××ק ס××¨× ×××××ר (×שרת ××× × ×ק×× ×קש×ת)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>×שרת ××ר××ק ס×ר ×ת ×××××ר ××××¤× ××¤× × ××××, ××¤× × ×©×תש××× ×תק××× ××¢×××× ××××××</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>×©× ××××¨× ××ר××ק ×× × × ××¦× (×©× ××××¨× ×× ×ª×§××)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>×××××ר ×שרת ××ר××ק × ×תק ××××¤× ××× ×</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>×פע××× ××××× ×¢× ××× ×§×¨×××ת ××פסק×() ×× ×¡××ר×() ××¤× × ×¡××××.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>×××צת ××× SSL/TLS × ×ש×× ××× × ××ª× ×פת×× ×ת ×ער××¥ ×××צפ×. ××ת ×ש×××× sslError() ××× ×¦×¨×× ×××פ××¢.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>×קשר × ×תק ×ת×צ×× ×× ×ת×ק ××רשת, ×× ××ער×ת פת×× ×× ××× ×× ×§××ת ×××©× ××רת. ×¢× ×××§×©× ×××ש×× ×××ש ×××× ×ª×¢××× ×¢× ××××ש ×קשר.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>×××××ר ×שרת ×פר××§×¡× × ××× (שרת ×פר××§×¡× ××× × ×ק×× ×קש×ת)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>שרת ×פר××§×¡× ×¡×ר ×ת ×××××ר ××¨× ××× ×, ××¤× × ×©×תש××× ×ש××× ×תק××× ××¢××××</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>×©× ×××¨× ×פר××§×¡× ×× × ××¦× (×©× ×××¨× ×¤×¨××§×¡× ×××ª× ×ª×§××)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>×××××ר ×פר××§×¡× × ×תק ××× ×ת ×× ×פר××§×¡× ×× ×¢× × ×××× ×××§×©× ×©× ×©×××</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>×פר××§×¡× ××רש ××××× ×¢× ×× ×ª ××××¢× ×ת ×××§×©× ×× ×× ×§××× ××£ ×רש×× ×©×××¦×¢× )×× ××××ª× ×××)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>××××©× ×ת××× ××ר××ק × ×××ª× (××××× ×ש×××ת HTTP ×ס 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>×פע××× ××××קשת ×¢× ×ת××× ××ר××ק ×ס×ר×</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>×ת××× ××ר××ק ×× × ××¦× ×שרת (××××× ×ש×××ת HTTP ×ס' 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>×שרת ××ר××ק ×צר×× ××××× ××× ×שרת ×ת ×ת××× ×× ××רש××ת ×©× ××ª× × × ××× (×× ×××)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>×××§×©× ××××ª× ×¦×¨××× ×××ש×× ×©× ×ת, ×× ×××ר × ××©× ×××©× ×××××× ×©×× × ××ª× ××× ×קר×× ×©× ×ת ×ת ×× ×ª×× ×× ×©×××¢××</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>××שת ×רשת API ×× ××××× ××××¢× ×ת ×××§×©× ×××××× ×©×פר×××ק×× ××× × ×××ר</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>×פע××× ××××קשת ××× × ×ª×§×¤× ×¢××ר פר×××ק×× ××</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>×ת×××ª× ×©×××× ×××ª× ××××¢× ×קש××¨× ×רשת </translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>×ת×××ª× ×©×××× ×××ª× ××××¢× ×קש××¨× ×פר×קס×</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>×ת×××ª× ×©×××× ×××ª× ××××¢× ×קש××¨× ×ת××× ××ר××ק</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>×ת××× ×§×ק×× ×פר×××ק×× (ש×××ת ×ק××ק, תש×××ת ×××ª× ×ª×§×× ×ת ×× ×××ª× ×¦×¤×××ת, ×××')</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1335,6 +1577,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>×××צ×× × ×ש×...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>×××¦× ×ק×××¥ UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>××××¦× ×ס××...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>×××צ×× ××צע ××צ×××.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>×××צ×× × ×ש×.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>××צ×× ×- Sankore ×פ×ר×× UBX</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1421,6 +1690,10 @@
<source>Object informations</source>
<translation>××××¢ ×¢× ××××××ק×</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>××סף</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1503,6 +1776,14 @@
<source>Trash</source>
<translation>ס×</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>ס××× ××ת</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>××× ××¨× ×</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1536,6 +1817,22 @@
<source>Visible on Extended Screen</source>
<translation>× ××ª× ×ר×××ª× ×××¡× ×¨××</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>××סף פע×××</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>×סר ק×ש×ר ×ש××¢</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>×סר ק×ש×ר ×××£</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>×סר ק×ש×ר ×- URL ××× ××¨× ×</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1551,6 +1848,22 @@
<source>Go to Content Source</source>
<translation>×¢××ר ××ק×ר ×ת×××</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>××סף פע×××</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>×סר ק×ש×ר ×ש××¢</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>×סר ק×ש×ר ×××£</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>×סר ק×ש×ר ×- URL ×××× ××¨× ×</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1571,13 +1884,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>××× ××¨× ×</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1638,6 +1944,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (××¢×¨× ×ס××××) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1847,6 +2160,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>×ס×× ×¨××ש ××××¥</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>×ר×רת ××××</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>ער××ת</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>××××ר×ת</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>ק×××× ×ת</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>צ'××ת</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>×× ×ת</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>×ר×× ×ת</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>×××× ×ת</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>×× ×××ת</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>×× ×××ת ×©× ×ר××× ××</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>ספר××ת</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>צרפת×ת</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>צרפת×ת ×©× ×©××××¥</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>××××ק×ת</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>×¢×ר×ת</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>××¤× ×ת</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>ק×ר××× ×ת</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>×××ש×ת</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>× ×ר×××ת</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>×××× ××ת</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>פ××× ×ת</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>ר×××× ×©</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>ר××× ×ת</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>ר×ס×ת</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>ס×××ק×ת</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>ש××××ת</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>××רק×ת</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ס×× ×ת</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ס×× ×ת ××פש×ת</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>ס×× ×ת ×ס×רת×ת</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>ק×רס×ק××ת</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>××× ××ת</translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1888,6 +2337,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>×סר××× ×©××</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>× ××ª× ×ר×××ª× ××¤×¢× ××××</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2012,23 +2472,23 @@ Do you want to ignore these errors for this host?</source>
</message>
<message>
<source>Attribution-NoDerivs CC BY-ND</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-NoDerivs CC BY-ND</translation>
</message>
<message>
<source>Attribution-ShareAlike CC BY-SA</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-ShareAlike CC BY-SA</translation>
</message>
<message>
<source>Attribution-NonCommercial CC BY-NC</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-NonCommercial CC BY-NC</translation>
</message>
<message>
<source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</translation>
</message>
<message>
<source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
- <translation type="unfinished"></translation>
+ <translation>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</translation>
</message>
<message>
<source>Public domain</source>
@@ -2101,20 +2561,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>×××××</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>×ר×ס××</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>××£ ×××</translation>
</message>
<message>
- <source>Web</source>
- <translation>××× ××¨× ×</translation>
+ <source>Embed </source>
+ <translation>ש××¥</translation>
</message>
</context>
<context>
@@ -2207,11 +2663,11 @@ Please reboot the application to access the updated documents.</source>
</message>
<message>
<source>Open-Sankore</source>
- <translation type="unfinished"></translation>
+ <translation>Open-Sankore</translation>
</message>
<message>
<source>OpenSankore</source>
- <translation type="unfinished"></translation>
+ <translation>OpenSankore</translation>
</message>
</context>
<context>
@@ -2461,6 +2917,49 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>××ר ת××× ××××××</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>×©× ×××ש××</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>×××××ת ××צ×ר×ת</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>××פ××× ×× ×ת××× × ××¢××× ×¢× ××¤× ×××× ××¨× × ×× ×¤×צ×× ×××תר.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>× × ×ש××ר ×¢× ×××××ת ×××צר×× ×ש××צר×× ×§×ש×ר×× ×× ×××××× ×ª××× ××××× ××¨× ×.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>××ר×× ×ספר××</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>××ר×× ×××£ ×× ××××</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>××ספת ק×ש×ר ×ספר××</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>××ספת ק×ש×ר ×××£ ×× ××××</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download PDF Document: would you prefer to download the PDF file or add it to the current Sankore document?</source>
@@ -2532,6 +3031,10 @@ p, li { white-space: pre-wrap; }
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">By clicking 'Upload,' you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></source>
<translation></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>ש××ר ×רש××ת ×עת ×ת×××</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2716,22 +3219,10 @@ p, li { white-space: pre-wrap; }
<translation>רש××× ×ת</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>About</source>
<translation>××××ת</translation>
</message>
@@ -2787,10 +3278,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>ס×ס××:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>×©× ×××× ×פ×× ×ת Sankoré</translation>
- </message>
<message>
<source>User:</source>
<translation>×שת×ש: </translation>
@@ -2800,535 +3287,70 @@ p, li { white-space: pre-wrap; }
<translation>ס×ס××:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Credits</source>
<translation>×שר××</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>עצ×ת ××ת×××</translation>
+ </message>
+ <message>
+ <source>Show start up tips</source>
+ <translation>××¦× ×¢×¦×ת ××ת×××</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>שפ×</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>××ר שפ×</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>××©×¤× ××××©× ×ª×××¢× ×××ת××× ×××</translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>ס××ר ×ת Open-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ×××× ×××צ×× ×§×צ××</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>ש××ר ×רש××ת ×××× ××ת×××</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
<message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">×רש××× ×ת ××©×¤× ××× ×××ת ××× ×××× ×ת ×תר××× ×רש×× ×××××§× ××××שר</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_ja.ts b/Sankore-3.1/resources/i18n/sankore_ja.ts
index 8d66fe5..fc3e0a3 100644
--- a/Sankore-3.1/resources/i18n/sankore_ja.ts
+++ b/Sankore-3.1/resources/i18n/sankore_ja.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>ããã¯ãã¼ã¯</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>ããããã£ã¹ãã¬ã³ã¼ãã£ã³ã°è¨å® </translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>ãã©ãã·ã¥ãã©ãã</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>ãã©ãããã©ãã·ã¥ã³ã³ãã³ã</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>ã¦ã§ããã©ãã </translation>
</message>
@@ -728,14 +721,6 @@
<translation>ã¦ã£ã³ãã¦ããã£ããã£</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>ã¦ã§ãã³ã³ãã³ããåãè¾¼ã</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>åãè¾¼ã¿å¯è½ã¦ã§ãã³ã³ãã³ãããã£ããã£</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>ãã£ã¹ãã¬ã¤ä¸ã«è¡¨ç¤º</translation>
</message>
@@ -800,10 +785,6 @@
<translation>å¤ãSankoreæ¸é¡ãUniboardæ¸é¡ã移å
¥ãã</translation>
</message>
<message>
- <source>Group Items</source>
- <translation type="obsolete">ã¢ã¤ãã ãçºãã</translation>
- </message>
- <message>
<source>Group items</source>
<translation>ã¢ã¤ãã ãçºãã</translation>
</message>
@@ -825,7 +806,44 @@
</message>
<message>
<source>Group</source>
- <translation type="unfinished"></translation>
+ <translation>ã°ã«ã¼ã</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ã©ã¤ãã©ãªã«</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ãã¦ã³ãã¼ã</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>ã©ã¤ãã©ãªã«ãã¦ã³ãã¼ã</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ç¾å¨ã®ãã¼ã¸ã«</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ãã¦ã³ãã¼ã</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>ç¾å¨ã®ãã¼ã¸ã«ãã¦ã³ãã¼ã</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ã©ã¤ãã©ãªã«</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ãªã³ã¯ã追å </p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>ã©ã¤ãã©ãªã«ãªã³ã¯ã追å </translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ç¾å¨ã®ãã¼ã¸ã«</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ãªã³ã¯ã追å </p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>ç¾å¨ã®ãã¼ã¸ã«ãªã³ã¯ã追å </translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">ããã¯ãã¼ã¯</translation>
</message>
</context>
<context>
@@ -869,37 +887,20 @@
<context>
<name>QObject</name>
<message>
- <source>Trash</source>
- <comment>Pictures category element</comment>
- <translation type="obsolete">ã´ãç®±</translation>
- </message>
- <message>
- <source>/Home</source>
- <comment>Category list label on navigation tool bar</comment>
- <translation type="obsolete">/ãã¼ã </translation>
- </message>
- <message>
<source>Element ID = </source>
- <translation type="unfinished"></translation>
+ <translation>ã¨ã¬ã¡ã³ãã®ID = </translation>
</message>
<message>
<source>Content is not supported in destination format.</source>
- <translation type="unfinished"></translation>
+ <translation>ã³ã³ãã³ãã¯éãå
ã®ãã©ã¼ãããã§ã¯ãµãã¼ãããã¦ãã¾ããã</translation>
</message>
<message>
<source>Remove Page</source>
- <translation type="unfinished">ãã¼ã¸åé¤</translation>
+ <translation>ãã¼ã¸åé¤</translation>
</message>
<message>
<source>Are you sure you want to remove 1 page from the selected document '%0'?</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>UBAbstractWidget</name>
- <message>
- <source>Loading ...</source>
- <translation type="obsolete">ãã¼ãã£ã³ã°ä¸â¦ </translation>
+ <translation>é¸æããããã¥ã¡ã³ã '%0'ãã1ãã¼ã¸åé¤ãã¦ãããããã§ããï¼</translation>
</message>
</context>
<context>
@@ -964,23 +965,23 @@
</message>
<message>
<source>Group</source>
- <translation type="unfinished"></translation>
+ <translation>ã°ã«ã¼ãå</translation>
</message>
<message>
<source>Ungroup</source>
- <translation type="unfinished"></translation>
+ <translation>ã°ã«ã¼ã解é¤</translation>
</message>
<message>
<source>Delete page %1 from document</source>
- <translation type="unfinished"></translation>
+ <translation>ããã¥ã¡ã³ããããã¼ã¸ %1 ãåé¤</translation>
</message>
<message>
<source>Page %1 deleted</source>
- <translation type="unfinished"></translation>
+ <translation>ãã¼ã¸ %1 ãåé¤ããã¾ãã</translation>
</message>
<message>
<source>Add file operation failed: file copying error</source>
- <translation type="unfinished"></translation>
+ <translation>ãã¡ã¤ã«ã®è¿½å æä½ã«å¤±æï¼ãã¡ã¤ã«ã³ãã¼ã®ã¨ã©ã¼</translation>
</message>
</context>
<context>
@@ -1009,21 +1010,115 @@
<translation>å½¢ç¶ï¼ </translation>
</message>
<message>
- <source>Size:</source>
- <translation>ãµã¤ãºï¼ </translation>
+ <source>Alpha:</source>
+ <translation>ã¢ã«ãã¡ï¼</translation>
</message>
<message>
- <source>Close</source>
- <translation>éãã</translation>
+ <source>Geometry:</source>
+ <translation>å½¢ç¶ï¼</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>å¹
ï¼</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>é«ãï¼</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>æ¯çãç¶æ</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>ã¢ã¼ãï¼</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>ãã¬ãã¥ã¼ï¼</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>ãã£ãã·ã¥ãéãã</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
- <name>UBDesktopPalette</name>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><ã³ã³ãã³ãããããã></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>ç»åã¯è¨±å¯ããã¾ãã</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>ãã¼ã¿ã表示ã§ãã¾ãã</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>ããããããããã¡ã¤ã«ã¯é³å£°ãã¡ã¤ã«ã§ããã¨èªãããã¾ãã</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>é³å£°ãã¡ã¤ã«ãåç</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>ãã¼ã¸ã«ãªã³ã¯ã追å </translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>ã¦ã§ããã¼ã¸ã«ãªã³ã¯ã追å </translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>ã©ã¤ãã©ãªãããã®ããã¯ã¹ã«é³å£°ãã¡ã¤ã«ããã©ãã°&ãããã</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>次ã®ãã¼ã¸</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>åã®ãã¼ã¸</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>ã¿ã¤ãã«ãã¼ã¸</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>æå¾ã®ãã¼ã¸</translation>
+ </message>
<message>
- <source>Show Uniboard</source>
- <translation type="obsolete">Uniboard表示 </translation>
+ <source>Page Number</source>
+ <translation>ãã¼ã¸çªå·</translation>
</message>
<message>
+ <source>Insert url text here</source>
+ <translation>ããã«URLæååãæ¿å
¥</translation>
+ </message>
+</context>
+<context>
+ <name>UBDesktopPalette</name>
+ <message>
<source>Capture Part of the Screen</source>
<translation>ç»é¢ã®ä¸é¨ããã£ãã㣠</translation>
</message>
@@ -1045,7 +1140,7 @@
</message>
<message>
<source>Show Open-Sankore</source>
- <translation type="unfinished"></translation>
+ <translation>Open-Sankoreã表示</translation>
</message>
</context>
<context>
@@ -1083,42 +1178,6 @@
<translation>ãã¼ã¸åé¤</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>ããã¥ã¡ã³ãåé¤ </translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>æ¬å½ã«ããã¥ã¡ã³ã%1ãåé¤ãã¾ããï¼</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>ã´ãç®±ã空ã«ãã</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>æ¬å½ã«ãã®ã´ãç®±ã空ã«ãã¾ããï¼</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>ã´ãç®±ã空ã«ãã¦ãã¾ã</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>ã´ãç®±ã空ã«ãã¾ãã</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>ãã©ã«ãã¼ãåé¤</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>æ¬å½ã«ãã©ã«ãã¼%1ã¨ãã®ã³ã³ãã³ããåé¤ãã¾ããï¼</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>ããã¥ã¡ã³ããé¸æããã¦ãã¾ããï¼</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>ãµãã¼ãããããã¡ã¤ã«ãéã</translation>
</message>
@@ -1135,10 +1194,6 @@
<translation>ãã©ã«ãã¼ããå
¨ã¦ã®ç»åãã¤ã³ãã¼ã</translation>
</message>
<message>
- <source>Folder does not contain any image files!</source>
- <translation type="obsolete">ãã£ã«ãã¼ã«ã¯ç»åãã¡ã¤ã«ãå«ã¾ãã¦ãã¾ããï¼ </translation>
- </message>
- <message>
<source>Delete</source>
<translation>åé¤</translation>
</message>
@@ -1182,10 +1237,18 @@
</message>
<message>
<source>Untitled Documents</source>
- <translation type="unfinished">ã¿ã¤ãã«ãªãããã¥ã¡ã³ã</translation>
+ <translation>ç¡é¡ããã¥ã¡ã³ã</translation>
</message>
<message>
<source>Folder does not contain any image files</source>
+ <translation>ãã©ã«ãã«ã¯ç»åãã¡ã¤ã«ãå«ã¾ãã¦ãã¾ãã</translation>
+ </message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>ãã®æä½ã¯åãæ¶ãä¸å¯è½ã§ãï¼</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1216,28 +1279,20 @@
<translation>ãã¡ã¤ã«%1ä¿åæ¸ã¿ </translation>
</message>
<message>
- <source>Importing page %1 of %2</source>
- <translation type="obsolete"> %1 / %2 ãã¼ã¸ãã¤ã³ãã¼ã</translation>
- </message>
- <message>
- <source>Erronous image data, skipping file %1</source>
- <translation type="obsolete">ç»åãã¼ã¿ã¨ã©ã¼ããã¡ã¤ã«%1ãã¹ããã</translation>
- </message>
- <message>
<source>Inserting page %1 of %2</source>
- <translation type="unfinished"></translation>
+ <translation>%1 / %2ãã¼ã¸ãæ¿å
¥ä¸</translation>
</message>
<message>
<source>Import successful.</source>
- <translation type="unfinished">ã¤ã³ãã¼ãã«æåã</translation>
+ <translation>ã¤ã³ãã¼ãã«æåã</translation>
</message>
<message>
<source>Importing file %1</source>
- <translation type="unfinished"></translation>
+ <translation>ãã¡ã¤ã«%1ãã¤ã³ãã¼ãä¸</translation>
</message>
<message>
<source>Import of file %1 successful.</source>
- <translation type="unfinished"></translation>
+ <translation>ãã¡ã¤ã«%1ã®ã¤ã³ãã¼ãã«æåã</translation>
</message>
</context>
<context>
@@ -1283,6 +1338,58 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>æ¿èªãã</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>ç½®ãæãã</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>ãã£ã³ã»ã«</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>åå%1ã¯ãã§ã«ä½¿ç¨ããã¦ãã¾ãã
+ãã®ååã®ã¾ã¾ã«ããã¨ããã¥ã¡ã³ããç½®ãæãããã¾ãã
+æ°è¦ã®ååãä»ããã¨æ°è¦ã®ããã¥ã¡ã³ããä½æããã¾ãã</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>ãã¤ããã¥ã¡ã³ã</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>ãã³ãã¬ã¼ã</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>ãã¿ç®±</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>ç¡é¡ããã¥ã¡ã³ã</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">%1/%2 ãã¼ã¸ ã³ãã¼ä¸</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>ãã¼ã¸ã%1æãã³ãã¼ãã¾ãã</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1300,6 +1407,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>ãã¦ã³ãã¼ãã«å¤±æã</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>ãªã¢ã¼ããµã¼ãã¼ãæ¥ç¶ãæå¦ãã¾ããï¼ãµã¼ãã¼ã¯è¦æ±ãæ¿èªãã¦ãã¾ããï¼</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ãªã¢ã¼ããµã¼ãã¼ããå¿çãæå¾ã¾ã§åä¿¡ã»å¦çãããåã«æ¥ç¶ãéä¸ã§åæãã¾ãã</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>ãªã¢ã¼ããã¹ãåãè¦ã¤ããã¾ããã§ããï¼ãã¹ãåãç¡å¹ã§ãï¼</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>ãªã¢ã¼ããµã¼ãã¼ã¸ã®æ¥ç¶ãã¿ã¤ã ã¢ã¦ããã¾ãã</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>æä½ã¯çµäºåã«ä¸æ¢å¼ã³åºã() ã¾ãã¯çµäºå¼ã³åºã() çµç±ã§ãã£ã³ã»ã«ããã¾ããã</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>SSL/TLSã®ãã³ãã·ã§ã¤ã¯ã«å¤±æããæå·åãã£ã³ãã«ã確ç«ã§ãã¾ããã§ãããSSLã¨ã©ã¼() ã·ã°ãã«ãçºä¿¡ããã¦ããå¿
è¦ãããã¾ãã</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>ãããã¯ã¼ã¯ã¨ã®åæã§æ¥ç¶ãä¸æããã¾ããããã·ã¹ãã ã¯å¥ã®ã¢ã¯ã»ã¹ãã¤ã³ãã¸ã®ãã¼ãã³ã°ãéå§ãã¾ãããè¦æ±ã¯åéä¿¡ãããæ¥ç¶ãå復次第å¦çããã¾ãã</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>ãããã·ãµã¼ãã¼ã¸ã®æ¥ç¶ãæå¦ããã¾ããï¼ãããã·ãµã¼ãã¼ã¯è¦æ±ãæ¿èªãã¦ãã¾ããï¼</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ãããã·ãµã¼ãã¼ããå¿çãæå¾ã¾ã§åä¿¡ã»å¦çãããåã«æ¥ç¶ãéä¸ã§åæãã¾ãã</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>ãããã·ãµã¼ãã¼ã®ãã¹ãåãè¦ã¤ããã¾ããã§ããï¼ãã¹ãåãç¡å¹ã§ãï¼</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>ãããã·ãµã¼ãã¼ã¸ã®æ¥ç¶ãã¿ã¤ã ã¢ã¦ããããããããã·ãµã¼ãã¼ãéä¿¡ãããè¦æ±ã«æéå
ã«å¿çãã¾ããã§ãã</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>ãããã·ã¯è¦æ±ãå®è¡ããã®ã«èªè¨¼ãå¿
è¦ã§ãããæ示ããã¯ã¬ãã³ã·ã£ã«ï¼ãã£ãã¨ãã¦ãï¼ã¯æ¿èªããã¾ããã§ãã</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>ãªã¢ã¼ãã³ã³ãã³ãã¸ã®ã¢ã¯ã»ã¹ãæå¦ããã¾ããï¼HTTPã¨ã©ã¼401ã¨åæ§ï¼</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>ãªã¢ã¼ãã³ã³ãã³ãã§è¦æ±ããæä½ã¯è¨±å¯ããã¦ãã¾ãã</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>ãµã¼ãã¼ã§ãªã¢ã¼ãã³ã³ãã³ããè¦ã¤ããã¾ããã§ããï¼HTTPã¨ã©ã¼404ã¨åæ§ï¼</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>ãªã¢ã¼ããµã¼ãã¼ã¯ã³ã³ãã³ããæä¾ããã®ã«èªè¨¼ãå¿
è¦ã§ãããæ示ããã¯ã¬ãã³ã·ã£ã«ï¼ãã£ãã¨ãã¦ãï¼ã¯æ¿èªããã¾ããã§ãã</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>è¦æ±ã¯åéä¿¡ãå¿
è¦ã§ããããã¢ãããã¼ããã¼ã¿ã2度ç®ã«èªã¿è¾¼ã¾ããªãã£ããªã©ã®çç±ã§ããã«å¤±æãã¾ããã</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Network Access API ã¯ããããã³ã«ãä¸æãªããè¦æ±ãå®è¡ã§ãã¾ãã</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>è¦æ±ãããæä½ã¯ãã®ãããã³ã«ã«å¯¾ãã¦ç¡å¹ã§ã</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>ãããã¯ã¼ã¯é¢é£ã®ä¸æãªã¨ã©ã¼ãæ¤åºããã¾ãã</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>ãããã·é¢é£ã®ä¸æãªã¨ã©ã¼ãæ¤åºããã¾ãã</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>ãªã¢ã¼ãã³ã³ãã³ãé¢é£ã®ä¸æãªã¨ã©ã¼ãæ¤åºããã¾ãã</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>ãããã³ã«ã®ãã¬ã¼ã¯ãã¦ã³ãæ¤åºããã¾ããï¼æ§æã¨ã©ã¼ãç¡å¹ãªã¾ãã¯äºæããªãå¿çãªã©ï¼</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1314,7 +1520,7 @@
<name>UBExportAdaptor</name>
<message>
<source>Warnings during export was appeared</source>
- <translation type="unfinished"></translation>
+ <translation>ã¨ã¯ã¹ãã¼ãä¸ã«è¦åã表示ããã¾ãã</translation>
</message>
</context>
<context>
@@ -1368,6 +1574,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>ã¨ã¯ã¹ãã¼ãã«å¤±æ...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>UBXãã¡ã¤ã«ã¨ãã¦ã¨ã¯ã¹ãã¼ã</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>ããã¥ã¡ã³ããã¨ã¯ã¹ãã¼ãä¸...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>ã¨ã¯ã¹ãã¼ãã«æåã</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>ã¨ã¯ã¹ãã¼ãã«å¤±æã</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Sankore UBXãã©ã¼ãããã¸ã¨ã¯ã¹ãã¼ã</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1454,6 +1687,10 @@
<source>Object informations</source>
<translation>ãªãã¸ã§ã¯ãã¤ã³ãã©ã¼ã¡ã¼ã·ã§ã³</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>追å </translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1498,76 +1735,100 @@
</message>
<message>
<source>Audios</source>
- <translation type="unfinished">ãªã¼ãã£ãª</translation>
+ <translation>ãªã¼ãã£ãª</translation>
</message>
<message>
<source>Movies</source>
- <translation type="unfinished">ã ã¼ãã¼</translation>
+ <translation>ã ã¼ãã¼</translation>
</message>
<message>
<source>Pictures</source>
- <translation type="unfinished">åç</translation>
+ <translation>åç</translation>
</message>
<message>
<source>Animations</source>
- <translation type="unfinished">åç»</translation>
+ <translation>åç»</translation>
</message>
<message>
<source>Interactivities</source>
- <translation type="unfinished">ã¤ã³ã¿ã©ã¯ãã£ã</translation>
+ <translation>ã¤ã³ã¿ã©ã¯ãã£ã</translation>
</message>
<message>
<source>Applications</source>
- <translation type="unfinished">ã¢ããªã±ã¼ã·ã§ã³</translation>
+ <translation>ã¢ããªã±ã¼ã·ã§ã³</translation>
</message>
<message>
<source>Shapes</source>
- <translation type="unfinished">å½¢ç¶</translation>
+ <translation>å½¢ç¶</translation>
</message>
<message>
<source>Favorites</source>
- <translation type="unfinished"></translation>
+ <translation>ãæ°ã«å
¥ã</translation>
</message>
<message>
<source>Web search</source>
- <translation type="unfinished"></translation>
+ <translation>ã¦ã§ãæ¤ç´¢</translation>
</message>
<message>
<source>Trash</source>
- <translation type="unfinished">ã´ãç®±</translation>
+ <translation>ãã¿ç®±</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>ããã¯ãã¼ã¯</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>ã¦ã§ã</translation>
</message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
<message>
<source>Accept</source>
- <translation type="unfinished"></translation>
+ <translation>æ¿èªãã</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">ãã£ã³ã»ã«</translation>
+ <translation>ãã£ã³ã»ã«</translation>
</message>
<message>
<source>Enter a new folder name</source>
- <translation type="unfinished"></translation>
+ <translation>æ°è¦ãã©ã«ãåãå
¥å</translation>
</message>
</context>
<context>
<name>UBFeaturesProgressInfo</name>
<message>
<source>Loading </source>
- <translation type="unfinished"></translation>
+ <translation>ãã¼ãä¸</translation>
</message>
</context>
<context>
<name>UBGraphicsGroupContainerItemDelegate</name>
<message>
<source>Locked</source>
- <translation type="unfinished">ããã¯</translation>
+ <translation>ããã¯</translation>
</message>
<message>
<source>Visible on Extended Screen</source>
- <translation type="unfinished">æ¡å¼µç»é¢ã§ã¿ããã¨ãã§ãã¾ã </translation>
+ <translation>æ¡å¼µç»é¢ã§ã¿ããã¨ãã§ãã¾ã</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation>æä½ã追å </translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>ãªã¼ãã£ãªã¸ã®ãªã³ã¯ãåé¤</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>ãã¼ã¸ã¸ã®ãªã³ã¯ãåé¤</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>ã¦ã§ãURLã¸ã®ãªã³ã¯ãåé¤</translation>
</message>
</context>
<context>
@@ -1584,6 +1845,22 @@
<source>Go to Content Source</source>
<translation>ã³ã³ãã³ãã®ã½ã¼ã¹ã¸ç§»å </translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>æä½ã追å </translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>ãªã¼ãã£ãªã¸ã®ãªã³ã¯ãåé¤</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>ãã¼ã¸ã¸ã®ãªã³ã¯ãåé¤</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>ã¦ã§ãURLã¸ã®ãªã³ã¯ãåé¤</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1604,17 +1881,10 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation type="unfinished">ã¦ã§ã</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
- <translation type="unfinished">ãã¼ãã£ã³ã°ä¸â¦ </translation>
+ <translation>ãã¼ãä¸...</translation>
</message>
</context>
<context>
@@ -1671,19 +1941,18 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankoreï¼ããã¥ã¡ã³ãã»ããï¼(*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
<translation>ç»åãã©ã¼ãããï¼</translation>
</message>
- <message>
- <source>Image import failed.</source>
- <translation type="obsolete">ç»åã¤ã³ãã¼ãã«å¤±æ </translation>
- </message>
- <message>
- <source>Image import successful.</source>
- <translation type="obsolete">ç»åã¤ã³ãã¼ãã«æå </translation>
- </message>
</context>
<context>
<name>UBImportPDF</name>
@@ -1699,10 +1968,6 @@
<source>Importing page %1 of %2</source>
<translation>%1 / %2 ãã¼ã¸ãã¤ã³ãã¼ã</translation>
</message>
- <message>
- <source>PDF import successful.</source>
- <translation type="obsolete">PDFã¤ã³ãã¼ãã«æå</translation>
- </message>
</context>
<context>
<name>UBIntranetPodcastPublisher</name>
@@ -1726,121 +1991,7 @@
<name>UBKeyboardPalette</name>
<message>
<source>Enter</source>
- <translation>Enter</translation>
- </message>
-</context>
-<context>
- <name>UBLibActionBar</name>
- <message>
- <source>Add to favorites</source>
- <translation type="obsolete">ãæ°ã«å
¥ãã«è¿½å </translation>
- </message>
- <message>
- <source>Share</source>
- <translation type="obsolete">ã·ã§ã¢ãã</translation>
- </message>
- <message>
- <source>Search</source>
- <translation type="obsolete">æ¤ç´¢</translation>
- </message>
- <message>
- <source>Delete</source>
- <translation type="obsolete">åé¤</translation>
- </message>
- <message>
- <source>Back to folder</source>
- <translation type="obsolete">ãã©ã«ãã¼ã«æ»ã</translation>
- </message>
- <message>
- <source>Remove from favorites</source>
- <translation type="obsolete">ãæ°ã«å
¥ãããåé¤</translation>
- </message>
- <message>
- <source>Create new folder</source>
- <translation type="obsolete">æ°è¦ãã©ã«ãã¼ãä½æ</translation>
- </message>
-</context>
-<context>
- <name>UBLibItemProperties</name>
- <message>
- <source>Add to page</source>
- <translation type="obsolete">ãã¼ã¸ã«è¿½å </translation>
- </message>
- <message>
- <source>Set as background</source>
- <translation type="obsolete">èæ¯ã¨ãã¦è¨å®</translation>
- </message>
- <message>
- <source>Add to library</source>
- <translation type="obsolete">ã©ã¤ãã©ãªã«è¿½å </translation>
- </message>
- <message>
- <source>Object informations</source>
- <translation type="obsolete">ãªãã¸ã§ã¯ãã¤ã³ãã©ã¼ã¡ã¼ã·ã§ã³</translation>
- </message>
-</context>
-<context>
- <name>UBLibraryController</name>
- <message>
- <source>Added 1 Image to Library</source>
- <translation type="obsolete">ã©ã¤ãã©ãªã«1ç»å追å </translation>
- </message>
- <message>
- <source>Audios</source>
- <comment>Audio category element</comment>
- <translation type="obsolete">ãªã¼ãã£ãª</translation>
- </message>
- <message>
- <source>Movies</source>
- <comment>Movies category element</comment>
- <translation type="obsolete">ã ã¼ãã¼</translation>
- </message>
- <message>
- <source>Pictures</source>
- <comment>Pictures category element</comment>
- <translation type="obsolete">åç</translation>
- </message>
- <message>
- <source>Shapes</source>
- <comment>Shapes category element</comment>
- <translation type="obsolete">å½¢ç¶</translation>
- </message>
- <message>
- <source>Applications</source>
- <comment>Applications category element</comment>
- <translation type="obsolete">ã¢ããªã±ã¼ã·ã§ã³</translation>
- </message>
- <message>
- <source>Favorite</source>
- <comment>Favorite category element</comment>
- <translation type="obsolete">ãæ°ã«å
¥ã</translation>
- </message>
- <message>
- <source>Creating image thumbnail for %1.</source>
- <translation type="obsolete">%1ã®ãµã ãã¤ã«ç»åãä½æ</translation>
- </message>
- <message>
- <source>Adding to page failed for item %1.</source>
- <translation type="obsolete">%1ã®ãã¼ã¸ã¸ã®è¿½å ã«å¤±æ </translation>
- </message>
- <message>
- <source>Interactivities</source>
- <comment>Interactives category element</comment>
- <translation type="obsolete">ã¤ã³ã¿ã©ã¯ãã£ã</translation>
- </message>
- <message>
- <source>ImportedImage</source>
- <translation type="obsolete">ã¤ã³ãã¼ããããç»å</translation>
- </message>
- <message>
- <source>Animations</source>
- <comment>Animations category element</comment>
- <translation type="obsolete">åç»</translation>
- </message>
- <message>
- <source>Web Search</source>
- <comment>Web search category element</comment>
- <translation type="obsolete">ã¦ã¨ãã«çµé¨ãã</translation>
+ <translation>Enter</translation>
</message>
</context>
<context>
@@ -1862,7 +2013,7 @@
<name>UBMessagesDialog</name>
<message>
<source>Close</source>
- <translation type="unfinished">éãã</translation>
+ <translation>éãã</translation>
</message>
</context>
<context>
@@ -1902,25 +2053,6 @@ Do you want to ignore these errors for this host?</source>
</message>
</context>
<context>
- <name>UBNewFolderDlg</name>
- <message>
- <source>Add new folder</source>
- <translation type="obsolete">æ°è¦ãã©ã«ãã¼è¿½å </translation>
- </message>
- <message>
- <source>New Folder name:</source>
- <translation type="obsolete">æ°è¦ãã©ã«ãã¼åï¼ </translation>
- </message>
- <message>
- <source>Add</source>
- <translation type="obsolete">追å </translation>
- </message>
- <message>
- <source>Cancel</source>
- <translation type="obsolete">ãã£ã³ã»ã«</translation>
- </message>
-</context>
-<context>
<name>UBPersistenceManager</name>
<message>
<source>(copy)</source>
@@ -2031,6 +2163,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>æå§æ§ãã¼ã«ã¼</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>ããã©ã«ã</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>ã¢ã©ãã¢èª</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>ãã«ã¬ãªã¢èª</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>ã«ã¿ããã¢èª</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>ãã§ã³èª</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>ãã³ãã¼ã¯èª</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>ãã¤ãèª</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>ã®ãªã·ã£èª</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>è±èª</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>ã¤ã®ãªã¹è±èª</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>ã¹ãã¤ã³èª</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>ãã©ã³ã¹èª</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>ã¹ã¤ã¹ã®ãã©ã³ã¹èª</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>ã¤ã¿ãªã¢èª</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>ããã©ã¤èª</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>æ¥æ¬èª</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>éå½èª</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>ããã¬ã¹ã«ã«èª</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>ãã«ã¦ã§ã¼èª</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>ãªã©ã³ãèª</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>ãã¼ã©ã³ãèª</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>ããã³ã·ã¥èª</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>ã«ã¼ããã¢èª</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>ãã·ã¢èª</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>ã¹ãããã¢èª</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>ã¹ã¦ã§ã¼ãã³èª</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>ãã«ã³èª</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ä¸å½èª</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ç°¡ä½åä¸å½èª</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>ç¹ä½åä¸å½èª</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>ã³ã«ã·ã«èª</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>ãã³ãã£ã¼èª</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -2069,16 +2337,19 @@ Do you want to ignore these errors for this host?</source>
<context>
<name>UBSettings</name>
<message>
- <source>Untitled Documents</source>
- <translation type="obsolete">ã¿ã¤ãã«ãªãããã¥ã¡ã³ã</translation>
+ <source>My Movies</source>
+ <translation>ãã¤ã»ã ã¼ãã¼ </translation>
</message>
<message>
- <source>Trash</source>
- <translation type="obsolete">ã´ãç®±</translation>
+ <source>/Web</source>
+ <translation>/ã¦ã§ã</translation>
</message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
<message>
- <source>My Movies</source>
- <translation>ãã¤ã»ã ã¼ãã¼ </translation>
+ <source>Visible next time</source>
+ <translation>次åãã表示</translation>
</message>
</context>
<context>
@@ -2295,14 +2566,14 @@ Do you want to ignore these errors for this host?</source>
</message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>ãã¼ã¸å
¨ä½</translation>
</message>
<message>
- <source>Web</source>
- <translation>ã¦ã§ã</translation>
+ <source>Embed </source>
+ <translation>åãè¾¼ã¿</translation>
</message>
</context>
<context>
@@ -2359,13 +2630,6 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
- <name>UBW3CWidget</name>
- <message>
- <source>Web</source>
- <translation type="obsolete">ã¦ã§ã</translation>
- </message>
-</context>
-<context>
<name>UBWebPluginWidget</name>
<message>
<source>Loading...</source>
@@ -2402,11 +2666,11 @@ Please reboot the application to access the updated documents.</source>
</message>
<message>
<source>Open-Sankore</source>
- <translation type="unfinished"></translation>
+ <translation>Open-Sankore</translation>
</message>
<message>
<source>OpenSankore</source>
- <translation type="unfinished"></translation>
+ <translation>OpenSankore</translation>
</message>
</context>
<context>
@@ -2656,6 +2920,53 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>ã³ã³ãã³ããé¸æãã¦ãã©ããï¼</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>ã¢ããªã±ã¼ã·ã§ã³å</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>å¶éããã³å
責äºé
ã</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>ãã®æ©è½ã¯æãä¸è¬çãªã¦ã§ããã¼ã¸ã§ä½åããããéçºããã¦ãã¾ãã</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>ãªã³ã¯ãä½æãããã¦ã§ãããã³ã³ãã³ãããã©ããããå ´åã¯èä½æ¨©ãéµå®ãã¦ãã ããã</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>ã©ã¤ãã©ãªã«
+ãã¦ã³ãã¼ã</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>ç¾å¨ã®ãã¼ã¸ã«
+ãã¦ã³ãã¼ã</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>ã©ã¤ãã©ãªã«
+ãªã³ã¯ã追å </translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>ç¾å¨ã®ãã¼ã¸ã«
+ãªã³ã¯ã追å </translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2729,7 +3040,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>åèµ·åæã«ã¯ã¬ãã³ã·ã£ã«ã復å
</translation>
</message>
</context>
<context>
@@ -2927,22 +3238,10 @@ p, li { white-space: pre-wrap; }
<translation>ã©ã¤ã»ã³ã¹</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>ãªã¼ãã³SSl </translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib </translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf </translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip </translation>
- </message>
- <message>
<source>Network</source>
<translation>ãããã¯ã¼ã¯</translation>
</message>
@@ -2986,10 +3285,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>ãã¹ã¯ã¼ãï¼</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">Planète Sankoréã®ID</translation>
- </message>
<message>
<source>User:</source>
<translation>å©ç¨è
ï¼</translation>
@@ -2999,543 +3294,70 @@ p, li { white-space: pre-wrap; }
<translation>ãã¹ã¯ã¼ãï¼</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
+ <source>Credits</source>
<translation></translation>
</message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>ãã¡ã¤ã«ãã¨ã¯ã¹ãã¼ãããããã®Planète Sankoré ID</translation>
+ </message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation></translation>
+ <source>Restore credentials on reboot </source>
+ <translation>åèµ·åæã«ã¯ã¬ãã³ã·ã£ã«ã復å
</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation></translation>
+ <source>Start up tips</source>
+ <translation>èµ·åã«é¢ãããã³ã</translation>
</message>
<message>
- <source>Credits</source>
- <translation></translation>
+ <source>Show start up tips</source>
+ <translation>èµ·åã«é¢ãããã³ãã表示</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <message>
+ <source>Language</source>
+ <translation>è¨èª</translation>
</message>
<message>
- <source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <source>Select a language</source>
+ <translation>è¨èªãé¸æ</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>æ°ããè¨èªã¯ã次åã®èµ·åæã«ãã¼ãããã¾ã</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Open-Sankoréãéãã</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
- <translation type="unfinished"></translation>
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
+<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
+<tr>
+<td style="border: none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">ã©ã¤ã»ã³ã¹ã¯ãæ³çã«æå¹ãªå
¬å¼ç¿»è¨³ã«åºã¥ãã¦è±èªã§è¨è¼ããã¦ãã¾ãã</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_ko.ts b/Sankore-3.1/resources/i18n/sankore_ko.ts
index 2e2d5d8..14d5e83 100644
--- a/Sankore-3.1/resources/i18n/sankore_ko.ts
+++ b/Sankore-3.1/resources/i18n/sankore_ko.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>ë¶ë§í¬</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>íìºì¤í¸ ë ì½ë© ì¤ì </translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>íëì í¸ë©</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>íëì ì½í
ì¸ í¸ë©</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>ì¹ í¸ë©</translation>
</message>
@@ -728,14 +721,6 @@
<translation>ì°½ 캡ì²í기</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>ì¹ ì½í
ì¸ í¬í¨</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>í¬í¨ ê°ë¥í ì¹ ì½í
ì¸ ìº¡ì²</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>ëì¤íë ì´ì ë³´ì´ê¸°</translation>
</message>
@@ -769,59 +754,96 @@
</message>
<message utf8="true">
<source>Open-Sankoré</source>
- <translation type="unfinished">Open-Sankoré</translation>
+ <translation>Open-Sankoré</translation>
</message>
<message utf8="true">
<source>Quit Open-Sankoré</source>
- <translation type="unfinished">Open-Sankoré ì¢
ë£</translation>
+ <translation>Open-Sankoré ì¢
ë£</translation>
</message>
<message utf8="true">
<source>Open-Sankoré Editor</source>
- <translation type="unfinished">Open-Sankoré í¸ì§ê¸°</translation>
+ <translation>Open-Sankoré í¸ì§ê¸°</translation>
</message>
<message utf8="true">
<source>Show Open-Sankoré Widgets Editor</source>
- <translation type="unfinished">Open-Sankoré ìì ¯ í¸ì§ê¸° íì</translation>
+ <translation>Open-Sankoré ìì ¯ í¸ì§ê¸° íì</translation>
</message>
<message utf8="true">
<source>Hide Open-Sankoré</source>
- <translation type="unfinished">Open-Sankoré ì¨ê¸°ê¸°</translation>
+ <translation>Open-Sankoré ì¨ê¸°ê¸°</translation>
</message>
<message utf8="true">
<source>Hide Open-Sankoré Application</source>
- <translation type="unfinished">Open-Sankoré ìì© íë¡ê·¸ë¨ ì¨ê¸°ê¸°</translation>
+ <translation>Open-Sankoré ìì© íë¡ê·¸ë¨ ì¨ê¸°ê¸°</translation>
</message>
<message>
<source>Import Uniboard Documents</source>
- <translation type="unfinished">ì ëë³´ë 문ì ê°ì ¸ì¤ê¸°</translation>
+ <translation>ì ëë³´ë 문ì ê°ì ¸ì¤ê¸°</translation>
</message>
<message>
<source>Import old Sankore or Uniboard documents</source>
- <translation type="unfinished">기존 Sankore ëë ì ëë³´ë 문ì ê°ì ¸ì¤ê¸°</translation>
+ <translation>기존 Sankore ëë ì ëë³´ë 문ì ê°ì ¸ì¤ê¸°</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>
<message>
<source>Group</source>
- <translation type="unfinished">그룹í</translation>
+ <translation>그룹</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ë¤ì´ë¡ë ìì¹:</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ë¼ì´ë¸ë¬ë¦¬</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>ë¼ì´ë¸ë¬ë¦¬ì ë¤ì´ë¡ë</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ë¤ì´ë¡ë ìì¹:</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">íì¬ íì´ì§</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>íì¬ íì´ì§ì ë¤ì´ë¡ë</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ë§í¬ ì¶ê° ìì¹:</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ë¼ì´ë¸ë¬ë¦¬</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>ë¼ì´ë¸ë¬ë¦¬ì ë§í¬ ì¶ê°</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ë§í¬ ì¶ê° ìì¹:</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">íì¬ íì´ì§</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>íì¬ íì´ì§ì ë§í¬ ì¶ê°</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">ë¶ë§í¬</translation>
</message>
</context>
<context>
@@ -866,19 +888,19 @@
<name>QObject</name>
<message>
<source>Element ID = </source>
- <translation type="unfinished">ìì ID = </translation>
+ <translation>ìì ID = </translation>
</message>
<message>
<source>Content is not supported in destination format.</source>
- <translation type="unfinished">ëì íìì¼ë¡ ì§ìëì§ ìë ì½í
ì¸ ì
ëë¤.</translation>
+ <translation>ëì íìì¼ë¡ ì§ìëì§ ìë ì½í
ì¸ ì
ëë¤.</translation>
</message>
<message>
<source>Remove Page</source>
- <translation type="unfinished">íì´ì§ ì ê±°</translation>
+ <translation>íì´ì§ ì ê±°</translation>
</message>
<message>
<source>Are you sure you want to remove 1 page from the selected document '%0'?</source>
- <translation type="unfinished">ì íí 문ì '%0'ìì 1íì´ì§ë¥¼ ì ê±°íìê² ìµëê¹?</translation>
+ <translation>ì íí 문ì '%0'ìì 1íì´ì§ë¥¼ ì ê±°íìê² ìµëê¹?</translation>
</message>
</context>
<context>
@@ -943,23 +965,23 @@
</message>
<message>
<source>Delete page %1 from document</source>
- <translation type="unfinished">문ììì %1íì´ì§ ìì </translation>
+ <translation>문ììì %1íì´ì§ ìì </translation>
</message>
<message>
<source>Page %1 deleted</source>
- <translation type="unfinished">%1íì´ì§ ìì ë¨</translation>
+ <translation>%1íì´ì§ ìì ë¨</translation>
</message>
<message>
<source>Add file operation failed: file copying error</source>
- <translation type="unfinished">íì¼ ì¶ê° ìì
ì¤í¨: íì¼ì ë³µì¬íë ëì¤ ì¤ë¥ ë°ì</translation>
+ <translation>íì¼ ì¶ê° ìì
ì¤í¨: íì¼ì ë³µì¬íë ëì¤ ì¤ë¥ ë°ì</translation>
</message>
<message>
<source>Group</source>
- <translation type="unfinished">그룹í</translation>
+ <translation>그룹</translation>
</message>
<message>
<source>Ungroup</source>
- <translation type="unfinished">그룹 í´ì </translation>
+ <translation>그룹 í´ì </translation>
</message>
</context>
<context>
@@ -970,7 +992,7 @@
</message>
<message>
<source>CapturedImage</source>
- <translation type="unfinished">캡ì²í ì´ë¯¸ì§</translation>
+ <translation>캡ì²ì´ë¯¸ì§</translation>
</message>
</context>
<context>
@@ -988,12 +1010,110 @@
<translation>모ì:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>í¬ê¸°:</translation>
+ <source>Alpha:</source>
+ <translation>ìí:</translation>
</message>
<message>
- <source>Close</source>
- <translation>ë«ê¸°</translation>
+ <source>Geometry:</source>
+ <translation>ëí:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>ëë¹:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>ëì´:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>ë¹ì¨ ì ì§</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>모ë:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>미리보기:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>ìºì ë«ê¸°</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><drop content></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>ì´ë¯¸ì§ê° íë½ëì§ ìììµëë¤</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>ë°ì´í° íì ë¶ê°</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>ëë¡í íì¼ì ì¤ëì¤ íì¼ì´ ìëëë¤</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>ì¤ëì¤ íì¼ ì¬ì</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>íì´ì§ì ë§í¬ ì¶ê°</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>ì¹ íì´ì§ì ë§í¬ ì¶ê°</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>ë¼ì´ë¸ë¬ë¦¬ìì ì´ ììë¡ ì¤ëì¤ íì¼ ëì´ë¤ ë기</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>íì¸</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>ë¤ì íì´ì§</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>ì´ì íì´ì§</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>ì 목 íì´ì§</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>ë§ì§ë§ íì´ì§</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>íì´ì§ ë²í¸</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>ì¬ê¸°ì url í
ì¤í¸ ì½ì
</translation>
</message>
</context>
<context>
@@ -1020,7 +1140,7 @@
</message>
<message>
<source>Show Open-Sankore</source>
- <translation type="unfinished">Open-Sankore íì</translation>
+ <translation>Open-Sankore íì</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>íì´ì§ ì ê±°</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>문ì ì ê±°</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>ì ë§ë¡ '%1' 문ì를 ì ê±°íìê² ìµëê¹?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>í´ì§íµ ë¹ì°ê¸°</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>ì ë§ë¡ í´ì§íµì ë¹ì°ìê² ìµëê¹?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>í´ì§íµ ë¹ì°ë ì¤</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>í´ì§íµ ë¹ì°ê¸° ìë£</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>í´ë ì ê±°</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>ì ë§ë¡ '%1' í´ëì í´ë¹ ë´ì©ì 모ë ì ê±°íìê² ìµëê¹?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>ì íë 문ìê° ììµëë¤!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>ì§ìëë íì¼ ì´ê¸°</translation>
</message>
@@ -1143,21 +1227,29 @@
</message>
<message numerus="yes">
<source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
- <translation type="unfinished">
+ <translation>
<numerusform>ì íí 문ì '%1'ìì %níì´ì§ë¥¼ ì ê±°íìê² ìµëê¹?</numerusform>
</translation>
</message>
<message>
<source>Title page</source>
- <translation type="unfinished">ì 목 íì´ì§</translation>
+ <translation>ì 목 íì´ì§</translation>
</message>
<message>
<source>Folder does not contain any image files</source>
- <translation type="unfinished">í´ëì ì´ë¯¸ì§ íì¼ì´ ììµëë¤</translation>
+ <translation>í´ëì ì´ë¯¸ì§ íì¼ì´ ììµëë¤</translation>
</message>
<message>
<source>Untitled Documents</source>
- <translation type="unfinished">무ì 문ì</translation>
+ <translation>ì 목ìë 문ì</translation>
+ </message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>ëì´í¬ ì ìë íëì
ëë¤!</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1188,19 +1280,19 @@
</message>
<message>
<source>Inserting page %1 of %2</source>
- <translation type="unfinished">%1/%2íì´ì§ ì½ì
ì¤</translation>
+ <translation>%1/%2íì´ì§ ì½ì
ì¤</translation>
</message>
<message>
<source>Import successful.</source>
- <translation type="unfinished">ê°ì ¸ì¤ê¸° ìë£.</translation>
+ <translation>ê°ì ¸ì¤ê¸° ìë£.</translation>
</message>
<message>
<source>Import of file %1 successful.</source>
- <translation type="unfinished">%1 íì¼ ê°ì ¸ì¤ê¸° ìë£.</translation>
+ <translation>%1 íì¼ ê°ì ¸ì¤ê¸° ìë£.</translation>
</message>
<message>
<source>Importing file %1</source>
- <translation type="unfinished">%1 íì¼ ê°ì ¸ì¤ë ì¤</translation>
+ <translation>%1 íì¼ ê°ì ¸ì¤ë ì¤</translation>
</message>
</context>
<context>
@@ -1211,7 +1303,7 @@
</message>
<message>
<source>Title page</source>
- <translation type="unfinished">ì 목 íì´ì§</translation>
+ <translation>ì 목 íì´ì§</translation>
</message>
</context>
<context>
@@ -1246,6 +1338,58 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>íì©</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>ëì²´</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>ì·¨ì</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>ì 목 ì´ë¦ %1(ì)ë ì´ë¯¸ ì¬ì©ì¤ì
ëë¤.
+ì´ ì´ë¦ì ê³ì ì¬ì©íë©´ 문ìê° ëì²´ë©ëë¤.
+ì ì´ë¦ì ì ê³µíë©´ ìë¡ì´ 문ìê° ìì±ë©ëë¤.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>ë´ ë¬¸ì</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>모ë¸</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>í´ì§íµ</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>ì 목ìë 문ì</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">%1/%2 íì´ì§ ë³µì¬ ì¤</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1íì´ì§ ë³µì¬ë¨</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1257,53 +1401,149 @@
</message>
<message numerus="yes">
<source>%1 pages copied</source>
- <translation type="unfinished">
- <numerusform variants="yes">
- <lengthvariant>%1 íì´ì§ ë³µì¬ë¨</lengthvariant>
- <lengthvariant></lengthvariant>
- </numerusform>
+ <translation>
+ <numerusform>%1íì´ì§ ë³µì¬ë¨</numerusform>
</translation>
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>ë¤ì´ë¡ë ì¤í¨.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>ì격 ìë²ê° ì°ê²°ì ê±°ì íìµëë¤ (ìë²ê° ìì²ì íë½íì§ ììµëë¤)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ì ì²´ ëµë³ì´ ìë ¹ëê³ ì²ë¦¬ë기 ì ì, ì격 ìë²ê° ì°ê²°ì ì구ì ì¼ë¡ ì¢
ë£íìµëë¤</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>ì격 í¸ì¤í¸ ì´ë¦ì ì°¾ì ì ììµëë¤(ì못ë í¸ì¤í¸ ì´ë¦)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>ì격 ìë² ì°ê²° ìê°ì´ ë§ê°ëììµëë¤</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>ìë£ë기 ì ì ì¤ë¨t() ëë ë«ê¸°() ëª
ë ¹ì íµí´ ìëì´ ì·¨ìëììµëë¤.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation> SSL/TLS ì
ìê° ì¤í¨íìê³ ìí¸íë ì±ëì´ êµ¬ì±ëì§ ìììµëë¤. sslErrors() ì í¸ê° ë°ì¡ëìì ê²ì
ëë¤.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>ì°ê²°ì´ ë¤í¸ìí¬ìì ë¶ë¦¬ëì´ ëê²¼ìµëë¤, ê·¸ë¬ë ìì¤í
ì´ ë¤ë¥¸ ì¡ì¸ì¤ í¬ì¸í¸ë¡ ë¡ë°ì ììíìµëë¤. ìì²ì ë¤ì ì ì¶í´ì¼íë©° ë¤ì ì°ê²°ì´ ëìë§ì ì²ë¦¬ë ê²ì
ëë¤.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>íë¡ì ìë²ê° ì°ê²°ì ê±°ì íìµëë¤ (íë¡ì ìë²ê° ìì²ì íë½íì§ ììµëë¤)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ì ì²´ ëµë³ì´ ìë ¹ëê³ ì²ë¦¬ë기 ì ì, íë¡ì ìë²ê° ì°ê²°ì ì구ì ì¼ë¡ ì¢
ë£íìµëë¤</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>íë¡ì í¸ì¤í¸ ì´ë¦ì ì°¾ì ì ììµëë¤(ì못ë íë¡ì í¸ì¤í¸ ì´ë¦)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>íë¡ì ìë² ì°ê²°ìê°ì´ ë§ë£ëìê±°ë íë¡ìê° ë°ì¡ë ìì²ì ìê° ë´ì ëµë³íì§ ìììµëë¤</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>íë¡ìë ìì²ì ë°ê¸° ìí´ ì¸ì¦ì´ íìíì§ë§ ì ê³µí ì´ë¤ ì격 ì¦ëª
ë íë½íì§ ìììµëë¤(í´ë¹ëë ê²½ì°)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>ì격 컨í
ì¸ ì ëí ì¡ì¸ì¤ê° ê±°ì ëììµëë¤ ( HTTP ì¤ë¥ 401ê³¼ ì ì¬)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>ì격 컨í
ì¸ ì ëí ìì²í ìëì íë½ëì§ ììµëë¤</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>ìë²ìì ì격 컨í
ì¸ ë¥¼ ì°¾ì ì ììµëë¤ ( HTTP ì¤ë¥ 404ì ì ì¬)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>ì격 ìë²ë 컨í
ì¸ ë¥¼ ì ê³µí기 ìí´ ì¸ì¦ì´ íìíì§ë§ ì ê³µí ì격 ì¦ëª
ì íë½íì§ ìììµëë¤ (í´ë¹ëë ê²½ì°)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>ìì²ì ì¬ë°ì¡í´ì¼ í©ëë¤, ì´ë ì를 ë¤ì´ ì
ë¡ë ë°ì´í°ë¥¼ ë ë²ì§¸ ì½ì ì ìì´ì ì¤í¨íìµëë¤.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>ìì ìë íë¡í ì½ì´ì´ì ë¤í¸ìí¬ ì¡ì¸ì¤ APIê° ìì²ì ë°ì ì ììµëë¤</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>ìì²í ìì
ì ì´ íë¡í ì½ì ì í¨íì§ ììµëë¤</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>ì ì ìë ë¤í¸ìí¬ ê´ë ¨ ì¤ë¥ê° ê°ì§ëììµëë¤</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>ì ì ìë íë¡ì ê´ë ¨ ì¤ë¥ê° ê°ì§ëììµëë¤</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>ì격 컨í
ì¸ ê´ë ¨ë ì ì ìë ì¤ë¥ê° ê°ì§ëììµëë¤</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>íë¡í ì½ì ê³ ì¥ì´ ê°ì§ëììµëë¤ (íì± ì¤ë¥, ì못ë ëë ììì¹ ëª»í ë°ì ë±)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
- <translation type="unfinished">íì¼ ë¤ì´ë¡ë ì¤</translation>
+ <translation>íì¼ ë¤ì´ë¡ë ì¤</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">ì·¨ì</translation>
+ <translation>ì·¨ì</translation>
</message>
</context>
<context>
<name>UBExportAdaptor</name>
<message>
<source>Warnings during export was appeared</source>
- <translation type="unfinished">ë´ë³´ë´ë ëì¤ ê²½ê³ ê° ëíë¬ìµëë¤</translation>
+ <translation>ë´ë³´ë´ê¸° ì¤ ê²½ê³ ê° ëíë¬ìµëë¤</translation>
</message>
</context>
<context>
<name>UBExportCFF</name>
<message>
<source>Export to IWB</source>
- <translation type="unfinished">IWBë¡ ë´ë³´ë´ê¸°</translation>
+ <translation>IWBë¡ ë´ë³´ë´ê¸°</translation>
</message>
<message>
<source>Export as IWB File</source>
- <translation type="unfinished">IWB íì¼ë¡ ë´ë³´ë´ê¸°</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>
@@ -1334,6 +1574,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>ë´ë³´ë´ê¸° ì¤í¨...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>UBX íì¼ë¡ ë´ë³´ë´ê¸°</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>문ì를 ë´ë³´ë´ë ì¤...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>ë´ë³´ë´ê¸° ìë£.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>ë´ë³´ë´ê¸° ì¤í¨.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation> Sankore UBXíìì¼ë¡ ë´ë³´ë´ê¸°</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1406,134 +1673,162 @@
<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>
+ <message>
+ <source>Add</source>
+ <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>
<message>
<source>Audios</source>
- <translation type="unfinished">ì¤ëì¤</translation>
+ <translation>ì¤ëì¤</translation>
</message>
<message>
<source>Movies</source>
- <translation type="unfinished">ëìì</translation>
+ <translation>ëìì</translation>
</message>
<message>
<source>Pictures</source>
- <translation type="unfinished">ì¬ì§</translation>
+ <translation>ì¬ì§</translation>
</message>
<message>
<source>Animations</source>
- <translation type="unfinished">ì ëë©ì´ì
</translation>
+ <translation>ì ëë©ì´ì
</translation>
</message>
<message>
<source>Interactivities</source>
- <translation type="unfinished">ëíí ìì
</translation>
+ <translation>ëíí ìì
</translation>
</message>
<message>
<source>Applications</source>
- <translation type="unfinished">ìì© íë¡ê·¸ë¨</translation>
+ <translation>ìì© íë¡ê·¸ë¨</translation>
</message>
<message>
<source>Shapes</source>
- <translation type="unfinished">ëí</translation>
+ <translation>ëí</translation>
</message>
<message>
<source>Favorites</source>
- <translation type="unfinished">ì¦ê²¨ì°¾ê¸°</translation>
+ <translation>ì¦ê²¨ì°¾ê¸°</translation>
</message>
<message>
<source>Web search</source>
- <translation type="unfinished">ì¹ ê²ì</translation>
+ <translation>ì¹ ê²ì</translation>
</message>
<message>
<source>Trash</source>
- <translation type="unfinished">í´ì§íµ</translation>
+ <translation>í´ì§íµ</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>ë¶ë§í¬</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>ì¹</translation>
</message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
<message>
<source>Accept</source>
- <translation type="unfinished">ì ì©</translation>
+ <translation>íì©</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">ì·¨ì</translation>
+ <translation>ì·¨ì</translation>
</message>
<message>
<source>Enter a new folder name</source>
- <translation type="unfinished">ì í´ë ì´ë¦ ì
ë ¥</translation>
+ <translation>ì í´ë ì´ë¦ ì
ë ¥</translation>
</message>
</context>
<context>
<name>UBFeaturesProgressInfo</name>
<message>
<source>Loading </source>
- <translation type="unfinished">ë¶ë¬ì¤ë ì¤</translation>
+ <translation>ë¶ë¬ì¤ë ì¤</translation>
</message>
</context>
<context>
<name>UBGraphicsGroupContainerItemDelegate</name>
<message>
<source>Locked</source>
- <translation type="unfinished">ì ê¹</translation>
+ <translation>ì ê¹</translation>
</message>
<message>
<source>Visible on Extended Screen</source>
- <translation type="unfinished">íì¥ íë©´ì ë³´ì´ê¸°</translation>
+ <translation>íì¥ íë©´ì ë³´ì´ê¸°</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation>ìì
ì¶ê°</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>ì¤ëì¤ì ë§í¬ ì ê±°</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>íì´ì§ì ë§í¬ ì ê±°</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>ì¹ url ë§í¬ ì ê±°</translation>
</message>
</context>
<context>
@@ -1550,6 +1845,22 @@
<source>Go to Content Source</source>
<translation>ì½í
ì¸ ìì¤ë¡ ì´ë</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>ìì
ì¶ê°</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>ì¤ëì¤ì ë§í¬ ì ê±°</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>íì´ì§ì ë§í¬ ì ê±°</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>ì¹ url ë§í¬ ì ê±°</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1566,21 +1877,14 @@
</message>
<message>
<source>Editable</source>
- <translation type="unfinished">í¸ì§ ê°ë¥</translation>
- </message>
-</context>
-<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation type="unfinished">ì¹</translation>
+ <translation>í¸ì§ ê°ë¥</translation>
</message>
</context>
<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
- <translation type="unfinished">ë¶ë¬ì¤ë ì¤ ...</translation>
+ <translation>ë¶ë¬ì¤ë ì¤ ...</translation>
</message>
</context>
<context>
@@ -1633,7 +1937,14 @@
</message>
<message>
<source>Open-Sankore (*.ubz)</source>
- <translation type="unfinished">Open-Sankore(*.ubz)</translation>
+ <translation>Open-Sankore(*.ubz)</translation>
+ </message>
+</context>
+<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (문ì ì¸í¸) (*.ubx)</translation>
</message>
</context>
<context>
@@ -1680,7 +1991,7 @@
<name>UBKeyboardPalette</name>
<message>
<source>Enter</source>
- <translation type="unfinished">ì
ë ¥</translation>
+ <translation>ì
ë ¥</translation>
</message>
</context>
<context>
@@ -1702,7 +2013,7 @@
<name>UBMessagesDialog</name>
<message>
<source>Close</source>
- <translation type="unfinished">ë«ê¸°</translation>
+ <translation>ë«ê¸°</translation>
</message>
</context>
<context>
@@ -1759,23 +2070,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>
@@ -1794,7 +2105,7 @@ Do you want to ignore these errors for this host?</source>
</message>
<message>
<source>on your desktop ...</source>
- <translation type="unfinished">ë°í íë©´ì ...</translation>
+ <translation>ë°í íë©´ì ...</translation>
</message>
<message>
<source>in folder %1</source>
@@ -1845,12 +2156,148 @@ Do you want to ignore these errors for this host?</source>
<name>UBPreferencesController</name>
<message>
<source>version: </source>
- <translation type="unfinished">ë²ì : </translation>
+ <translation>ë²ì : </translation>
</message>
<message>
<source>Marker is pressure sensitive</source>
<translation>ë§ì»¤ë ìë ¥ ê°ì§ìì
ëë¤</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>기본</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>ìëì´</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>ë¶ê°ë¦¬ìì´</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>ì¹´íëì´</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>ì²´ì½ì´</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>ë´ë§í¬ì´</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>ë
ì¼ì´</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>그리ì¤ì´</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>ìì´</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>ìì´ ìêµ</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>ì¤íì¸ì´</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>íëì¤ì´</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>ì¤ìì¤ íëì¤ì´</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>ì´í리ìì´</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>íë¸ë£¨ì´</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>ì¼ë³¸ì´</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>íêµì´</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>ë§ë¤ê°ì¤ì¹´ë¥´ ì´</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>ë
¸ë¥´ì¨ì´ì´</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>ë¤ëëëì´</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>í´ëëì´</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>ë¡ë§ ìì´</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>루ë§ëìì´</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>ë¬ììì´</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>ì¬ë¡ë°í¤ìì´</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>ì¤ì¨ë´ì´</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>í°í¤ì´</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ì¤êµì´</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ì¤êµì´ ê°ì²´</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>ì¤êµì´ ë²ì²´</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>ì½ë¥´ìì¹´ì´</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>íëì´</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1892,38 +2339,49 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>ë´ ëìì</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/ì¹</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>ë¤ìì ë³´ì´ê¸°</translation>
+ </message>
</context>
<context>
<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>
@@ -1937,140 +2395,140 @@ 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">íì´ì§: %0</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">ì ìì íì CC BY</translation>
+ <translation>ì ìì íì CC BY</translation>
</message>
<message>
<source>Attribution-NoDerivs CC BY-ND</source>
- <translation type="unfinished">ì ìì íì-NoDerivs CC BY-ND</translation>
+ <translation>ì ìì íì-NoDerivs CC BY-ND</translation>
</message>
<message>
<source>Attribution-ShareAlike CC BY-SA</source>
- <translation type="unfinished">ì ìì íì-ShareAlike CC BY-SA</translation>
+ <translation>ì ìì íì-ShareAlike CC BY-SA</translation>
</message>
<message>
<source>Attribution-NonCommercial CC BY-NC</source>
- <translation type="unfinished">ì ìì íì-NonCommercial CC BY-NC</translation>
+ <translation>ì ìì íì-NonCommercial CC BY-NC</translation>
</message>
<message>
<source>Attribution-NonCommercial-NoDerivs CC BY-NC-ND</source>
- <translation type="unfinished">ì ìì íì-NonCommercial-NoDerivs CC BY-NC-ND</translation>
+ <translation>ì ìì íì-NonCommercial-NoDerivs CC BY-NC-ND</translation>
</message>
<message>
<source>Attribution-NonCommercial-ShareAlike CC BY-NC-SA</source>
- <translation type="unfinished">ì ìì íì-NonCommercial-ShareAlike CC BY-NC-SA</translation>
+ <translation>ì ìì íì-NonCommercial-ShareAlike CC BY-NC-SA</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>
</message>
<message>
<source>Updated the:
</source>
- <translation type="unfinished">ì
ë°ì´í¸í ë ì§:
+ <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">íì´ì§: %0</translation>
+ <translation>íì´ì§: %0</translation>
</message>
</context>
<context>
<name>UBThumbnailAdaptor</name>
<message>
<source>Generating preview thumbnails ...</source>
- <translation type="unfinished">미리보기 ì¸ë¤ì¼ ìì± ì¤ ...</translation>
+ <translation>미리보기 ì¸ë¤ì¼ ìì± ì¤ ...</translation>
</message>
<message>
<source>%1 thumbnails generated ...</source>
@@ -2107,20 +2565,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>ìºì</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation type="unfinished">Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>ì ì²´ íì´ì§</translation>
</message>
<message>
- <source>Web</source>
- <translation>ì¹</translation>
+ <source>Embed </source>
+ <translation>ì½ì
</translation>
</message>
</context>
<context>
@@ -2135,7 +2589,7 @@ Do you want to ignore these errors for this host?</source>
</message>
<message>
<source>Backup path: </source>
- <translation type="unfinished">ë°±ì
ê²½ë¡: </translation>
+ <translation>ë°±ì
ê²½ë¡: </translation>
</message>
<message>
<source>Browse</source>
@@ -2173,7 +2627,7 @@ Please reboot the application to access the updated documents.</source>
</message>
<message>
<source>Remind me later</source>
- <translation type="unfinished">ëì¤ì ì림</translation>
+ <translation>ëì¤ì ì림</translation>
</message>
</context>
<context>
@@ -2213,11 +2667,11 @@ Please reboot the application to access the updated documents.</source>
</message>
<message>
<source>Open-Sankore</source>
- <translation type="unfinished">Open-Sankore</translation>
+ <translation>Open-Sankore</translation>
</message>
<message>
<source>OpenSankore</source>
- <translation type="unfinished">OpenSankore</translation>
+ <translation>OpenSankore</translation>
</message>
</context>
<context>
@@ -2294,11 +2748,11 @@ Please reboot the application to access the updated documents.</source>
<name>UniboardSankoreTransition</name>
<message>
<source>Import old Uniboard/Sankore documents</source>
- <translation type="unfinished">기존 ì ëë³´ë/Sankore 문ì ê°ì ¸ì¤ê¸°</translation>
+ <translation>기존 ì ëë³´ë/Sankore 문ì ê°ì ¸ì¤ê¸°</translation>
</message>
<message>
<source>There are no documents that should be imported</source>
- <translation type="unfinished">ê°ì ¸ìì¼ í 문ìê° ììµëë¤.</translation>
+ <translation>ê°ì ¸ìì¼ í 문ìê° ììµëë¤</translation>
</message>
</context>
<context>
@@ -2467,6 +2921,53 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>컨í
ì¸ ë¥¼ í¸ë©ì¼ë¡ ì í:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>ìì© íë¡ê·¸ë¨ ì´ë¦</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>ì í ë° ë©´ì±
ì¡°í.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>ì´ ê¸°ë¥ì ê°ì¥ ì¼ë°ì ì¸ ì¹ íì´ì§ìì ìëíëë¡ ê°ë°ëììµëë¤.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>ë§í¬ë¥¼ ë§ë¤ê±°ë ì¹ìì 컨í
ì¸ ë¥¼ ìì§ ì ì ìê¶ì ì¡´ì¤íì기 ë°ëëë¤.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>ë¤ì´ë¡ë ìì¹:
+ë¼ì´ë¸ë¬ë¦¬</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>ë¤ì´ë¡ë ìì¹
+íì¬ íì´ì§</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>ë§í¬ ì¶ê° ìì¹:
+ë¼ì´ë¸ë¬ë¦¬</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>ë§í¬ ì¶ê° ìì¹
+íì¬ íì´ì§</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2542,6 +3043,11 @@ p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">ê·íë 'Upload'를 í´ë¦í¨ì¼ë¡ì¨ ê·íê° í´ë¹ ì½í
ì¸ ì ëí 모ë ê¶íì ìì íê±°ë ìì ìë¡ë¶í° í´ë¹ ì½í
ì¸ ë¥¼ YouTubeì ê³µê°í ì ìëë¡ íë½ë°ìì¼ë©°, í´ë¹ ì½í
ì¸ ê° YouTube ì´ì©ì½ê´ (</span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a><span style=" font-family:'Lucida Grande'; font-size:10pt;">)ì ì¤ìí¨ì ë³´ì¦í©ëë¤.</span></p></body></html></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translatorcomment>ì¬ë¶í
ì ì격 ì¦ëª
ë³µì</translatorcomment>
+ <translation>Restore credentials on reboot</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2738,608 +3244,126 @@ p, li { white-space: pre-wrap; }
<translation>ë¼ì´ì ì¤</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>ë¤í¸ìí¬</translation>
</message>
<message utf8="true">
<source>Open-Sankoré</source>
- <translation type="unfinished">Open-Sankoré</translation>
+ <translation>Open-Sankoré</translation>
</message>
<message>
<source>Show internal web page content on secondary screen or projector</source>
- <translation type="unfinished">ë³´ì¡° íë©´ ëë íë¡ì í°ì ë´ë¶ ì¹ íì´ì§ ì½í
ì¸ íì</translation>
+ <translation>ë³´ì¡° íë©´ ëë íë¡ì í°ì ë´ë¶ ì¹ íì´ì§ ì½í
ì¸ íì</translation>
</message>
<message>
<source>Multi display</source>
- <translation type="unfinished">ë¤ì¤ ëì¤íë ì´</translation>
+ <translation>ë¤ì¤ ëì¤íë ì´</translation>
</message>
<message>
<source>Swap control display and view display</source>
- <translation type="unfinished">컨í¸ë¡¤ ëì¤íë ì´ ì¤ì ë° ëì¤íë ì´ ë³´ê¸°</translation>
+ <translation>컨í¸ë¡¤ ëì¤íë ì´ ì¤ì ë° ëì¤íë ì´ ë³´ê¸°</translation>
</message>
<message>
<source>Mode</source>
- <translation type="unfinished">모ë</translation>
+ <translation>모ë</translation>
</message>
<message>
<source>Mode to start in:</source>
- <translation type="unfinished">ììí 모ë:</translation>
+ <translation>ììí 모ë:</translation>
</message>
<message>
<source>Board</source>
- <translation type="unfinished">ë³´ë</translation>
+ <translation>ë³´ë</translation>
</message>
<message>
<source>Desktop</source>
- <translation type="unfinished">ë°í íë©´</translation>
+ <translation>ë°í íë©´</translation>
</message>
<message>
<source>Proxy User:</source>
- <translation type="unfinished">íë¡ì ì¬ì©ì:</translation>
+ <translation>íë¡ì ì¬ì©ì:</translation>
</message>
<message>
<source>Pass:</source>
- <translation type="unfinished">í¨ì¤:</translation>
- </message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="unfinished">Planète Sankoré ID</translation>
+ <translation>í¨ì¤:</translation>
</message>
<message>
<source>User:</source>
- <translation type="unfinished">ì¬ì©ì:</translation>
+ <translation>ì¬ì©ì:</translation>
</message>
<message>
<source>Pass: </source>
- <translation type="unfinished">í¨ì¤:</translation>
+ <translation>í¨ì¤:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translatorcomment>Translation needed</translatorcomment>
- <translation type="unfinished"></translation>
+ <source>Credits</source>
+ <translation>Credits</translation>
</message>
<message>
- <source>Credits</source>
- <translation type="unfinished">Credits</translation>
+ <source>Start up tips</source>
+ <translation>ìì ì¡°ì¸</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Show start up tips</source>
+ <translation>ìì ì¡°ì¸ íì</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>ì¸ì´</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>ì¸ì´ ì í</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>ì¬ìì ì ì ì¸ì´ê° ë¡ë©ë©ëë¤</translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Open-Sankoré ë«ê¸°</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ID for exporting file</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>ì¬ë¶í
ì ì격ì¦ëª
ë³µì</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>SSLì´ê¸°</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
<message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">ë¼ì´ì ì¤ë ê³µì ë° ë²ì ì¹ì¸ ë²ìì ìì´ë¡ëì´ ììµëë¤.</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_mg.ts b/Sankore-3.1/resources/i18n/sankore_mg.ts
index db9b8e0..20775de 100644
--- a/Sankore-3.1/resources/i18n/sankore_mg.ts
+++ b/Sankore-3.1/resources/i18n/sankore_mg.ts
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0" language="fr_CH">
+<TS version="2.0" language="fr_FR">
<context>
<name>BlackoutWidget</name>
<message>
@@ -392,14 +392,6 @@
<translation>Maka ny fikandrana iray</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Mpiatin'ny tranon-kala natsofoka</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Fakana mpiatin'ny tranon-kala azo atsofoka</translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation>Aseho amin'ny efijery hita ny efijery ampiasana matetika</translation>
</message>
@@ -481,6 +473,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Tobin-drohy</translation>
</message>
<message>
@@ -688,14 +681,6 @@
<translation>Fanefena ny fandraiketana ny Podcast</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Alaina ny Flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Alaina ny mpiatiny Flash</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Alaina ny tranon-kala</translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>Atokony</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Alaina ho an'ny</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">tahirim-boky</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Alaina ho an'ny tahirim-boky</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Alaina ho an'io</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">pejy io</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Alaina ho an'io pejy io</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ampiana rohy</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ao anatin'ny tahirim-boky</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Ampiana rohy ao anatin'ny tahirim-boky</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Ampiana rohy</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">eto amin'ity pejy ity</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Ampiana rohy eto amin'ity pejy ity</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Tobin-drohy</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1010,110 @@
<translation>Bika:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Habe:</translation>
+ <source>Alpha:</source>
+ <translation>Alpha:</translation>
</message>
<message>
- <source>Close</source>
- <translation>Hidio</translation>
+ <source>Geometry:</source>
+ <translation>Jeometria:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Saka:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Halavana:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Tehirizina nyfifandraisan'ny saka sy ny halavana</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Fiasany:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Fijerevana mialoha:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Hidina ny tahiry</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><fafana ny mpiatiny></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Tsy ekena ny sary</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Tsy afaka mampiseho ny data</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Ny rakitra nofafana dia tsy fantatra ho raki-peo</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Andefa raki-peo</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Ampiana rohy ny pejy</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Ampiana rohy ny pejin'ny tranon-kala</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Alaina avy ao anatin'ny tahirim-boky sy atao ao anatin'ity faritra ity ilay raki-peo </translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ekena</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Pejy ao aorina</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Pejy teo aloha</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Lohatenin'ilay pejy</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Pejy farany</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Laharan'ny pejy</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Ampidiro eto ny rohin'ny lahabolana</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>Fafao ny pejy</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Fafao ny rakitra</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Tena te hamafa an'ilay rakitra '%1' ve ianao ?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Daba foana</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Tena te hanafoana an'ilay daba ve ianao ?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Manafoana daba</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Daba voafoana</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Mamafa fitoeran-drakitra</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Tena te hamafa an'ilay fitoeran-drakitra '%1' ve ianao sy ny mpiatiny rehetra ?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Tsisy fitoeran-drakitra voafidy!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Manokatra rakitra zaka</translation>
</message>
@@ -1160,6 +1244,14 @@
<source>Untitled Documents</source>
<translation>Rakitra tsy misy lohateny</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1247,6 +1339,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Ekena</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Soloina</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Ajanony</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Ny anarana %1 dia efa nampiasana.
+Raha tazomina io anarana io dia voasolo ilay rakitra efa nisy.
+Raha omena anarana vaovao dia hisy rakitra iray vaovao.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Ny rakitrako</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modely</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Daba</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Mandika pejy %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 pejy voadika</numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1265,6 +1410,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Fakana tsy nety.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>Ny mpizara alavitra dia tsy manaiky ny fifandraisana (ny mpizara dia tsy manaiky fangatahana)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ny mpizara alavitra dia nanapaka ny fifandraisana alohan'ny nandraisana sy nikarakarana ny valiny feno</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>ny anaran'ilay mpizara alavitra dia tsy hita ( anarana tsy mety)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>Tapaka ny fifandraisana amin'ny mpizara alavitra fa ela loatra</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>Ny asa dia najanona tamin'ny didy abort() na close() nefa tsy vita akory.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>ny fifandraisana SSL/TLS dia tsy nety ary ny lalana voantoka dia tsy mety ampiasana. Nalefa ny kaika sslErrors().</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>Tapaka ny fifandraisana noho ny fanapahan'ny rezo, na izany aza dia nalefa amin'ny fidirana hafa ny rafitra. Ho averina alefa ny fangatahana ary ho valiana vao miverina ny fifandraisana.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>Ny fifandraisana amin'ny mpizara proxy dia tsy nekena ( tsy manaiky fangatahana ny mpizara proxy)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>ny mpizara proxy dia nanapaka ny fifandraisana alohan'ny nandraisana sy nikarakarana ny valiny feno</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>ny anaran'ilay mpizara proxy dia tsy hita ( anarana tsy mety)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>Ny fifandraisana amin'ny mpizara proxy dia ela loatra na tsy namaly ara-potoana an'ilay fangatahana nalefa ny proxy</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>Ny proxy dia mila famantarana mba hamalian'ny fangatahana, kanefa tsy manaiky ny anarana sy ny teni-miafina nampiaisana (raha toa ka nisy)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>Tsy nekena ny fidirana amin'ny mpiatiny alavitra ( ohatran'ny diso HTTP 401 )</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>Tsy azo ato izany amin'ny mpiatiny alavitra</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>Tsy hita amin'ny mpizara ny mpiatiny alavitra ( ohatran'ny diso HTTP 404 )</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>Ny mpizara alavitra dia mila famantarana mba hizarana ny mpiatiny, kanefa tsy manaiky ny anarana sy ny teni-miafina nampiaisana (raha toa ka nisy)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>Tokony nalefa indray mandeha ilay fangatahana, kanefa tsy nety satria tsy nety novakiana fanindroany ilay data nalefa ohatra .</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Ny API fidirana amin'ny rezo dia tsy nety namaly ny fangatahana satria tsy fantatra ny fomba firesaka</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>Ny asa nangatahana dia tsy mety amin'ity fomba firesaka ity</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>Nisy tsy fetezana mifandray amin'ny rezo nitranga</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>Nisy tsy fetezana mifandray amin'ny proxy nitranga</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>Nisy tsy fetezana mifandray amin'ny mpiatiny alavitra nitranga</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>Nisy fahasimbana ao anatin'ny fomba firesaka nitranga (valiny tsy nety na tsy nampoizina ohatra, sns.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1333,6 +1577,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Fandefasana tsy nety...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Alefa ho rakitra UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Mandefa ny rakitra ...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Fandefasana nety.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Fandefasana tsy nety.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Alefa ho tahaka ny rakitra Sankore UBX</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1419,6 +1690,10 @@
<source>Object informations</source>
<translation>Mombamomban'ny zavatra</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Ampiana</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1501,6 +1776,14 @@
<source>Trash</source>
<translation>Daba</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Tobin-drohy</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Tranon-kala</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1534,6 +1817,22 @@
<source>Visible on Extended Screen</source>
<translation>Hita amin'ny efijery voavelatra</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Manampy fihetsika iray</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Esorina amin'ilay raki-peo ny rohy</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Esorina amin'ilay pejy ny rohy</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Esorina amin'ilay rohin'ny tranon-kala ny rohy</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1549,6 +1848,22 @@
<source>Go to Content Source</source>
<translation>Hande any amin'ny fototr'ilay mpiatiny</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Manampy fihetsika iray</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Esorina amin'ilay raki-peo ny rohy</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Esorina amin'ilay pejy ny rohy</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Esorina amin'ilay rohin'ny tranon-kala ny rohy</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1569,13 +1884,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Tranon-kala</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1636,6 +1944,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (valan-drakitra) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1850,6 +2165,142 @@ Tena tsy te hiraharaha an'ireo tsy mety ho an'ilay milina ve ianao?</t
<source>Marker is pressure sensitive</source>
<translation>Ny penina lehibe dia sarotiny amin'ny fitsindrina</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Tsotra</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabic</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgarian</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Catalan</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Czech</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Danish</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Alemanina</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Greek</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Anglisy</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Anglisy UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Espaniola</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Frantsay</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Frantsay avy amin'ny Suisse</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italianina</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebrio</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japanese</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Koreanina</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malagasy</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norvejianina</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Dutch</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polish</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Romansh</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Romanianina</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Rosiana</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovak</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Swedish</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turkish</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Sinoa</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Sinoa tsotra</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Sinoa nentim-paharazana</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1891,6 +2342,17 @@ Tena tsy te hiraharaha an'ireo tsy mety ho an'ilay milina ve ianao?</t
<source>My Movies</source>
<translation>Ny sarimietsiko</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Tranon-kala</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Hita amin'ny manaraka</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2106,14 +2568,14 @@ Tena tsy te hiraharaha an'ireo tsy mety ho an'ilay milina ve ianao?</t
</message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Pejy iray manontolo</translation>
</message>
<message>
- <source>Web</source>
- <translation>Tranon-kala</translation>
+ <source>Embed </source>
+ <translation>Natao tao anatiny</translation>
</message>
</context>
<context>
@@ -2460,6 +2922,49 @@ Avereno alefa ny rindr'asa ahafahana mampiasa ny rakitra novoazana azafady.
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Safidio ny mpiatiny ho alaina:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Anaran'ny rindran'asa</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Fifehezana sy dina.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Ity fiasana ity dia namboarina ho andeha amin'ny akamaroan'ny pejin'ny tranon-kala.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Mba hajao azafady ny lalana amin'ny fanamboarana rohy sy fangalana mpiatiny amin'ny tranon-kala.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2537,7 +3042,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>Averina ampiaisana ny anarana sy ny teni-miafina nidirana rehefa averina alefa</translation>
</message>
</context>
<context>
@@ -2735,22 +3240,10 @@ p, li { white-space: pre-wrap; }
<translation>Licences</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Rezo</translation>
</message>
@@ -2794,10 +3287,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Teny fanalahidy:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">Planète Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Mpampiasa:</translation>
@@ -2807,1134 +3296,62 @@ p, li { white-space: pre-wrap; }
<translation>Teny fanalahidy:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS</translation>
- </message>
- <message>
<source>Credits</source>
<translation>Voaka</translation>
</message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ID ho fakana rakitra</translation>
+ </message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Ny licence dia amin'ny tena anglisy mba hanajana ny famadihan-teny manaran-dalana sy ofisialy.</span></p></td></tr></table></body></html></translation>
+ <source>Restore credentials on reboot </source>
+ <translation>Averina ampiaisana ny anarana sy ny teni-miafina nidirana rehefa averina alefa </translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Ity kirakira ity dia nomena ohatr'izao, tsy misy fiantohana.Tsy misy zava-miseho afaka anomezana tsiny an'ny mpamorona raha misy zavatra tsy mety amin'ny fampiasana an'ity kirakira ity.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Ny alalana mampiasa azy dia nomena an'ny olon-drehetra ho an'izay tiany, na rindran'asa mampidi-bola aza, afaka ovainy sy zarainy, fa manaraka ny didy hoe:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 1. Ny fiavian'ny kirakira dia tsy azo lotoina anarana, tsy mahazo miteny fa ianao no namorona an'ilay kirakira. Raha mampiasa azy ianao dia tokony asiana teny fisaorana amin'ilay mombamomba ny fampiasanao azy, na dia tsy voatery ary.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Ny kirakira novaina dia tsy maintsy marihana fa novaina ary tsy azo lazaina fa ilay kirakira orijinaly.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. Ity fanamarihana ity dia tsy azo esorina na ovaina mihitsy.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Start up tips</source>
+ <translation>Toro-hevitra amin'ny voalohany</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
+ <message>
+ <source>Show start up tips</source>
+ <translation>Aseho ny toro-hevitra amin'ny voalohany</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></translation>
+ <message>
+ <source>Language</source>
+ <translation>Teny</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Safidio ny teny</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Ny teny nosafidiny dia ho ampiasana rehefa averina alefa amin'ny manaraka</translation>
</message>
<message utf8="true">
- <source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <source>Close Open-Sankoré</source>
+ <translation>Hidio Open-Sankoré</translation>
</message>
<message>
- <source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
- <message utf8="true">
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_nb.ts b/Sankore-3.1/resources/i18n/sankore_nb.ts
index 63c10b7..67ad22c 100644
--- a/Sankore-3.1/resources/i18n/sankore_nb.ts
+++ b/Sankore-3.1/resources/i18n/sankore_nb.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Bokmerke</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>Konfigurer opptak for podcast</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Flash trap</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Trap flash-innhold</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Web trap</translation>
</message>
@@ -728,14 +721,6 @@
<translation>Ta bilde av et vindu</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Legg inn web-innhold</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Ta bilde av web-innhold som kan legges inn</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>Vis på display</translation>
</message>
@@ -825,6 +810,43 @@
<source>Group</source>
<translation>Grupper</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Last ned til</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Last ned til bibliotek</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Last ned til</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuell side</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Last ned til aktuell side</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Legg til lenke til</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Legg til lenke til bibliotek</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Legg til lenke til</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuell side</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Legg til lenke til aktuell side</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Bokmerke</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -990,12 +1012,110 @@
<translation>Form:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Størrelse:</translation>
+ <source>Alpha:</source>
+ <translation>Alfa:</translation>
</message>
<message>
- <source>Close</source>
- <translation>Avslutt</translation>
+ <source>Geometry:</source>
+ <translation>Geometri:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Bredde: </translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Høyde:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Behold dimensjoner</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Modus:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Forhåndsvisning:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Lukk hurtigbuffer</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><slipp innhold></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Bilder er ikke godtatt</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Kan ikke vise data</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Sluppet fil er ikke gjenkjent som en lydfil</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Spill en lydfil</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Legg til lenke til side</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Legg til lenke til et nettsted</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Dra og slipp lydfilen fra biblioteket i denne boksen</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Neste side</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Forrige side</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Tittelside</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Siste side</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Sidenummer</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Sett inn url-tekst her</translation>
</message>
</context>
<context>
@@ -1061,42 +1181,6 @@
<translation>Fjern side</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Fjern dokument</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Er du sikker på at du vil fjerne dokumentet "%1"?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Tøm søppel</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Er du sikker på at du vil tømme søppelet?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Tømmer søppel</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Søppel tømt</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Fjern mappe</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Er du sikker på at du vil fjerne mappen "%1" med alt innhold?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Intet dokument valgt!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Ã
pne støttet fil</translation>
</message>
@@ -1163,6 +1247,14 @@
<source>Untitled Documents</source>
<translation>Dokumenter uten tittel</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>Dette er en irreversibel handling!</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1250,6 +1342,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Godta</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Erstatt</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Avbryt</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Navnet%1 er allerede i bruk.
+Om du beholder dette navnet vil du erstatte dokumentet.
+Om du gir et nytt navn vil du opprette et nytt dokument.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Mine dokumenter</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modeller</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Søppel</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Dokumenter uten tittel</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Kopierer side %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 sider kopiert</numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1268,6 +1413,106 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Nedlasting mislyktes.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>
+Den eksterne serveren godtok ikke forbindelsen (serveren godtar ikke forespørsler)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>den eksteren serveren lukket forbindelsen for tidlig, før hele svaret ble mottatt og behandlet</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>Det eksterne vertsnavnet ble ikke funnet (ugyldig vertsnavn)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>forbindelsen til den eksterne serveren ble tidsutkoblet</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>operasjonen ble avbrutt via oppfordringer til å avbryte() eller lukke() før den var ferdig.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>SSL/TLS handshake mislyktes og den krypterte kanalen kunne ikke bli etablert. SSL-feil()-signalet burde vært sendt.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>Tilkoblingen ble brutt på grunn av frakobling fra nettverket. Systemet har imidlertid igangsatt roaming til et annet tilgangspunkt. Forespørselen bør sendes igjen og vil bli behandlet så snart som tilkoblingen er gjenopprettet.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>tilkoblingen til proxy-serveren ble nektet (proxy-serveren godtar ikke forespørsler)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>proxy-serveren lukket forbindelsen for tidlig, før hele svaret ble mottatt og behandlet</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>proxy vertsnavnet ble ikke funnet (ugyldig proxy-vertsnavn)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>tilkoblingen til proxy-serveren ble tidsutkoblet eller proxy-serveren svarte ikke på den sendte forespørselen i tide</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>proxy-serveren krever autentisering for å respektere forespørselen men godtok ikke berettigelsesbevisene som ble gitt (hvis noen)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>tilgangen til det eksterne innholdet ble nektet (ligner HTTP-feil 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>den forespurte operasjonen om det eksterne innholdet er ikke tillatt</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>det eksterne innholdet ble ikke funnet på serveren (ligner HTTP-feil 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>den eksterne serveren krever autentisering for å servere innholdet, men berettigelsesbevisene som ble gitt ble ikke godtatt (hvis noen)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>forespørselen må sendes igjen, men dette mislyktes, for eksempel fordi opplastingsdata ikke kunne leses en andre gang.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Network Access API kan ikke respektere forespørselen fordi protokollen ikke er kjent</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>den forespurte operasjonen er ugyldig for denne protokollen</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>en ukjent nettverksrelatert feil ble oppdaget</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>en ukjent proxy-relatert feil ble oppdaget</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>en ukjent feil relatert til det eksterne innholdet ble oppdaget</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>et sammenbrudd i protokoll ble oppdaget (spaltingsfeil, ugyldige eller uventede svar, osv.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1336,6 +1581,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Kunne ikke eksportere ...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Eksporter som UBX-fil</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Eksporterer dokument ...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Eksport gjennomført.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Eksport mislyktes.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Eksporter til Sankore UBX-format</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1422,6 +1694,10 @@
<source>Object informations</source>
<translation>Objektopplysninger</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>Legg til</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1504,6 +1780,14 @@
<source>Trash</source>
<translation>Søppel</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Bokmerker</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1537,6 +1821,22 @@
<source>Visible on Extended Screen</source>
<translation>Synlig på utvidet skjerm</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Legg til en handling</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Fjern lenke til lyd</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Fjern lenke til side</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Fjern lenke til nettsted</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1552,6 +1852,22 @@
<source>Go to Content Source</source>
<translation>GÃ¥ til kildeinnhold</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Legg til en handling</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Fjern lenke til lyd</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Fjern lenke til side</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Fjern lenke til nettsted</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1572,13 +1888,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1639,6 +1948,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankoré (sett med dokumenter) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1848,6 +2164,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>Markøren er trykksensitiv</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Standard</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabisk</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgarsk</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Katalansk</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Tsjekkisk</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Dansk</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Tysk</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Gresk</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Engelsk</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Britisk engelsk</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Spansk</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Fransk</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Sveitsisk-fransk</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italiensk</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebraisk</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japansk</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Koreansk</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Gassisk</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norsk</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Nederlandsk</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polsk</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Retoromansk</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Rumensk</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Russisk</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovakisk</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Svensk</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Tyrkisk</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Kinesisk</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Forenklet kinesisk</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Tradisjonell kinesisk</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>Korsikansk</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hindi</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1889,6 +2341,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>Mine filmer</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Synlig neste gang</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2102,20 +2565,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>Skjul</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Hel side</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Legge inn </translation>
</message>
</context>
<context>
@@ -2461,6 +2920,53 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Velg innhold som skal kopieres:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Applikasjonsnavn</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Begrensning og ansvarsfraskrivelse. </translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Denne funksjonen er utviklet til å fungere på de mest vanlige nettsider.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Vennligst respekter opphavsrett for oppretting av lenker eller kopi av innhold fra nettet.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>Last ned til
+bibliotek</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>Last ned til
+aktuell side</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>Legg til lenke til
+bibliotek</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>Legg til lenke til
+aktuell side</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2536,6 +3042,10 @@ p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">By clicking 'Upload,' you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>Gjenopprett berettigelsesbevis ved omstart</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2732,22 +3242,10 @@ p, li { white-space: pre-wrap; }
<translation>Lisenser</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>Ã
pne SSI</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Nettverk</translation>
</message>
@@ -2792,10 +3290,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Pass:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>Planet Sankoré-ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Bruker:</translation>
@@ -2805,553 +3299,71 @@ p, li { white-space: pre-wrap; }
<translation>Pass:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Credits</source>
<translatorcomment>Translates as "thanks to"</translatorcomment>
<translation>Takk til</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>Oppstartstips</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Denne programvaren leveres "som den er" uten noen form for garanti, verken uttrykkelig eller underforstått. Forfatterne av programvaren skal ikke under noen omstendighet holdes ansvarlige for bruk av denne programvaren.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Det gis tillatelse til hvem som helst å bruke programvaren til ethvert formål, inkludert kommersielle formål, og til å endre den og distribuere den fritt, med følgende begrensninger:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 1. Opprinnelsen til denne programvaren skal ikke være feilrepresentert, du kan ikke hevde at du har skrevet den opprinnelige programvaren. Hvis du bruker denne programvaren i et produkt, er det fint om du nevner at du har brukt den i dokumentasjonen, men dette er ikke påkrevd.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Kildeversjoner som er endret skal merkes som endret, og skal ikke oppfattes som den opprinnelige programvaren.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. Denne merknaden skal ikke fjernes eller endres i noen kildedistribusjon.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html>
-</translation>
+ <source>Show start up tips</source>
+ <translation>Vis oppstartstips</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Språk</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Velg språk</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Det nye språket vil bli lastet ved neste omstart</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Lukk Open-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ID for eksportering av fil</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>Gjenopprett berettigelsesbevis ved omstart </translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré versjon 1.4 , Copyright (C) 2010-2012 Public Interest Grouping for Digital Education in Africa (GIP ENA)<br /><br />Open-Sankoré er fri programvare; du kan redistribuere det og/eller endre det etter betingelsene gitt i Lesser GNU general Public Licence (GNU LGPL) som publisert av Free Software Foundation, enten versjon 2 av lisensen, eller en nyere versjon.<br />Du kan finne kildekoden til denne programvaren pÃ¥ </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré distribueres i hÃ¥p om at det skal være nyttig, men UTEN NOEN SOM HELST GARANTI, selv uten underforstÃ¥tt garanti om SALGBARHET eller EGNETHET TIL ET BESTEMT FORMÃ
L..<br />Se lisensen Lesser GNU General Public Licence i lisensrubrikken eller på nettstedet </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Kontakt : <br />Public Interest Grouping for Digital Education in Africa (GIP ENA)<br />Delegate for Digital Education in Africa<br />20 Avenue Ségur, F-75007 Paris<br />Tlf.: +33 1 43 17 68 08<br />e-post: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html>
-</translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Lisensene er på engelsk for å respektere den offisielle og juridisk godkjente oversettelsen.</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_nl.ts b/Sankore-3.1/resources/i18n/sankore_nl.ts
index f216de7..ddc9738 100644
--- a/Sankore-3.1/resources/i18n/sankore_nl.ts
+++ b/Sankore-3.1/resources/i18n/sankore_nl.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Favoriet</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>Podcast opname configureren</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Flash Trap</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Trap flash inhoud</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Internet bescherming</translation>
</message>
@@ -728,14 +721,6 @@
<translation>Venster opnemen</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Internetinhoud insluiten</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Opnemen insluitbare webinhoud</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>Op presentatiescherm weergeven</translation>
</message>
@@ -821,14 +806,51 @@
</message>
<message>
<source>Group</source>
- <translation type="unfinished"></translation>
+ <translation>Groep</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotheek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Downloaden naar bibliotheek</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Downloaden naar</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">huidige pagina</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Naar huidige pagina downloaden</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Link toevoegen naar</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotheek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Link toevoegen naar bibliotheek</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Link toevoegen naar</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">huidige pagina</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Link toevoegen naar huidige pagina</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Favoriet</translation>
</message>
</context>
<context>
<name>PasswordDialog</name>
<message>
<source>Authentication Required</source>
- <translation>Iinloggen verplicht</translation>
+ <translation>Inloggen verplicht</translation>
</message>
<message>
<source>Username:</source>
@@ -843,7 +865,7 @@
<name>ProxyDialog</name>
<message>
<source>Proxy Authentication</source>
- <translation>Proxy identificatie</translation>
+ <translation>Proxy-identificatie</translation>
</message>
<message>
<source>Connect to Proxy</source>
@@ -866,26 +888,26 @@
<name>QObject</name>
<message>
<source>Element ID = </source>
- <translation type="unfinished"></translation>
+ <translation>ID-element =</translation>
</message>
<message>
<source>Content is not supported in destination format.</source>
- <translation type="unfinished"></translation>
+ <translation>Inhoud wordt niet ondersteund in doelopmaak</translation>
</message>
<message>
<source>Remove Page</source>
- <translation type="unfinished">Pagina verwijderen</translation>
+ <translation>Pagina verwijderen</translation>
</message>
<message>
<source>Are you sure you want to remove 1 page from the selected document '%0'?</source>
- <translation type="unfinished"></translation>
+ <translation>Weet u zeker dat u 1 pagina van het geselecteerde document '%0' wilt verwijderen?</translation>
</message>
</context>
<context>
<name>UBApplication</name>
<message>
<source>Page Size</source>
- <translation>Pagina Formaat</translation>
+ <translation>Pagina formaat</translation>
</message>
<message>
<source>Podcast</source>
@@ -943,23 +965,23 @@
</message>
<message>
<source>Delete page %1 from document</source>
- <translation type="unfinished"></translation>
+ <translation>Pagina %1 uit document verwijderen</translation>
</message>
<message>
<source>Page %1 deleted</source>
- <translation type="unfinished"></translation>
+ <translation>Pagina %1 verwijderd</translation>
</message>
<message>
<source>Add file operation failed: file copying error</source>
- <translation type="unfinished"></translation>
+ <translation>Bestandsbewerking mislukt: fout bestand kopiëren</translation>
</message>
<message>
<source>Group</source>
- <translation type="unfinished"></translation>
+ <translation>Groep</translation>
</message>
<message>
<source>Ungroup</source>
- <translation type="unfinished"></translation>
+ <translation>Groep opheffen</translation>
</message>
</context>
<context>
@@ -988,12 +1010,110 @@
<translation>Vorm:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Formaat:</translation>
+ <source>Alpha:</source>
+ <translation>Alfa:</translation>
</message>
<message>
- <source>Close</source>
- <translation>Sluiten</translation>
+ <source>Geometry:</source>
+ <translation>Geometrie</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Breedte:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Hoogte:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Verhoudingen aanhouden</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Modus:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Voorbeeld:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Cache sluiten</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><drop content></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Afbeeldingen worden niet geaccepteerd</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Kan gegevens niet weergeven</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Neergezette bestand wordt niet herkend als een audiobestand</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Een audiobestand afspelen</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Link naar pagina toevoegen</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Link naar een webpagina toevoegen</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Het audiobestand van de bibliotheek naar deze box slepen en laten vallen </translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Volgende pagina</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Vorige Pagina</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Titelpagina</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Laatste pagina</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Paginanummer</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>URL-tekst hier invoegen</translation>
</message>
</context>
<context>
@@ -1020,7 +1140,7 @@
</message>
<message>
<source>Show Open-Sankore</source>
- <translation type="unfinished"></translation>
+ <translation>Open Sankore weergeven</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>Pagina verwijderen</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Document verwijderen</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Weet u zeker dat u document "%1" wilt verwijderen?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Prullenbak legen</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Weet u zeker dat u de prullenbak wilt legen?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Prullenbak wordt geleegd</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Prullenbak is leeg</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Map verwijderen</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Weet u zeker dat u de map "%1" met inhoud wilt verwijderen?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Geen document geselecteerd!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Geopend ondersteund bestand</translation>
</message>
@@ -1154,11 +1238,19 @@
</message>
<message>
<source>Folder does not contain any image files</source>
- <translation type="unfinished"></translation>
+ <translation>Map bevat geen beeldbestanden</translation>
</message>
<message>
<source>Untitled Documents</source>
- <translation type="unfinished">Onbenoemde Documenten</translation>
+ <translation>Onbenoemde Documenten</translation>
+ </message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>Dit is een onomkeerbare handeling!</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1189,19 +1281,22 @@
</message>
<message>
<source>Inserting page %1 of %2</source>
- <translation type="unfinished"></translation>
+ <translation>Pagina %1 van %2 invoegen</translation>
</message>
<message>
<source>Import successful.</source>
- <translation type="unfinished">Import gelukt.</translation>
+ <translation>Import gelukt.</translation>
</message>
<message>
<source>Import of file %1 successful.</source>
- <translation type="unfinished"></translation>
+ <translation variants="yes">
+ <lengthvariant>Importeren van bestand %1 succesvol.</lengthvariant>
+ <lengthvariant></lengthvariant>
+ </translation>
</message>
<message>
<source>Importing file %1</source>
- <translation type="unfinished"></translation>
+ <translation>Bestand %1 importeren</translation>
</message>
</context>
<context>
@@ -1247,6 +1342,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Accepteren</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Vervangen</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Annuleren</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>De naam %1 wordt al gebruikt.
+Als u deze naam aanhoudt, wordt het document vervangen.
+Als u een nieuwe naam geeft, wordt een nieuw document gemaakt.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Mijn documenten</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modellen</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Prullenbak</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Naamloze documenten</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Kopie van pagina %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 pagina gekopieerd</numerusform>
+ <numerusform>%1 pagina's gekopieerd</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1265,6 +1413,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Downloaden mislukt</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>de externe server heeft de verbinding geweigerd (de server accepteert geen verzoeken)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>de externe server heeft de verbinding voortijdig gesloten, voordat het hele antwoord is ontvangen en verwerkt</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>de externe hostnaam is niet gevonden (ongeldige hostnaam)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>time out tijdens de verbinding met de externe server </translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>de bewerking is geannuleerd via oproepen afbreken() of sluiten() voordat deze was beëindigd</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>de SSL/TLS handdruk is mislukt en het versleutelde kanaal kon niet worden vastgesteld. Het sslErrors() signaal had moeten worden uitgezonden.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>de verbinding werd verbroken door een verbreking van het netwerk, maar het systeem heeft roaming in werking gezet naar een ander toegangspunt. Het verzoek moet opnieuw worden verzonden en wordt verwerkt zodra de verbinding is hersteld.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>de verbinding met de proxy-server is geweiged (de proxy-server accepteert geen verzoeken)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>de proxy-server heeft de verbinding voortijdig gesloten, voordat het hele antwoord was ontvangen en verwerkt</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>de proxy-hostnaam is niet gevonden (ongeldige proxy-hostnaam)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>time out van de verbinding met de proxy of de proxy heeft niet tijdig op het verzonden verzoek geantwoord</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>de proxy vraagt om verificatie om het verzoek te honoreren maar heeft geen aangeboden credentials (als die er waren) geaccepteerd</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>de toegang tot de externe inhod werd genegeerd (zoals HTTP-fout 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>de verwerking verzocht op de externe inhoud is niet toegestaan</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>de externe inhoud is niet gevonden op de server (zoals HTTP-fout 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>de externe server vraagt om verificatie om de inhoud te dienen, maar de gegeven credentials werden niet geaccepteerd (als die er waren)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>het verzoek moest opnieuw worden verzonden, maar dit is mislukt bijvoorbeeld omdat de uploadgegevens de tweede keer niet konden worden gelezen.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>de Network Access API kan het verzoek niet honoreren omdat het protocol niet bekend is</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>de gevraagde bewerking is ongeldig voor dit protocol</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>een onbekend netwerk-gerelateerde fout werd gedetecteerd</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>een onbekende proxy-gerelateerde fout werd gedetecteerd</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>een onbekende fout gerelateerd tot de externe inhoud werd gedetecteerd</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>een defect in protocil werd gedetecteerd (parseringsfout, ongeldige of onverwachte responsen etc.)t </translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1279,7 +1526,7 @@
<name>UBExportAdaptor</name>
<message>
<source>Warnings during export was appeared</source>
- <translation type="unfinished"></translation>
+ <translation>Er verschenen waarschuwingen tijdens het exporteren </translation>
</message>
</context>
<context>
@@ -1333,6 +1580,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Exporteren mislukt..</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exporteren als UBX-bestand</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Document wordt geëxporteerd...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Export gelukt.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Exporteren mislukt</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exporteren naar Sankore UBX-opmaak</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1419,6 +1693,10 @@
<source>Object informations</source>
<translation>Object informatie</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>Toevoegen</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1463,91 +1741,131 @@
</message>
<message>
<source>Audios</source>
- <translation type="unfinished">Audio's</translation>
+ <translation>Audio's</translation>
</message>
<message>
<source>Movies</source>
- <translation type="unfinished">Films</translation>
+ <translation>Films</translation>
</message>
<message>
<source>Pictures</source>
- <translation type="unfinished">Foto's</translation>
+ <translation>Foto's</translation>
</message>
<message>
<source>Animations</source>
- <translation type="unfinished">Animaties</translation>
+ <translation>Animaties</translation>
</message>
<message>
<source>Interactivities</source>
- <translation type="unfinished">Interactiviteiten</translation>
+ <translation>Interactiviteiten</translation>
</message>
<message>
<source>Applications</source>
- <translation type="unfinished">Toepassingen</translation>
+ <translation>Toepassingen</translation>
</message>
<message>
<source>Shapes</source>
- <translation type="unfinished">Vormen</translation>
+ <translation>Vormen</translation>
</message>
<message>
<source>Favorites</source>
- <translation type="unfinished"></translation>
+ <translation>Favorieten</translation>
</message>
<message>
<source>Web search</source>
- <translation type="unfinished"></translation>
+ <translation>Zoeken op het web</translation>
</message>
<message>
<source>Trash</source>
- <translation type="unfinished">Prullenbak</translation>
+ <translation>Prullenbak</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Favorieten</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Internet</translation>
</message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
<message>
<source>Accept</source>
- <translation type="unfinished"></translation>
+ <translation>Accepteren</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Annuleren</translation>
+ <translation>Annuleren</translation>
</message>
<message>
<source>Enter a new folder name</source>
- <translation type="unfinished"></translation>
+ <translation>Een nieuwe mapnaam invoeren</translation>
</message>
</context>
<context>
<name>UBFeaturesProgressInfo</name>
<message>
<source>Loading </source>
- <translation type="unfinished"></translation>
+ <translation>Laden:</translation>
</message>
</context>
<context>
<name>UBGraphicsGroupContainerItemDelegate</name>
<message>
<source>Locked</source>
- <translation type="unfinished">Vergrendeld</translation>
+ <translation>Vergrendeld</translation>
</message>
<message>
<source>Visible on Extended Screen</source>
- <translation type="unfinished">Weergeven op Verbreed scherm</translation>
+ <translation>Weergeven op Verbreed scherm</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation>Voeg de werkvorm toe</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Link naar audio verwijderen</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Link naar pagina verwijderen</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Link naar web-url verwijderen</translation>
</message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
<message>
- <source>Locked</source>
- <translation>Vergrendeld</translation>
+ <source>Locked</source>
+ <translation>Vergrendeld</translation>
+ </message>
+ <message>
+ <source>Visible on Extended Screen</source>
+ <translation>Weergeven op Verbreed scherm</translation>
+ </message>
+ <message>
+ <source>Go to Content Source</source>
+ <translation>Naar inhoudsbron</translation>
+ </message>
+ <message>
+ <source>Add an action</source>
+ <translation>Voeg de werkvorm toe</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Link naar audio verwijderen</translation>
</message>
<message>
- <source>Visible on Extended Screen</source>
- <translation>Weergeven op Verbreed scherm</translation>
+ <source>Remove link to page</source>
+ <translation>Link naar pagina verwijderen</translation>
</message>
<message>
- <source>Go to Content Source</source>
- <translation>Naar inhoudsbron</translation>
+ <source>Remove link to web url</source>
+ <translation>Link naar web url verwijderen</translation>
</message>
</context>
<context>
@@ -1569,17 +1887,10 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
- <translation type="unfinished">Wordt geladen...</translation>
+ <translation>Wordt geladen...</translation>
</message>
</context>
<context>
@@ -1636,6 +1947,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (documentenset) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1701,7 +2019,7 @@
<name>UBMessagesDialog</name>
<message>
<source>Close</source>
- <translation type="unfinished">Sluiten</translation>
+ <translation>Sluiten</translation>
</message>
</context>
<context>
@@ -1844,6 +2162,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>Markeerstift is druk gevoelig</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Standaard</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabisch</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgaars</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Catalaans</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Tsjechisch</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Deens</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Duits</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grieks</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Engels</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Engels VK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Spaans</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Frans</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Zwitsers Frans</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italiaans</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Ivriet</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japans</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Koreaans</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malagasi</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Noors</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Nederlands</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Pools</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Reto-Romaans</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Roemeens</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Russisch</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slowaaks</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Zweeds</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turks</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Chinees</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Vereenvoudigd Chinees</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Traditioneel Chinees</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>Corsicaans</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hindi</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1885,6 +2339,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>Mijn films</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Volgende keer zichtbaar</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2098,20 +2563,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>Cache</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation type="unfinished"></translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Hele pagina</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Insluiten</translation>
</message>
</context>
<context>
@@ -2203,11 +2664,11 @@ Please reboot the application to access the updated documents.</source>
</message>
<message>
<source>Open-Sankore</source>
- <translation type="unfinished"></translation>
+ <translation>Open-Sankore</translation>
</message>
<message>
<source>OpenSankore</source>
- <translation type="unfinished"></translation>
+ <translation>OpenSankore</translation>
</message>
</context>
<context>
@@ -2457,6 +2918,53 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Selecteer inhoud om deze te onderscheppen:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Applicatie naam</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Beperking en disclaimer</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>De functie is ontwikkeld om te werken op de meest voorkomende webpagina's</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Houd u aan copyrights voor het aanmaken van links of inhoud onderscheppen van internet</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>Downloaden naar
+bibliotkeek</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>Downloaden naar
+huidige pagina</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>Link toevoegen naar
+bibliotheek</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>Link toevoegen naar
+huidige pagina</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2532,6 +3040,10 @@ p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">Door op 'Upload,'te klikken bevestigt u dat u over alle inhoudsrechten beschikt of dat u de toelating hebt gekregen van de eigenaar om de inhoud publiek te maken op YouTube, en dat u anderzijds akkoord gaat met de YouTube Terms of Service zoals beschreven op </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>aanmeldgegevens herstellen of herstarten</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2728,22 +3240,10 @@ p, li { white-space: pre-wrap; }
<translation>Licenties</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSI</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Netwerk</translation>
</message>
@@ -2787,10 +3287,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Wachtwoord:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>Planète Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Gebruiker:</translation>
@@ -2800,535 +3296,70 @@ p, li { white-space: pre-wrap; }
<translation>Wachtwoord:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Credits</source>
<translation>Credits</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>Start-tips</translation>
+ </message>
+ <message>
+ <source>Show start up tips</source>
+ <translation>Start-tips weergeven</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Taal</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Een taal selecteren</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>De nieuwe taal wordt geladen bij de volgende start</translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Open Sankoré sluiten</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ID om een bestand te exporteren</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>Credentials op reboot herstellen</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
<message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">De licenties zijn in het Engels vanwege de officiële en wettelijk goedgekeurde vertaling.</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_pl.ts b/Sankore-3.1/resources/i18n/sankore_pl.ts
index 320de7c..a01c38c 100644
--- a/Sankore-3.1/resources/i18n/sankore_pl.ts
+++ b/Sankore-3.1/resources/i18n/sankore_pl.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>ZakÅadka</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>Konfiguruj nagrywanie podkastu</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>PuÅapka Flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>ZÅap zawartoÅÄ Flash</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>
</translation>
@@ -729,14 +722,6 @@
<translation>PrzechwyÄ okno</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Osadź zawartoÅÄ sieci Web</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>PrzechwyÄ zawartoÅÄ sieci Web nadajÄ
cÄ
siÄ do osadzenia</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>Pokaż na wyÅwietlaczu</translation>
</message>
@@ -827,6 +812,43 @@
<source>Group</source>
<translation>Grupuj</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Pobierz do</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">biblioteki</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Pobierz do biblioteki</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Pobierz do</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bieżÄ
cej strony</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Pobierz do bieżÄ
cej strony</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dodaj ÅÄ
cze do</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">biblioteki</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Dodaj ÅÄ
cze do biblioteki</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Dodaj ÅÄ
cze do</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bieżÄ
cej strony</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Dodaj ÅÄ
cze do bieżÄ
cej strony</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">ZakÅadka</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -992,12 +1014,110 @@
<translation>KsztaÅt:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Rozmiar:</translation>
+ <source>Alpha:</source>
+ <translation>Alfa:</translation>
</message>
<message>
- <source>Close</source>
- <translation>Zamknij</translation>
+ <source>Geometry:</source>
+ <translation>Geometria:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>SzerokoÅÄ: </translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>WysokoÅÄ:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Zachowaj proporcje</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Tryb:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>PodglÄ
d:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Zamknij pamiÄÄ podrÄcznÄ
</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><upuÅÄ zawartoÅÄ></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Obrazy nie sÄ
akceptowane</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Nie można wyÅwietliÄ danych</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Upuszczony plik nie zostaÅ rozpoznany jako plik audio</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Odtwórz plik audio</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Dodaj ÅÄ
cze do strony</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Dodaj ÅÄ
cze do strony www</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>PrzeciÄ
gnij i upuÅÄ plik audio z biblioteki do tego pola</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>NastÄpna strona</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Poprzednia strona</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Strona tytuÅowa</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Ostatnia strona</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Numer strony</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Wpisz tekst url tutaj</translation>
</message>
</context>
<context>
@@ -1062,42 +1182,6 @@
<translation>UsuÅ stronÄ</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>UsuÅ dokument</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Czy na pewno chcesz usunÄ
Ä dokument â%1â?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Opróżnij kosz</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Czy na pewno chcesz opróżniÄ kosz?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Opróżnianie kosza</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Opróżniono kosz</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>UsuÅ folder</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Czy na pewno chcesz usunÄ
Ä folder â%1â wraz z zawartoÅciÄ
?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Nie wybrano żadnego dokumentu!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Otwórz obsÅugiwany plik</translation>
</message>
@@ -1165,6 +1249,14 @@
<source>Untitled Documents</source>
<translation>Dokumenty niezatytuÅowane</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>To dziaÅanie jest nieodwracalne!</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1252,6 +1344,60 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Akceptuj</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>ZastÄ
p</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Anuluj</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Nazwa %1 jest już używana.
+Zachowanie tej nazwy spowoduje zastÄ
pienie dokumentu.
+Podanie nowej nazwy spowoduje utworzenie nowego dokumentu.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Moje dokumenty</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modele</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Kosz</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Dokumenty niezatytuÅowane</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Kopiowanie strony %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>Skopiowano %1 stronÄ</numerusform>
+ <numerusform>Skopiowano %1 strony</numerusform>
+ <numerusform>Skopiowano %1 stron</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1272,6 +1418,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Pobieranie nieudane.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>serwer zdalny odrzuciÅ poÅÄ
czenie (serwer nie akceptuje żÄ
daÅ)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>serwer zdalny zakoÅczyÅ poÅÄ
czenie przedwczeÅnie, zanim odpowiedź zostaÅa w caÅoÅci odebrana i przetworzona</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>nie znaleziono nazwy hosta serwera zdalnego (nieprawidÅowa nazwa hosta)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>limit czasu poÅÄ
czenia z serwerem zdalnym zostaÅ przekroczony</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>operacja zostaÅa anulowana na drodze żÄ
dania przerwania() lub zamkniÄcia(), zanim zostaÅa ukoÅczona.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>uzgadnianie SSL/TLS siÄ nie powiodÅo i nie udaÅo siÄ ustanowiÄ szyfrowanego kanaÅu. Powinien zostaÄ nadany sygnaÅ sslErrors().</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>poÅÄ
czenie zostaÅo przerwane na skutek odÅÄ
czenia od sieci, ale system zainicjowaÅ mobilny dostÄp do innego punktu dostÄpu. Należy ponownie wysÅaÄ Å¼Ä
danie, aby zostaÅo niezwÅocznie przetworzone z chwilÄ
ponownego ustanowienia poÅÄ
czenia.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>poÅÄ
czenie z serwerem proxy zostaÅo odrzucone (serwer proxy nie akceptuje żÄ
daÅ)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>serwer proxy zakoÅczyÅ poÅÄ
czenie przedwczeÅnie, zanim odpowiedź zostaÅa w caÅoÅci odebrana i przetworzona</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>nie znaleziono nazwy hosta serwera proxy (nieprawidÅowa nazwa hosta)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>limit czasu poÅÄ
czenia z serwerem proxy zostaÅ przekroczony lub serwer proxy nie odpowiedziaÅ na czas na wysÅane żÄ
danie</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>serwer proxy wymaga uwierzytelnienia, zanim wypeÅnieni żÄ
danie, ale nie zaakceptowaŠżadnych poÅwiadczeÅ (jeÅli byÅy)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>odmowa dostÄpu do zawartoÅci zdalnych (podobna do bÅÄdu HTTP 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>żÄ
dana operacja na zawartoÅci zdalnej jest niedozwolona</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>nie znaleziono zawartoÅci zdalnej na serwerze (bÅÄ
d podobny do HTTP 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>serwer proxy wymaga uwierzytelnienia w celu obsÅużenia zawartoÅci, ale nie zaakceptowaŠżadnych poÅwiadczeÅ (jeÅli byÅy)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>żÄ
danie musiaÅo zostaÄ wysÅane ponownie, ale dziaÅanie to siÄ nie powiodÅo, np. ponieważ nie udaÅo siÄ ponownie odczytaÄ wysÅanych danych.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>API dostÄpu do sieci nie może wypeÅniÄ Å¼Ä
dania, ponieważ protokóŠnie jest znany</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>żÄ
dana operacja jest niewÅaÅciwa dla tego protokoÅu</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>wykryto nieznany bÅÄ
d zwiÄ
zany z sieciÄ
</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>wykryto nieznany bÅÄ
d zwiÄ
zany z serwerem proxy</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>wykryto nieznany bÅÄ
d zwiÄ
zany z zawartoÅciÄ
zdalnÄ
</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>wykryto podziaÅ protokoÅu (bÅÄ
d analizy, nieprawidÅowe lub nieoczekiwane reakcje itp.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1340,6 +1585,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Eksportowanie nieudane...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Eksportowanie jako plik UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Eksportowanie dokumentu...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Eksportowanie zakoÅczone powodzeniem.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Eksportowanie zakoÅczone niepowodzeniem.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Eksportowanie do formatu Sankore UBX</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1426,6 +1698,10 @@
<source>Object informations</source>
<translation>Informacje o obiekcie</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>Dodaj</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1508,6 +1784,14 @@
<source>Trash</source>
<translation>Kosz</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>ZakÅadki</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>SieÄ Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1541,6 +1825,22 @@
<source>Visible on Extended Screen</source>
<translation>Widoczne na ekranie rozszerzonym</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Dodaj dziaÅanie</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>UsuÅ ÅÄ
cze do dźwiÄku</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>UsuÅ ÅÄ
cze do strony</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>UsuÅ ÅÄ
cze do adresu url w sieci web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1556,6 +1856,22 @@
<source>Go to Content Source</source>
<translation>Przejdź do źródÅa zawartoÅci</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Dodaj dziaÅanie</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>UsuÅ ÅÄ
cze do dźwiÄku</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>UsuÅ ÅÄ
cze do strony</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>UsuÅ ÅÄ
cze do adresu url w sieci web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1576,13 +1892,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>SieÄ Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1643,6 +1952,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (zestaw dokumentów) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1857,6 +2173,142 @@ Czy chcesz ignorowaÄ te bÅÄdy dla tego hosta?</translation>
<source>Marker is pressure sensitive</source>
<translation>Marker jest czuÅy na nacisk</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>DomyÅlne</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabski</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>BuÅgarski</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>KataloÅski</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Czeski</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>DuÅski</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Niemiecki</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grecki</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Angielski</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Angielski (odmiana brytyjska)</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>HiszpaÅski</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Francuski</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Francuski (odmiana szwajcarska)</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>WÅoski</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebrajski</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>JapoÅski</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>KoreaÅski</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malgaski</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norweski</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Holenderski</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polski</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Romansz</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>RumuÅski</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Rosyjski</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>SÅowacki</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Szwedzki</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turecki</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ChiÅski</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ChiÅski uproszczony</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>ChiÅski tradycyjny</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>KorsykaÅski</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hinduski</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1898,6 +2350,17 @@ Czy chcesz ignorowaÄ te bÅÄdy dla tego hosta?</translation>
<source>My Movies</source>
<translation>Moje filmy</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/SieÄ Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Widoczne nastÄpnym razem</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2111,20 +2574,16 @@ Czy chcesz ignorowaÄ te bÅÄdy dla tego hosta?</translation>
<source>Cache</source>
<translation>PamiÄÄ podrÄczna</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>CaÅa strona</translation>
</message>
<message>
- <source>Web</source>
- <translation>SieÄ Web</translation>
+ <source>Embed </source>
+ <translation>Osadź</translation>
</message>
</context>
<context>
@@ -2471,6 +2930,52 @@ Aby uzyskaÄ dostÄp do zaktualizowanych dokumentów, należy ponownie uruchomi
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Wybierz zawartoÅÄ do zÅapania</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nazwa aplikacji</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Ograniczenie i wyÅÄ
czenie odpowiedzialnoÅci</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Ta funkcja zostaÅa opracowana pod kÄ
tem najpopularniejszych stron internetowych.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Prosimy przestrzegaÄ praw autorskich przy tworzeniu ÅÄ
czy i Åapaniu zawartoÅci z sieci Web.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>Pobierz do
+biblioteki</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>Pobierz do
+bieżÄ
cej strony</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>Dodaj ÅÄ
cze do biblioteki</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>Dodaj Åacze do
+bieżÄ
cej strony</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2547,6 +3052,10 @@ p, li { white-space: pre-wrap; }
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">KlikajÄ
c âWyÅlijâ, poÅwiadczasz, że posiadasz wszelkie prawa do zawartoÅci lub masz zezwolenie wÅaÅciciela zawartoÅci na jej publiczne udostÄpnianie w serwisie YouTube, a także, że zawartoÅÄ jest zgodna z Warunkami korzystania z serwisu YouTube dostÄpnymi pod adresem </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html>
</translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>PrzywrÃ³Ä poÅwiadczenia przy ponownym rozruchu</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2743,22 +3252,10 @@ p, li { white-space: pre-wrap; }
<translation>Licencje</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>SieÄ</translation>
</message>
@@ -2802,10 +3299,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>HasÅo:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>Identyfikator Planète Sankoré</translation>
- </message>
<message>
<source>User:</source>
<translation>Użytkownik:</translation>
@@ -2815,550 +3308,70 @@ p, li { white-space: pre-wrap; }
<translation>HasÅo:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Credits</source>
<translation>PodziÄkowania</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>Wskazówki przy uruchomieniu</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly i Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Oprogramowanie jest dostarczane na zasadzie âtakie, jakie jestâ, bez żadnych wyraźnych ani dorozumianych gwarancji. Autorzy w żadnym wypadku nie ponoszÄ
odpowiedzialnoÅci za jakiekolwiek szkody wynikajÄ
ce z użytkowania oprogramowania.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Oprogramowanie może byÄ wykorzystywane przez każdego i w dowolnym celu â również komercyjnie â a także dowolnie modyfikowane i udostÄpniane, przy czym warunkiem jest zastosowanie siÄ do nastÄpujÄ
cych ograniczeÅ:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 1. Zabrania siÄ rozpowszechniania nieprawdziwych informacji na temat źródÅa oprogramowania; nie wolno przywÅaszczaÄ sobie autorstwa oryginalnego programu. JeÅli wykorzystujesz oprogramowanie w produkcie, notka o autorach w dokumentacji produktu byÅaby mile widziana, niemniej nie jest wymagana.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Zmodyfikowane wersje źródÅowe muszÄ
byÄ wyraźnie oznaczone i nie mogÄ
byÄ przedstawiane jako oryginalne oprogramowanie.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. Zabrania siÄ usuwania tych informacji prawnych z jakichkolwiek dystrybucji źródÅowych oraz ich modyfikowania.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Show start up tips</source>
+ <translation>Pokazuj wskazówki przy uruchomieniu</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>JÄzyk</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Wybierz jÄzyk</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Nowy jÄzyk zostanie wczytany przy ponownym uruchomieniu</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Zamknij Open-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Identyfikator Planète Sankoré na potrzeby eksportowania pliku</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>PrzywrÃ³Ä poÅwiadczenia przy ponownym rozruchu</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />Open-Sankoré jest oprogramowaniem bezpÅatnym: możesz je udostÄpniaÄ i modyfikowaÄ na warunkach mniejszej ogólnej powszechnej licencji GNU wydanej przez Free Software Foundation, przy czym wersjÄ
obowiÄ
zujÄ
cÄ
licencji jest wersja 2 lub nowsza. Kod źródÅowy oprogramowania znajdziesz pod adresem </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Oprogramowanie Open-Sankoré jest udostÄpniane z nadziejÄ
, że okaże siÄ przydatne, ale NIE JEST OBJÄTE Å»ADNÄ GWARANCJÄ; nie ma zastosowania nawet dorozumiana gwarancja WARTOÅCI HANDLOWEJ lub PRZYDATNOÅCI DO OKREÅLONEGO CELU. WiÄcej informacji znajdziesz w mniejszej ogólnej powszechnej licencji GNU poniżej.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Licencje zostaÅy sporzÄ
dzone w jÄzyku angielskim, bÄdÄ
cym jÄzykiem oficjalnego, uwierzytelnionego tÅumaczenia.</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_pt.ts b/Sankore-3.1/resources/i18n/sankore_pt.ts
index 9373d73..891f612 100644
--- a/Sankore-3.1/resources/i18n/sankore_pt.ts
+++ b/Sankore-3.1/resources/i18n/sankore_pt.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Favorito</translation>
</message>
<message>
@@ -701,14 +702,6 @@
<translation>Configuração da Gravação de Podcast</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Captura de Flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Captura de Conteúdo Flash</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Captura de Web</translation>
</message>
@@ -729,14 +722,6 @@
<translation>Capturar uma Janela</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Conteúdo Web Embutido</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Capturar Conteúdo Web Embutido</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>Mostrar no Ecrã</translation>
</message>
@@ -825,6 +810,43 @@
<source>Group</source>
<translation>Grupo</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Descarregar para</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">biblioteca</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Descarregar para a Biblioteca</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Descarregar para</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">página corrente</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Descarregar para a página corrente</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Adicionar link à </p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">biblioteca</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Adicionar link à biblioteca</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Adicionar link à </p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">página corrente</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Adicionar link à página corrente</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Favorito</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -990,12 +1012,110 @@
<translation>Forma:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Tamanho:</translation>
+ <source>Alpha:</source>
+ <translation>Alfa:</translation>
</message>
<message>
- <source>Close</source>
- <translation>Fechar</translation>
+ <source>Geometry:</source>
+ <translation>Geometria:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Largura:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Altura:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Manter as proporções</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Modo:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Pré-visualizar:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Fechar cache:</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><largar conteúdo></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>As imagens não são aceites</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Não pode mostrar a informação</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>O ficheiro largado não é reconhecido como audio</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Iniciar ficheiro audio</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Adicionar link à página</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Adicionar link a uma página Web</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Arrastar o ficheiro audio da biblioteca para esta caixa</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Próxima Página</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Página anterior</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Página Principal</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Ãltima Página</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Página Número</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Inserir o texto url aqui</translation>
</message>
</context>
<context>
@@ -1060,42 +1180,6 @@
<translation>Remover Página</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Remover Documento</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Tem a certeza que quer remover o documento '%1'?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Vazar Lixo</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Tem a certeza que quer vazar a pasta Lixo? </translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>A vazar Lixo</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Pasta Lixo limpa</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Apagar Pasta</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Tem a certeza que quer apagar a pasta '%1' e todo o seu conteúdo?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Não há documentos selecionados!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Abrir Ficheiro Suportado</translation>
</message>
@@ -1162,6 +1246,14 @@
<source>Untitled Documents</source>
<translation>Documentos sem nome</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1249,6 +1341,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Aceitar</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Substituir</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>O nome %1 jáa existe.
+Manter este nomevai substituir o documento.
+Um novo nome vai criar um novo documento.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Os meus documentos</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modelos</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Lixo</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Documentos sem nome</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">A copiar página %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 de páginas copiadas</numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1267,6 +1412,106 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Download falhado.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>o servidor remoto recusou a conexão (o servidor não está a aceitar pedidos)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>o servidor remoto fechou a conexão prematuramente, antes da resposta ser completamente recebida e processada</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translatorcomment>anfitrião</translatorcomment>
+ <translation>o servidor anfitrião com esse nome não foi encontrado (nome de servidor inválido)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>a conexão com o servidor remoto expirou</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>a operação foi cancelada por pedido para abortar() ou fechada() antes de ter terminado.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>A negociação SSL/TLS falhou e a ligação encriptada não foi estabelecida. O sinal de sslErrors() deverá ter sido emitido.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>a conexão foi quebrada por desconexão da rede, no entanto o sistema iniciou a ligação para outro ponto de acesso. O pedido deve ser novamente submetido e será processado logo que a ligação seja restabelecida.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>A ligação ao servidor proxy foi recusada (o servidor proxy não está a aceitar pedidos)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>o servidor de proxy fechou a conexão prematuramente, antes da resposta ser completamente recebida e processada</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>o proxy anfitrião com esse nome não foi encontrado (nome de servidor inválido)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>a conexão com o proxy expirou ou o proxy não respondeu a tempo ao pedido enviado</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>o proxy requer autenticação para cumprir o pedido mas não aceitou nenhuma credencial fornecida (se houve alguma)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>o acesso ao conteúdo remoto foi negado (semelhante ao erro HTTP 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>a operação pedida ao conteúdo remoto não é permitida</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>o conteúdo remoto não foi encontrado no servidor (semelhante ao erro HTTP 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>o servidor remoto requer autenticação para mostrar o conteúdo mas não aceitou nenhuma credencial fornecida (se houve alguma)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>o pedido precisa de ser novamente enviado. O erro poderá ter acontecido pelos dados não poderem ser lidos uma segunda vez.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>o Acesso à Rede API não cumpriu o pedido porque o protocolo não é conhecido</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>a operação pedida é inválida para este protocolo</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>um erro desconhecido relacionado com a rede foi detetado</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>um erro desconhecido relacionado com o proxy foi detetado</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>um erro desconhecido relacionado com o conteúdo remoto foi detetado</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>uma quebra no protocolo foi detetada (erro de análise, resposta inválida ou inesperada, etc.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1335,6 +1580,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Falha ao exportar...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exportar como ficheiro UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>A exportar documento...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Exportação bem sucedida.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Falha na Exportação</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exportar para o Formato Sankore UBX</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1421,6 +1693,10 @@
<source>Object informations</source>
<translation>Informações do Objecto</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Adicionar</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1504,6 +1780,14 @@
<source>Trash</source>
<translation>Lixo</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Favoritos</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1537,6 +1821,22 @@
<source>Visible on Extended Screen</source>
<translation>VisÃvel em Ecrã Expandido</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Adicionar uma ação</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Remover link para audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Remover link para página</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Remover link para endereço web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1552,6 +1852,22 @@
<source>Go to Content Source</source>
<translation>Ir para a Fonte do Conteúdo</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Adicionar uma ação</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Remover link para audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Remover link para página</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Remover link para endereço web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1572,13 +1888,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1639,6 +1948,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation type="unfinished">Open-Sankoré (conjunto de documentos) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1764,12 +2080,138 @@ Quer ignorar estes erros, deste servidor?</translation>
<translation>Inglês</translation>
</message>
<message>
- <source>Russian</source>
- <translation>Russo</translation>
+ <source>Russian</source>
+ <translation>Russo</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Alemão</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Francês</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Francês (Suiço)</translation>
+ </message>
+</context>
+<context>
+ <name>UBPodcastController</name>
+ <message>
+ <source>Sankore Cast</source>
+ <translation>Sankore Cast</translation>
+ </message>
+ <message>
+ <source>Failed to start encoder ...</source>
+ <translation>Falha ao iniciar o codificador ...</translation>
+ </message>
+ <message>
+ <source>No Podcast encoder available ...</source>
+ <translation>Nenhum codificador de Podcast disponÃvel ...</translation>
+ </message>
+ <message>
+ <source>Part %1</source>
+ <translation>Parte %1</translation>
+ </message>
+ <message>
+ <source>on your desktop ...</source>
+ <translation>no seu ambiente de trabalho ...</translation>
+ </message>
+ <message>
+ <source>in folder %1</source>
+ <translation>na pasta %1</translation>
+ </message>
+ <message>
+ <source>Podcast created %1</source>
+ <translation>Podcast criado %1</translation>
+ </message>
+ <message>
+ <source>Podcast recording error (%1)</source>
+ <translation>Erro de gravação do Podcast (%1)</translation>
+ </message>
+ <message>
+ <source>Default Audio Input</source>
+ <translation>Entrada de áudio padrão</translation>
+ </message>
+ <message>
+ <source>No Audio Recording</source>
+ <translation>Sem gravação de áudio</translation>
+ </message>
+ <message>
+ <source>Small</source>
+ <translation>Pequeno</translation>
+ </message>
+ <message>
+ <source>Medium</source>
+ <translation>Médio</translation>
+ </message>
+ <message>
+ <source>Full</source>
+ <translation>Completo</translation>
+ </message>
+ <message>
+ <source>Publish to Intranet</source>
+ <translation>Publicar na Intranet</translation>
+ </message>
+ <message>
+ <source>Publish to Youtube</source>
+ <translation>Publicar no Youtube</translation>
+ </message>
+</context>
+<context>
+ <name>UBPreferencesController</name>
+ <message>
+ <source>version: </source>
+ <translation>versão: </translation>
+ </message>
+ <message>
+ <source>Marker is pressure sensitive</source>
+ <translation>O marcador é sensÃvel à pressão</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation>Omissão</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Ãrabe</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Búlgaro</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Catalão</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Checo</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Dinamarquês</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Alemão</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grego</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Inglês</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Inglês UK</translation>
</message>
<message>
- <source>German</source>
- <translation>Alemão</translation>
+ <source>Spanish</source>
+ <translation>Castelhano</translation>
</message>
<message>
<source>French</source>
@@ -1779,79 +2221,89 @@ Quer ignorar estes erros, deste servidor?</translation>
<source>Swiss French</source>
<translation>Francês (Suiço)</translation>
</message>
-</context>
-<context>
- <name>UBPodcastController</name>
<message>
- <source>Sankore Cast</source>
- <translation>Sankore Cast</translation>
+ <source>Italian</source>
+ <translation>Italiano</translation>
</message>
<message>
- <source>Failed to start encoder ...</source>
- <translation>Falha ao iniciar o codificador ...</translation>
+ <source>Hebrew</source>
+ <translation>Hebraico</translation>
</message>
<message>
- <source>No Podcast encoder available ...</source>
- <translation>Nenhum codificador de Podcast disponÃvel ...</translation>
+ <source>Japanese</source>
+ <translation>Japonês</translation>
</message>
<message>
- <source>Part %1</source>
- <translation>Parte %1</translation>
+ <source>Korean</source>
+ <translation>Coreano</translation>
</message>
<message>
- <source>on your desktop ...</source>
- <translation>no seu ambiente de trabalho ...</translation>
+ <source>Malagasy</source>
+ <translation>Malgaxe</translation>
</message>
<message>
- <source>in folder %1</source>
- <translation>na pasta %1</translation>
+ <source>Norwegian</source>
+ <translation>Norueguês</translation>
</message>
<message>
- <source>Podcast created %1</source>
- <translation>Podcast criado %1</translation>
+ <source>Dutch</source>
+ <translation>Holandês</translation>
</message>
<message>
- <source>Podcast recording error (%1)</source>
- <translation>Erro de gravação do Podcast (%1)</translation>
+ <source>Polish</source>
+ <translation>Polaco</translation>
</message>
<message>
- <source>Default Audio Input</source>
- <translation>Entrada de áudio padrão</translation>
+ <source>Romansh</source>
+ <translation>Romanche</translation>
</message>
<message>
- <source>No Audio Recording</source>
- <translation>Sem gravação de áudio</translation>
+ <source>Romanian</source>
+ <translation>Romeno</translation>
</message>
<message>
- <source>Small</source>
- <translation>Pequeno</translation>
+ <source>Russian</source>
+ <translation>Russo</translation>
</message>
<message>
- <source>Medium</source>
- <translation>Médio</translation>
+ <source>Slovak</source>
+ <translation>Eslovaco</translation>
</message>
<message>
- <source>Full</source>
- <translation>Completo</translation>
+ <source>Swedish</source>
+ <translation>Sueco</translation>
</message>
<message>
- <source>Publish to Intranet</source>
- <translation>Publicar na Intranet</translation>
+ <source>Turkish</source>
+ <translation>Turco</translation>
</message>
<message>
- <source>Publish to Youtube</source>
- <translation>Publicar no Youtube</translation>
+ <source>Chinese</source>
+ <translation>Chinês</translation>
</message>
-</context>
-<context>
- <name>UBPreferencesController</name>
<message>
- <source>version: </source>
- <translation>versão: </translation>
+ <source>Chinese Simplified</source>
+ <translation>Chinês Simplificado</translation>
</message>
<message>
- <source>Marker is pressure sensitive</source>
- <translation>O marcador é sensÃvel à pressão</translation>
+ <source>Chinese Traditional</source>
+ <translation>Chinês Tradicional</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1894,6 +2346,17 @@ Quer ignorar estes erros, deste servidor?</translation>
<source>My Movies</source>
<translation>Os meus filmes</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Visivel na próxima vez</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2103,20 +2566,16 @@ Quer ignorar estes erros, deste servidor?</translation>
<source>Cache</source>
<translation>Cache</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation type="obsolete">Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Página completa</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Embutido </translation>
</message>
</context>
<context>
@@ -2466,6 +2925,49 @@ Por favor, reinicie o aplicativo para aceder aos documentos atualizados.</transl
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Selecionar o conteúdo a capturar:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nome da Aplicação</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Restrição e aviso. </translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Esta função foi desenvolvida para funcionar nas páginas web mais comuns.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Por favor respeite os direitos de autor para a criação de links ou a captura de conteúdos da web.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download PDF Document: would you prefer to download the PDF file or add it to the current Sankore document?</source>
@@ -2543,7 +3045,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>Restaurar as credenciais ao reiniciar</translation>
</message>
</context>
<context>
@@ -2729,22 +3231,10 @@ p, li { white-space: pre-wrap; }
<translation>Licenças</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>About</source>
<translation>Sobre</translation>
</message>
@@ -2798,11 +3288,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Senha:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translatorcomment>"Planète Sankoré ID"</translatorcomment>
- <translation type="obsolete">Planète Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Utilizador:</translation>
@@ -2816,698 +3301,62 @@ p, li { white-space: pre-wrap; }
<translation>Open-Sankoré</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation></translation>
- </message>
- <message>
<source>Credits</source>
<translation>Créditos</translation>
</message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ID para exportar ficheiro</translation>
+ </message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">As licenças estão em Inglês para respeitar a tradução oficial e legalmente aprovada.</span></p></td></tr></table></body></html></translation>
+ <source>Restore credentials on reboot </source>
+ <translation>Restaurar credenciais ao reiniciar </translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Start up tips</source>
+ <translation>Dicas</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
+ <message>
+ <source>Show start up tips</source>
+ <translation>Mostrar dicas ao iniciar</translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></translation>
+ <message>
+ <source>Language</source>
+ <translation>LÃngua</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Selecione a LÃngua</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>A nova LÃingua irá ser carregada ao reiniciar</translation>
</message>
<message utf8="true">
- <source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <source>Close Open-Sankoré</source>
+ <translation>Fechar Open-Sankoré</translation>
</message>
<message>
- <source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Xpdf</source>
+ <translation>xpdf</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>QuaZIP</source>
+ <translation>Quazip</translation>
</message>
- <message utf8="true">
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_ro.ts b/Sankore-3.1/resources/i18n/sankore_ro.ts
index 47e9ea0..dc1895a 100644
--- a/Sankore-3.1/resources/i18n/sankore_ro.ts
+++ b/Sankore-3.1/resources/i18n/sankore_ro.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Semn de carte</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>Configurare înregistrare podcast</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Blocare flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Blocare conţinut flash</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Blocare web</translation>
</message>
@@ -728,14 +721,6 @@
<translation>Capturare fereastrÄ</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Incorporare conţinut web</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Capturare conţinut web incorporabil</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>AfiÅare pe ecran</translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>Grupare</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">DescÄrcare în</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotecÄ</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>DescÄrcare în bibliotecÄ</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">DescÄrcare în</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">pagina curentÄ</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>DescÄrcare în pagina curentÄ</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">AdÄugare link cÄtre</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotecÄ</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>AdÄugare link cÄtre bibliotecÄ</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">AdÄugare link cÄtre</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">pagina curentÄ</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>AdÄugare link cÄtre pagina curentÄ</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Semn de carte</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1010,110 @@
<translation>FormÄ:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Dimensiune:</translation>
+ <source>Alpha:</source>
+ <translation>Alfa:</translation>
</message>
<message>
- <source>Close</source>
- <translation>Ãnchidere</translation>
+ <source>Geometry:</source>
+ <translation>Geometrie:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>LÄÈime:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>ÃnÄlÈime:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>MenÈinere proporÈii</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Mod:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Previzualizare:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Ãnchidere cache</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><plasare conÈinut></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Imaginile nu se acceptÄ</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Datele nu pot fi afiÈate</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>FiÈierul plasat nu este recunoscut ca fiÈier audio</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Redare fiÈier audio</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>AdÄugare link cÄtre paginÄ</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>AdÄugare link cÄtre o paginÄ Web</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>TrageÈi Èi plasaÈi fiÈierul audio din bibliotecÄ Ã®n aceastÄ casetÄ</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Pagina urmÄtoare</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Pagina precedentÄ</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Titlu paginÄ</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Ultima paginÄ</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>NumÄr paginÄ</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>InseraÈi textul url aici</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>Eliminare paginÄ</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Eliminare document</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>SunteÅ£i siguri cÄ doriÅ£i sÄ eliminaÅ£i documentul %1?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Golire coÅ de gunoi</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>SunteÅ£i siguri cÄ doriÅ£i sÄ goliÅ£i coÅul de gunoi?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Golire coÅ de gunoi</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>CoÅ de gunoi golit</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Eliminare folder</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>SunteÅ£i siguri cÄ doriÅ£i sÄ eliminaÅ£i folderul '%1' Åi toate conÅ£inuturile sale?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Nu s-a selectat niciun document!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Deschidere fiÅier suportat</translation>
</message>
@@ -1160,6 +1244,14 @@
<source>Untitled Documents</source>
<translation>Documente fÄrÄ titlu</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>Aceasta este o acÈiune ireversibilÄ!</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1247,6 +1339,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Acceptare</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Ãnlocuire</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Anulare</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Numele %1 este deja utilizat.
+PÄstrând acest nume se va înlocui documentul.
+Dând un nou nume se va creea un nou document.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Documentele mele</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modele</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>CoÅ de gunoi</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Documente fÄrÄ titlu</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Copiere pagina %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 pagini copiate</numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1265,6 +1410,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>DescÄrcare nereuÈitÄ.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>serverul de la distanÈÄ a refuzat conexiunea (serverul nu acceptÄ cereri)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>serverul de la distanÈÄ a închis conexiunea prea devreme, înainte ca întreg rÄspunsul sÄ fi fost primit Èi procesat</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>numele calculatorului gazdÄ de la distanÈÄ nu s-a gÄsit (nume de gazdÄ nevalid)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>conexiunea la serverul de la distanÈÄ a expirat</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>operaÈiunea a fost anulatÄ prin cereri de anulare() sau de închidere() înainte de a fi terminatÄ.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>legÄtura SSL/TSL nu a reuÈit Èi canalul codificat nu a putut fi stabilit. Semnalul sslErrors() ar fi trebuit sÄ fi fie emis.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>conexiunea a fost întreruptÄ datoritÄ Ã®ntreruperii reÈelei, totuÈi, sistemul a iniÈiat roaming-ul spre alt punct de acces. Cererea trebuie retrimisÄ Èi va fi procesatÄ de îndatÄ ce conexiunea se restabileÈte.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>conexiunea la serverul proxy a fost refuzatÄ (serverul proxy nu acceptÄ cereri)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>serverul proxy a închis conexiunea prea devreme, înainte ca întreg rÄspunsul sÄ fi fost primit Èi procesat</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>numele calculatorului gazdÄ proxy nu s-a gÄsit (nume de gazdÄ proxy nevalid)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>conexiunea la proxy a expirat sau proxy nu a rÄspuns la timp la cererea trimisÄ</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>proxy cere autentificarea pentru a onora cererea, dar nu acceptÄ orice credenÈiale oferite (dacÄ existÄ)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>accesul la conÈinutul de la distanÈÄ a fost refuzat (similar cu eroarea HTTP 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>operaÈiunea solicitatÄ pe conÈinutul de la distanÈÄ nu este permisÄ</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>conÈinutul de la distanÈÄ nu s-a gÄsit pe server (similar cu eroarea HTTP 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>serverul de la distanÈÄ cere autentificarea pentru a furniza conÈinutul, dar credenÈialele furnizate nu au fost acceptate (dacÄ existÄ)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>cererea a trebuit sÄ fie trimisÄ din nou, dar nu a reuÈit, de exemplu, din cauzÄ cÄ datele încÄrcate nu au putut fi citite a doua oarÄ.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>API pentru acces la reÈea nu poate onora cererea, deoarece protocolul nu este cunoscut</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>operaÈiunea solicitatÄ este nevalidÄ pentru acest protocol</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>s-a detectat o eroare necunoscutÄ legatÄ de reÈea</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>s-a detectat o eroare necunoscutÄ legatÄ de proxy</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>s-a detectat o eroare necunoscutÄ legatÄ de conÈinutul de la distanÈÄ</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>s-a detectat o întrerupere în protocol (eroare de analizÄ de sintaxÄ, rÄspunsuri nevalide sau neaÈteptate, etc.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1333,6 +1577,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Nu s-a reuÈit exportarea...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exportare ca fiÅier UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Exportare document...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Exportare reuÅitÄ.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Exportare nereuÅitÄ.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exportare în format UBX Sankore</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1419,6 +1690,10 @@
<source>Object informations</source>
<translation>Informaţii despre obiect</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>AdÄugare</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1501,6 +1776,14 @@
<source>Trash</source>
<translation>CoÅ de gunoi</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Semne de carte</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1534,6 +1817,22 @@
<source>Visible on Extended Screen</source>
<translation>Vizibil pe ecran extins</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>AdÄugaÈi o acÈiune</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Eliminare link cÄtre audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Eliminare link cÄtre paginÄ</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Eliminare link cÄtre url web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1549,6 +1848,22 @@
<source>Go to Content Source</source>
<translation>Accesare sursÄ conÅ£inut</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>AdÄugaÈi o acÈiune</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Eliminare link cÄtre audio</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Eliminare link cÄtre paginÄ</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Eliminare link cÄtre url web</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1569,13 +1884,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1636,6 +1944,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (set de documente) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1850,6 +2165,142 @@ DoriÅ£i sÄ ignoraÅ£i aceste erori pentru acest host?</translation>
<source>Marker is pressure sensitive</source>
<translation>Markerul este sensibil la apÄsare</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>ImplicitÄ</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>ArabÄ</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>BulgarÄ</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>CatalanÄ</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>CehÄ</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>DanezÄ</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>GermanÄ</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>GreacÄ</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>EnglezÄ</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>EnglezÄ UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>SpaniolÄ</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>FrancezÄ</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>FrancezÄ elveÈianÄ</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>ItalianÄ</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>EbraicÄ</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>JaponezÄ</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>CoreeanÄ</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>MalgaÈÄ</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>NorvegianÄ</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>OlandezÄ</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>PolonezÄ</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>RetoromanÄ</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>RomânÄ</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>RusÄ</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>SlovacÄ</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>SuedezÄ</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>TurcÄ</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ChinezÄ</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ChinezÄ simplificatÄ</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>ChinezÄ tradiÈionalÄ</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>CorsicanÄ</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hindi</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1891,6 +2342,17 @@ DoriÅ£i sÄ ignoraÅ£i aceste erori pentru acest host?</translation>
<source>My Movies</source>
<translation>Filmele mele</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Vizibil data viitoare</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2104,20 +2566,16 @@ DoriÅ£i sÄ ignoraÅ£i aceste erori pentru acest host?</translation>
<source>Cache</source>
<translation>Cache</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>ToatÄ pagina</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation>Inserare</translation>
</message>
</context>
<context>
@@ -2464,6 +2922,53 @@ VÄ rugÄm sÄ reporniÅ£i aplicaÅ£ia pentru a accesa documentele actualizate.</t
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Selectare conÈinut de captat:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Nume aplicaţie</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>RestricÈii Èi clauzÄ de declinare a rÄspunderii.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>AceastÄ funcÈie este proiectatÄ pentru a funcÈiona cu majoritatea paginilor web comune.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>VÄ rugÄm sÄ respectaÈi drepturile de autor pentru crearea linkurilor sau captarea de conÈinut de pe web.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>DescÄrcare în
+bibliotecÄ</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>DescÄrcare în
+pagina curentÄ</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>AdÄugare link cÄtre
+bibliotecÄ</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>AdÄugare link cÄtre
+pagina curentÄ</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2539,6 +3044,10 @@ p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">FÄcând clic pe'ÃncÄrcare,' certificaÅ£i faptul cÄ deÅ£ineÅ£i toate drepturile asupra conÅ£inutului sau cÄ sunteÅ£i autorizat de titular sÄ faceÅ£i public conÅ£inutul pe YouTube Åi cÄ este conform în celelalte privinÅ£e cu Termenii de utilizare pentru YouTube de pe</span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>Restabilire credenÈiale la reiniÈializare</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2735,22 +3244,10 @@ p, li { white-space: pre-wrap; }
<translation>Licenţe</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Reţea</translation>
</message>
@@ -2794,10 +3291,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>ParolÄ:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>ID Planète Sankoré</translation>
- </message>
<message>
<source>User:</source>
<translation>Utilizator:</translation>
@@ -2807,550 +3300,70 @@ p, li { white-space: pre-wrap; }
<translation>ParolÄ:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation></translation>
- </message>
- <message>
<source>Credits</source>
<translation>Credite</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation></translation>
+ <source>Start up tips</source>
+ <translation>RecomandÄri pentru pornire</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Drept de autor (C) 1995-1998 Jean-loup Gailly Èi Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Acest software este furnizat 'ca atare', fÄrÄ nicio garanÈie expresÄ sau implicitÄ. Autorii nu vor fi ÈinuÈi responsabili, în niciun caz, pentru daunele rezultate din utilizarea acestui software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Este permis oricui sÄ utilizeze acest, în orice scopuri, inclusiv aplicaÈii comerciale Èi sÄ Ã®l modifice Èi redistribuie gratuit, sub rezerva urmÄtoarelor restricÈii:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 1. Originea acestui software nu trebuie denaturatÄ; nu aveÈi voie sÄ pretindeÈi cÄ dumneavoastrÄ aÈi scris software-ul original. DacÄ folosiÈi acest software într-un produs, o declaraÈie în documentaÈia produsului ar fi apreciatÄ, dar nu este obligatorie.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Versiunile modificate ale sursei trebuie precizate ca atare în mod clar Èi nu trebuie prezentate denaturat ca fiind software-ul original.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. AceastÄ Ã®nÈtiinÈare nu trebuie eliminatÄ sau modificatÄ din nicio distribuire a sursei.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Show start up tips</source>
+ <translation>AfiÈare recomandÄri pentru pornire</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>LimbÄ</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>SelectaÈi o limbÄ</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Noua limbÄ va fi încÄrcatÄ la urmÄtoarea repornire</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Ãnchidere Open-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>ID Planète Sankoré pentru exportare fiÈier</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>Restabilire credenÈiale la reiniÈializare </translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />Open-Sankoré este un software gratuit: puteÈi sÄ-l redistribuiÈi Èi/sau sÄ-l modificaÈi, respectând termenii LicenÈei Publice Generale Lesser GNU aÈa cum a fost publicatÄ de Free Software Foundation, în versiunea 2 sau în orice versiune mai recentÄ. PuteÈi gÄsi codul sursÄ al acestui software pe </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré se distribuie în speranÈa cÄ va fi util, dar FÄRÄ NICIO GARANÈIE; chiar Èi fÄrÄ garanÈia implicitÄ de COMERCIALIZARE sau de ADAPTARE PENTRU UN SCOP PARTICULAR. A se vedea LicenÈa PublicÄ GeneralÄ GNU de mai jos, pentru mai multe detalii.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact: <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">LicenÈele sunt în englezÄ, pentru a respecta traducerea aprobatÄ oficialÄ Èi legalÄ.</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_ru.ts b/Sankore-3.1/resources/i18n/sankore_ru.ts
index b3ac888..29ee5a9 100644
--- a/Sankore-3.1/resources/i18n/sankore_ru.ts
+++ b/Sankore-3.1/resources/i18n/sankore_ru.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Ðакладка</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>ÐонÑигÑÑиÑоваÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð¾Ð´ÐºÐ°ÑÑа</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>ÐаÑ
Ð²Ð°Ñ ÑлÑÑ</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>ÐаÑ
Ð²Ð°Ñ ÑлÑÑ-ÑодеÑжимого</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>ÐаÑ
Ð²Ð°Ñ Ð²ÐµÐ±</translation>
</message>
@@ -728,14 +721,6 @@
<translation>СделаÑÑ Ñнимок окна</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>ÐÑÑавиÑÑ Ð²ÐµÐ±-ÑодеÑжимое</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>ÐаÑ
ваÑиÑÑ Ð²ÐµÐ±-ÑодеÑжимого Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð²ÑÑавки</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>ÐоказаÑÑ Ð½Ð° мониÑоÑе</translation>
</message>
@@ -823,6 +808,44 @@
<source>Group</source>
<translation>СгÑÑппиÑоваÑÑ</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>ÐагÑÑзиÑÑ Ð² библиоÑекÑ</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>ÐагÑÑзиÑÑ Ð½Ð° ÑекÑÑÑÑ ÑÑÑаниÑÑ</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>ÐобавиÑÑ ÑÑÑÐ»ÐºÑ Ð² библиоÑекÑ</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>ÐобавиÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑекÑÑÑÑ ÑÑÑаниÑÑ</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translatorcomment>ÐодÑказка</translatorcomment>
+ <translation>Ðакладка</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1011,110 @@
<translation>ФоÑма:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>РазмеÑÑ:</translation>
+ <source>Alpha:</source>
+ <translation>ÐлÑÑа:</translation>
</message>
<message>
- <source>Close</source>
- <translation>ÐакÑÑÑÑ</translation>
+ <source>Geometry:</source>
+ <translation>ÐеомеÑÑиÑ:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>ШиÑина:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>ÐÑÑоÑа:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>СоÑ
ÑаниÑÑ Ð¿ÑопÑоÑÑии</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Режим:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>ÐÑедпÑоÑмоÑÑ:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>ÐакÑÑÑÑ cache</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation>Ðо кликÑ</translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation>ÐоÑÑоÑннÑй</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><бÑоÑиÑÑ ÑодеÑжимое></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>ÐедопÑÑÑимÑй ÑоÑÐ¼Ð°Ñ ÐºÐ°ÑÑинок</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Ðевозможно оÑобÑазиÑÑ Ð´Ð°Ð½Ð½Ñе</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Файл не ÑаÑпознан как аÑдио Ñайл</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>ÐÑоигÑаÑÑ Ð°Ñдио Ñайл</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>ÐобавиÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÑÑаниÑÑ</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>ÐобавиÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° веб ÑÑÑаниÑÑ</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>ÐеÑемеÑÑиÑе аÑдио Ñайл из библиоÑеки в окно</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ðк</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>СледÑÑÑÐ°Ñ ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>ÐÑедÑдÑÑÐ°Ñ ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>ТиÑÑлÑÐ½Ð°Ñ ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>ÐоÑледнÑÑ ÑÑÑаниÑа</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>ÐÐ¾Ð¼ÐµÑ ÑÑÑаниÑÑ</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>ÐÑÑавÑÑе ÑекÑÑ ÑÑÑлки ÑÑда</translation>
</message>
</context>
<context>
@@ -1058,42 +1179,6 @@
<translation>УдалиÑÑ ÑÑÑаниÑÑ</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>УдалиÑÑ Ð´Ð¾ÐºÑменÑ</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>ÐÑ ÑвеÑенÑ, ÑÑо Ñ
оÑиÑе ÑдалиÑÑ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ '%1'?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>ÐÑиÑÑиÑÑ ÐºÐ¾ÑзинÑ</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>ÐÑ ÑвеÑенÑ, ÑÑо Ñ
оÑиÑе оÑиÑÑиÑÑ ÐºÐ¾ÑзинÑ?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>ÐÑиÑÑка коÑзинÑ</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>ÐоÑзина пÑÑÑа</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>УдалиÑÑ Ð¿Ð°Ð¿ÐºÑ</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>ÐÑ ÑвеÑенÑ, ÑÑо Ñ
оÑиÑе ÑдалиÑÑ Ð¿Ð°Ð¿ÐºÑ '%1 и вÑе ее ÑодеÑжимое?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>ÐиÑего не вÑбÑано!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>ÐÑкÑÑÑÑ Ñайл поддеÑживаемого ÑоÑмаÑа</translation>
</message>
@@ -1160,6 +1245,14 @@
<source>Untitled Documents</source>
<translation>ÐокÑменÑÑ Ð±ÐµÐ· ÐазваниÑ</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>ÐейÑÑвие необÑаÑимо!</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation>ÐокÑменÑÑ "модели" не ÑедакÑиÑÑÑÑÑÑ. СкопиÑÑйÑе докÑÐ¼ÐµÐ½Ñ Ð² "Ðои докÑменÑÑ" Ð´Ð»Ñ Ñого ÑÑÐ¾Ð±Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло Ñ Ð½Ð¸Ð¼Ð¸ ÑабоÑаÑÑ</translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1247,6 +1340,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>ÐÑинÑÑÑ</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>ÐамениÑÑ</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>ÐÑмена</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>ÐÐ¼Ñ Ñайла %1 Ñже иÑполÑзÑеÑÑÑ.
+СоÑ
Ñанение ÑÑого имени Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ ÑÑÑеÑÑвÑÑÑий докÑменÑ.
+Создание нового имени ÑоздаÑÑ Ð½Ð¾Ð²Ñй докÑменÑ.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Ðои докÑменÑÑ</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Ðодели</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>ÐоÑзина</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>ÐокÑменÑÑ Ð±ÐµÐ· гÑÑппÑ</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation>ÐопиÑование ÑÑÑаниÑÑ %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation>
+ <numerusform>%1 ÑÑÑаниÑÑ ÑкопиÑовано</numerusform>
+ <numerusform>%1 ÑÑÑÐ°Ð½Ð¸Ñ ÑкопиÑовано</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1265,6 +1411,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>ÐагÑÑзка не завеÑÑена.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>УдаленнÑй ÑеÑÐ²ÐµÑ ÑбÑоÑил Ñоединение (ÑеÑÐ²ÐµÑ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°Ð¿ÑоÑÑ)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>УдаленнÑй ÑеÑÐ²ÐµÑ Ð¿ÑеждевÑеменно закÑÑл Ñоединение, до Ñого как оÑÐ²ÐµÑ ÑеÑвеÑа бÑл полÑÑен полноÑÑÑÑ</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>Удаленное Ð¸Ð¼Ñ Ñ
оÑÑа не найдено (invalid hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>ÐÑÐµÐ¼Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑдаленнÑм ÑеÑвеÑом иÑÑекло</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>ÐпеÑаÑÐ¸Ñ Ð±Ñла оÑменена вÑзовами abort() или close() до завеÑÑениÑ.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>SSL/TSL Ñоединение не ÑÑÑановлено и ÑиÑÑованнÑй канал не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑановлен. Сигнал sslErrors() должен бÑÑÑ ÑгенеÑиÑован.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>Соединение ÑазоÑвано по пÑиÑине недоÑÑÑпноÑÑи ÑеÑи, однако ÑиÑÑема пÑоиниÑиализиÑовала ÑвÑÐ·Ñ Ñ ÑоÑкой доÑÑÑпа. ÐапÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð¿ÐµÑедан Ñнова и бÑÐ´ÐµÑ Ð¾Ð±ÑабоÑан когда ÑеÑÑ Ð²Ð¾ÑÑÑановиÑÑÑ.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>Соединение Ñ Ð¿ÑокÑи ÑеÑвеÑом бÑло ÑбÑоÑено (пÑокÑи ÑеÑÐ²ÐµÑ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°Ð¿ÑоÑÑ)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>Ðозможно пÑокÑи ÑеÑÐ²ÐµÑ Ð¿ÑеждевÑеменно закÑÑл Ñоединение, до Ñого как оÑÐ²ÐµÑ Ð±Ñл полÑÑен и обÑабоÑан полноÑÑÑÑ</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>ÐÐ¼Ñ Ñ
оÑÑа пÑокÑи не найдено (invalid proxy hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>ТаймаÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð¿ÑокÑи или пÑокÑи не оÑвеÑÐ°ÐµÑ Ð²Ð¾Ð²ÑÐµÐ¼Ñ Ð½Ð° запÑоÑÑ</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>ÐÑокÑи ÑÑебÑÐµÑ Ð°ÑÑенÑиÑикаÑии Ð´Ð»Ñ Ð¾Ð±ÑабоÑки запÑоÑа, но не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿ÑедложеннÑе пакеÑÑ (еÑли имеÑÑÑÑ)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>ÐоÑÑÑп к ÑÐ´Ð°Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ ÑодеÑÐ¶Ð¸Ð¼Ð¾Ð¼Ñ Ð·Ð°Ð¿ÑеÑен (аналогиÑно HTTP error 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>ÐапÑоÑÐµÐ½Ð½Ð°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ñ ÑдаленнÑм ÑодеÑжимÑм не ÑазÑеÑена</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>Удаленное ÑодеÑжимое не найдено на ÑеÑвеÑе (аналогиÑно HTTP error 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>УдаленнÑй ÑеÑÐ²ÐµÑ ÑÑебÑÐµÑ Ð°ÑÑенÑиÑикаÑии Ð´Ð»Ñ Ð¾Ð±ÑабоÑки ÑодеÑжимого, но пÑедоÑÑавленнÑе даннÑе не бÑли пÑинÑÑÑ (еÑли имелиÑÑ)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>ÐапÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð¾ÑпÑавлен, но попÑÑка пÑовалилаÑÑ, напÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ пÑиÑине Ñого, ÑÑо даннÑе не могÑÑ Ð±ÑÑÑ Ð¿ÑоÑиÑÐ°Ð½Ñ Ð´Ð²Ð°Ð¶Ð´Ñ.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Network Access API не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°Ð¿ÑоÑ: неизвеÑÑнÑй пÑоÑокол</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>ÐапÑоÑÐµÐ½Ð½Ð°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑима Ð´Ð»Ñ Ð¿ÑоÑокола</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>ÐбнаÑÑжена неизвеÑÑÐ½Ð°Ñ Ð¾Ñибка ÑеÑи</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>ÐбнаÑÑжена неизвеÑÑÐ½Ð°Ñ Ð¾Ñибка пÑокÑи</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>ÐбнаÑÑжена неизвеÑÑÐ½Ð°Ñ Ð¾Ñибка ÑдаленнÑÑ
даннÑÑ
</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>ÐбнаÑÑжена поломка в пÑоÑоколе (пеÑедаÑа оÑибки, недопÑÑÑимÑе или неожидаемÑе оÑвеÑÑ Ð¸ Ñ.д.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1333,6 +1578,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>ÐÑибка ÑкÑпоÑÑа...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>ÐкÑпоÑÑ Ð² UBX Ñайл</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>ÐкÑпоÑÑ Ð´Ð¾ÐºÑменÑа...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>ÐкÑпоÑÑ ÑÑпеÑно завеÑÑен.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>ÐÑибка ÑкÑпоÑÑа.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>ÐкÑпоÑÑ Ð² Sankore UBX ÑоÑмаÑ</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1419,6 +1691,10 @@
<source>Object informations</source>
<translation>ÐнÑоÑмаÑÐ¸Ñ Ð¾Ð± обÑекÑе</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>ÐобавиÑÑ</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1501,6 +1777,14 @@
<source>Trash</source>
<translation>ÐоÑзина</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Ðакладки</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>ÐнÑеÑнеÑ</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1534,6 +1818,22 @@
<source>Visible on Extended Screen</source>
<translation>ÐидимÑй на вÑоÑом ÑкÑане</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>ÐобавиÑÑ Ð´ÐµÐ¹ÑÑвие</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð°Ñ ÑÑÑлка на ÑÑÑаниÑÑ</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð°Ñ ÑÑÑлка на ÑÑÑаниÑÑ</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð°Ñ ÑÑÑлка на веб ÑÑÑлкÑ</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1549,6 +1849,22 @@
<source>Go to Content Source</source>
<translation>ÐеÑейÑи к иÑÑоÑÐ½Ð¸ÐºÑ ÑодеÑжимого</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>ÐобавиÑÑ Ð´ÐµÐ¹ÑÑвие</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð°Ñ ÑÑÑлка на аÑдио</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð°Ñ ÑÑÑлка на ÑÑÑаниÑÑ</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Ð£Ð´Ð°Ð»ÐµÐ½Ð½Ð°Ñ ÑÑÑлка на веб ÑÑÑаниÑÑ</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1569,13 +1885,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Ðеб</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1636,6 +1945,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (блок докÑменÑов) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1850,6 +2166,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>ÐаÑÐºÐµÑ ÑÑвÑÑвиÑелен к нажимÑ</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Ðо ÑмолÑаниÑ</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabic</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgarian</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Catalan</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Czech</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Danish</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>German</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Greek</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>English</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>English UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Spanish</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>French</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Swiss French</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italian</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebrew</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japanese</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Korean</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malagasy</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norwegian</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Dutch</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polish</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Romansh</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Romanian</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Ð ÑÑÑкий</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovak</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Swedish</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turkish</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Chinese</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Chinese Simplified</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Chinese Traditional</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>Corsican</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hindi</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation>Portuguese</translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1891,6 +2343,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>Ðои видеоÑайлÑ</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Ðеб</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>ÐидимÑй пÑи ÑледÑÑей загÑÑзке</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2104,20 +2567,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>ÐÑÑ</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation type="obsolete">ÐÑиÑÑо</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>ÐÑÑ ÑÑÑаниÑа</translation>
</message>
<message>
- <source>Web</source>
- <translation>Ðеб</translation>
+ <source>Embed </source>
+ <translation>ÐÑÑÑоеннÑй</translation>
</message>
</context>
<context>
@@ -2464,6 +2923,49 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>ÐÑбеÑиÑе ÑодеÑжимое Ð´Ð»Ñ Ð·Ð°Ñ
ваÑа:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Ðазвание пÑиложениÑ</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>ÐгÑаниÑÐµÐ½Ð¸Ñ Ð¸ диÑклеймеÑ.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>ÐÑа возможноÑÑÑ Ñеализована Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð¾Ð»ÑÑинÑÑвом веб ÑÑÑаниÑ.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>СоблÑдайÑе авÑоÑÑкие пÑава пÑи Ñоздании ÑÑÑлок, копÑиованием ÑодеÑжимого из инÑеÑнеÑа.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>ÐагÑÑзиÑÑ Ð² библиоÑекÑ</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>ÐагÑÑзиÑÑ Ð½Ð° ÑекÑÑÑÑ ÑÑÑаниÑÑ</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>ÐобавиÑÑ ÑÑÑÐ»ÐºÑ Ð² библиоÑекÑ</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>ÐобавиÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑекÑÑÑÑ ÑÑÑаниÑÑ</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2541,7 +3043,7 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Restore credentials on reboot</source>
- <translation type="unfinished"></translation>
+ <translation>ÐоÑÑÑановиÑÑ Ð¿Ñивелегии поÑле пеÑезагÑÑзки</translation>
</message>
</context>
<context>
@@ -2739,22 +3241,10 @@ p, li { white-space: pre-wrap; }
<translation>ÐиÑензии</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>СеÑÑ</translation>
</message>
@@ -2798,10 +3288,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>ÐаÑолÑ:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">ÐланеÑа Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>ÐолÑзоваÑелÑ:</translation>
@@ -2811,543 +3297,63 @@ p, li { white-space: pre-wrap; }
<translation>ÐаÑолÑ:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation></translation>
- </message>
- <message>
<source>Credits</source>
<translation>СодеÑжание</translation>
</message>
<message utf8="true">
<source>Planète Sankoré ID for exporting file</source>
- <translation type="unfinished"></translation>
+ <translation>Planète Sankoré ID Ð´Ð»Ñ ÑкÑпоÑÑа Ñайла</translation>
</message>
<message>
<source>Restore credentials on reboot </source>
- <translation type="unfinished"></translation>
+ <translation>ÐоÑÑÑановиÑÑ Ð¿Ñивелегии поÑле пеÑезагÑÑзки</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>ÐагÑÑжаÑÑ Ð¿Ð¾Ð´ÑÑказки пÑи ÑÑаÑÑе</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Show start up tips</source>
+ <translation>ÐоказаÑÑ Ð¿Ð¾Ð´Ñказки</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>ЯзÑк</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>ÐÑбеÑиÑе ÑзÑк</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>ÐовÑй ÑзÑк бÑÐ´ÐµÑ Ð·Ð°Ð³ÑÑжен поÑле пеÑезагÑÑзки</translation>
</message>
<message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>ÐакÑÑÑÑ Open-Sankoré</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_sk.ts b/Sankore-3.1/resources/i18n/sankore_sk.ts
index f7225e1..0e11bd5 100644
--- a/Sankore-3.1/resources/i18n/sankore_sk.ts
+++ b/Sankore-3.1/resources/i18n/sankore_sk.ts
@@ -106,7 +106,7 @@
</message>
<message>
<source>Home</source>
- <translation>Ãvodná stránka</translation>
+ <translation>Domov</translation>
</message>
<message>
<source>Left</source>
@@ -166,10 +166,6 @@
<translation>Svetlá</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Vložiť obsah z internetu</translation>
- </message>
- <message>
<source>Pages</source>
<translation>Stránky</translation>
</message>
@@ -378,10 +374,6 @@
<translation>Nový prieÄinok</translation>
</message>
<message>
- <source>Trap Flash Content</source>
- <translation>OznaÄiÅ¥ obsah vo Flashi</translation>
- </message>
- <message>
<source>Import</source>
<translation>Nahrať</translation>
</message>
@@ -467,6 +459,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Záložka</translation>
</message>
<message>
@@ -574,10 +567,6 @@
<translation>V zobrazenej Äasti obrazovky zobraziÅ¥ hlavnú obrazovku</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>OznaÄiÅ¥ Flash</translation>
- </message>
- <message>
<source>Window Capture</source>
<translation>OznaÄiÅ¥ okno</translation>
</message>
@@ -602,10 +591,6 @@
<translation>Zobraziť editor widgetov Open-Sankoré</translation>
</message>
<message>
- <source>Capture Embeddable Web Content</source>
- <translation>OznaÄiÅ¥ obsah z internetu, ktorý sa dá vložiÅ¥</translation>
- </message>
- <message>
<source>Write Text</source>
<translation>NapÃsaÅ¥ text</translation>
</message>
@@ -825,6 +810,43 @@
<source>Group</source>
<translation>Zoskupiť</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Stiahnúť do</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">knižnice</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Stiahnúť do knižnice</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Stiahnúť na</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuálnu stránku</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Stiahnúť na aktuálnu stránku</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Pridať odkaz do</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">knižnice</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Pridať odkaz do knižnice</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Pridať odkaz na</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuálnu stránku</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Pridať odkaz na aktuálnu stránku</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Záložka</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -978,14 +1000,6 @@
<context>
<name>UBCachePropertiesWidget</name>
<message>
- <source>Close</source>
- <translation>Zatvoriť</translation>
- </message>
- <message>
- <source>Size:</source>
- <translation>Veľkosť:</translation>
- </message>
- <message>
<source>Color:</source>
<translation>Farba:</translation>
</message>
@@ -997,6 +1011,112 @@
<source>Cache Properties</source>
<translation>Vlastnosti baterky</translation>
</message>
+ <message>
+ <source>Alpha:</source>
+ <translation>Alfa:</translation>
+ </message>
+ <message>
+ <source>Geometry:</source>
+ <translation>Geometria:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Å Ãrka:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Výška:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Zachovať pomer strán</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Režim:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Ukážka:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Zatvoriť cache</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><pustite obsah></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Obrázky nie sú akceptované</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Dáta sa nedajú zobraziť</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>SkopÃrovaný súbor nebol rozoznaný ako zvukový súbor</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Prehrať zvukový súbor</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Pridať odkaz na stránku</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Pridať odkaz na webovú stránku</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Kliknite na zvukový súbor a preneste ho z knižnice do tohto poľa</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>ÄalÅ¡ia stránka</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Predchádzajúca stránka</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Titulná stránka</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Posledná stránka</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>ÄÃslo stránky</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Sem vložte text pre www adresu</translation>
+ </message>
</context>
<context>
<name>UBDesktopPalette</name>
@@ -1029,29 +1149,17 @@
<name>UBDocumentController</name>
<message>
<source>Empty</source>
- <translation>Vyprázdniť</translation>
+ <translation>Prázdny</translation>
</message>
<message>
<source>Trash</source>
<translation>Kôš</translation>
</message>
<message>
- <source>Are you sure you want to empty trash?</source>
- <translation>UrÄite chcete vyprázdniÅ¥ kôš?</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>UrÄite chcete odstrániÅ¥ prieÄinok "%1" a celý jeho obsah?</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Otvoriť podporovaný súbor</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Odstrániť dokument</translation>
- </message>
- <message>
<source>All Images (%1)</source>
<translation>Všetky obrázky (%1)</translation>
</message>
@@ -1104,37 +1212,13 @@
<translation>Súbor sa nepodarilo nahrať...</translation>
</message>
<message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>UrÄite chcete odstrániÅ¥ dokument "%1"?</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Kôš bol vyprázdnený</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Vyprázdniť kôš</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>OdstrániÅ¥ prieÄinok</translation>
- </message>
- <message>
<source>Remove Page</source>
<translation>Odstrániť stránku</translation>
</message>
<message>
- <source>No document selected!</source>
- <translation>Nevybrali ste žiaden dokument!</translation>
- </message>
- <message>
<source>Import all Images from Folder</source>
<translation>NahraÅ¥ vÅ¡etky obrázky z prieÄinka</translation>
</message>
- <message>
- <source>Emptying trash</source>
- <translation>VyprázdÅuje sa kôš</translation>
- </message>
<message numerus="yes">
<source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
<translation>
@@ -1163,6 +1247,14 @@
<source>Untitled Documents</source>
<translation>Dokumenty bez názvu</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1250,6 +1342,60 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Prijať</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Nahradiť</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Zrušiť</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Názov %1 sa už použÃva.
+Ak tento názov necháte, starý dokument bude nahradený.
+Ak zadaáte nový názov, vytvorà sa nový dokument.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Moje dokumenty</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Šablóny</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Kôš</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Dokumenty bez názvu</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">KopÃruje sa stránka %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 skopÃrovaná stránka</numerusform>
+ <numerusform>%1 skopÃrované stránky</numerusform>
+ <numerusform>%1 skopÃrovaných stránok</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message numerus="yes">
<source>%1 pages copied</source>
@@ -1269,6 +1415,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>SÅ¥ahovanie zlyhalo.</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>vzdialený server odmietol spojenie (server neprijÃma žiadosti)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>vzdialený server ukonÄil spojenie predÄasne, pred prijatÃm a spracovanÃm celej odpovede</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>vzdialený server sa nenašiel (neplatný názov servera)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>pripojenie k vzdialenému serveru vypršalo</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>Operácia bola zruÅ¡ený vyvolanÃm funkcie abort() alebo close() pred jej ukonÄenÃm.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>SSL/TLS handshake zlyhal a zaheslovaný kanál sa nepodarilo vytvoriť. Mal by vyslaný signál sslErrors().</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>pripojenie bolo preruÅ¡ené kvôli odpojeniu zo siete, systém sa vÅ¡ak zaÄal pripájaÅ¥ na iný prÃstupový bod. Požiadavku treba znova odoslaÅ¥ a bude spracovaná, len Äo sa spojenie znova obnovÃ.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>pripojenie k proxy serveru bolo zamietnuté (proxy server neprijÃma žiadosti)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>proxy server ukonÄil spojenie predÄasne, pred prijatÃm a spracovanÃm celej odpovede</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>proxy server sa nenašiel (neplatný názov proxy servera)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>pripojenie k proxy serveru vyprÅ¡alo alebo proxy server nezareagoval vÄas na odoslanú požiadavku</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>proxy server vyžaduje overenie totožnosti na vybavenie požiadavky, ale neprijal žiadne odoslané údaje (ak ste nejaké poslali)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>prÃstup k vzdialenému obsahu bol zamietnutý (podobné ako chyba 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>operácia, ktorú chcete vykonať so vzdialeným obsahom, nie je povolená</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>vzdialený obsah sa nenašiel na serveri (podobné ako chyby 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>vzdialený server vyžaduje overenie totožnosti na poskytnutie obsahu, ale poskytnuté údaje (ak ste nejaké zadali) neprijal</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>požiadavku bolo treba poslaÅ¥ znova, ale to sa nepodarilo naprÃklad preto, lebo nahrávané údaje sa nedali druhýkrát preÄÃtaÅ¥.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Aplikácia na prÃstup k sieti nemôže vybaviÅ¥ požiadavku, lebo nepozná zadaný protokol</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>zadaná operácia je pre tento protokol neplatná</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>Bola zistená neznáma chyba súvisiaca so sieťou</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>Bola zistená neznáma chyba súvisiaca s proxy</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>Bola zistená neznáma chyba súvisiaca so vzdialeným obsahom</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>bola zistená porucha protokolu (analytická chyba, neznáme alebo neÄakané odpovede a pod.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1337,6 +1582,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Export sa nepodaril...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exportovať ako súbor UBX</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Exportuje sa dokument...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Export bol úspešný.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Export sa nepodaril.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exportovať do formátu Sankore UBX</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1423,6 +1695,10 @@
<source>Object informations</source>
<translation>Informácie o objekte</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Pridať</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1505,6 +1781,14 @@
<source>Trash</source>
<translation>Kôš</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Záložky</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1538,6 +1822,22 @@
<source>Visible on Extended Screen</source>
<translation>VidieÅ¥ to na rozÅ¡Ãrenej obrazovke</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Pridať akciu</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Odstrániť odkaz na zvuk</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Odstrániť odkaz na stránku</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Odstrániť odkaz na www adresu</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1553,15 +1853,31 @@
<source>Visible on Extended Screen</source>
<translation>VidieÅ¥ to na rozÅ¡Ãrenej obrazovke</translation>
</message>
-</context>
-<context>
- <name>UBGraphicsTextItem</name>
<message>
- <source><Type Text Here></source>
- <translation><Sem napÃÅ¡te text></translation>
+ <source>Add an action</source>
+ <translation>Pridať akciu</translation>
</message>
-</context>
-<context>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Odstrániť odkaz na zvuk</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Odstrániť odkaz na stránku</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Odstrániť odkaz na www stránku</translation>
+ </message>
+</context>
+<context>
+ <name>UBGraphicsTextItem</name>
+ <message>
+ <source><Type Text Here></source>
+ <translation><Sem napÃÅ¡te text></translation>
+ </message>
+</context>
+<context>
<name>UBGraphicsTextItemDelegate</name>
<message>
<source>Text Color</source>
@@ -1573,13 +1889,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1640,6 +1949,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (sada dokumentov) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1854,6 +2170,142 @@ Chcete ignorovať tieto chyby na tomto serveri?</translation>
<source>Marker is pressure sensitive</source>
<translation>ZvýrazÅovaÄ je citlivý na tlak</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>predvolený</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>arabÄina</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>bulharÄina</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>katalánÄina</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>ÄeÅ¡tina</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>dánÄina</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>nemÄina</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>gréÄtina</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>angliÄtina</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>angliÄtina - Spoj. kráľovstvo</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Å¡panielÄina</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>francúzština</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Å¡vajÄiarska francúzÅ¡tina</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>talianÄina</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>hebrejÄina</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>japonÄina</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>kórejÄina</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>malgaština</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>nórÄina</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>holandÄina</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>poľština</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>retorománÄina</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>rumunÄina</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>ruština</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>slovenÄina</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Å¡védÄina</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>tureÄtina</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ÄÃnÅ¡tina</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>zjednoduÅ¡ená ÄÃnÅ¡tina</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>tradiÄná ÄÃnÅ¡tina</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1895,6 +2347,17 @@ Chcete ignorovať tieto chyby na tomto serveri?</translation>
<source>My Movies</source>
<translation>Moje filmy</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Zobraziť aj nabudúce</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -1987,7 +2450,7 @@ Chcete ignorovať tieto chyby na tomto serveri?</translation>
</message>
<message>
<source>Resource indexing</source>
- <translation>Indexovanie zdrojov</translation>
+ <translation>Popis zdroja</translation>
</message>
<message>
<source>Keywords:</source>
@@ -2057,7 +2520,7 @@ Chcete ignorovať tieto chyby na tomto serveri?</translation>
</message>
<message>
<source>Title page</source>
- <translation>Titulné stránka</translation>
+ <translation>Titulná stránka</translation>
</message>
</context>
<context>
@@ -2108,21 +2571,17 @@ Chcete ignorovať tieto chyby na tomto serveri?</translation>
<source>Magnifier</source>
<translation>Lupa</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Celá stránka</translation>
</message>
+ <message>
+ <source>Embed </source>
+ <translation>Rám </translation>
+ </message>
</context>
<context>
<name>UBUpdateDlg</name>
@@ -2218,7 +2677,7 @@ Znova spustite aplikáciu, aby ste mohli pracovať s aktualizovanými dokumentmi
</message>
<message>
<source>OpenSankore</source>
- <translation type="unfinished">OpenSankore</translation>
+ <translation>OpenSankore</translation>
</message>
</context>
<context>
@@ -2229,11 +2688,11 @@ Znova spustite aplikáciu, aby ste mohli pracovať s aktualizovanými dokumentmi
</message>
<message>
<source>People & Blogs</source>
- <translation>Ľudia a blogy</translation>
+ <translation>Ľudia & blogy</translation>
</message>
<message>
<source>Nonprofits & Activism</source>
- <translation>Neziskovky a aktivisti</translation>
+ <translation>Neziskovky & aktivisti</translation>
</message>
<message>
<source>Comedy</source>
@@ -2253,11 +2712,11 @@ Znova spustite aplikáciu, aby ste mohli pracovať s aktualizovanými dokumentmi
</message>
<message>
<source>Science & Technology</source>
- <translation>Veda a technika</translation>
+ <translation>Veda & technika</translation>
</message>
<message>
<source>Howto & Style</source>
- <translation>Návody a štýl</translation>
+ <translation>Návody & štýl</translation>
</message>
<message>
<source>Education</source>
@@ -2269,19 +2728,19 @@ Znova spustite aplikáciu, aby ste mohli pracovať s aktualizovanými dokumentmi
</message>
<message>
<source>Travel & Events</source>
- <translation>Cestovanie a udalosti</translation>
+ <translation>Cestovanie & udalosti</translation>
</message>
<message>
<source>News & Politics</source>
- <translation>Správy a politika</translation>
+ <translation>Správy & politika</translation>
</message>
<message>
<source>Pets & Animals</source>
- <translation>Domáce a iné zvieratá</translation>
+ <translation>Domáce & divoké zvieratá</translation>
</message>
<message>
<source>Autos & Vehicles</source>
- <translation>Nákladné a osobné autá</translation>
+ <translation>Autá & nákladiaky</translation>
</message>
</context>
<context>
@@ -2468,6 +2927,49 @@ Znova spustite aplikáciu, aby ste mohli pracovať s aktualizovanými dokumentmi
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Vyberte obsah, ktorý sa má skopÃrovaÅ¥:</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Názov aplikácie</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Obmedzenia.</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Táto funkcia je navrhnutá tak, aby fungovala na najbežnejÅ¡Ãch webových stránkach.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>ProsÃm, reÅ¡pektujte autorské práva pre vyváranie odkazov a kopÃrovanie obsahu z internetu.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>PDF</source>
@@ -2543,6 +3045,10 @@ p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">KliknutÃm na "Upload" (NahraÅ¥) potvrdzujete, že máte vÅ¡etky práva k materiálu alebo že máte pÃsomný súhlas vlastnÃka týchto práv na zverejnenie materiálu na sieti YouTube a že materiál je v súlade s podmienkami využÃvania služieb siete YouTube, ktorých aktuálne znenie sa nachádza na adrese </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>Pri reštarte obnoviť údaje</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2651,10 +3157,6 @@ p, li { white-space: pre-wrap; }
<translation>Pero</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
@@ -2699,10 +3201,6 @@ p, li { white-space: pre-wrap; }
<translation>ZvýrazÅovaÄ</translation>
</message>
<message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Internet</source>
<translation>Internet</translation>
</message>
@@ -2711,10 +3209,6 @@ p, li { white-space: pre-wrap; }
<translation>Je umiestnený na vrchu (odporúÄa sa pre tablety)</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>Virtual Keyboard</source>
<translation>Virtuálna klávesnica</translation>
</message>
@@ -2798,10 +3292,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Heslo:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>ID na Planétu Sankoré</translation>
- </message>
<message>
<source>User:</source>
<translatorcomment>Použ. m.:</translatorcomment>
@@ -2812,985 +3302,62 @@ p, li { white-space: pre-wrap; }
<translation>Heslo:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- KONIEC PODMIENOK</translation>
- </message>
- <message>
<source>Credits</source>
<translation>PoÄakovanie</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>Tipy pri Å¡tarte</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly a Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Tento softvér je poskytovaný âtak, ako jeâ, teda bez akejkoľvek výslovnej alebo predpokladanej záruky. V žiadnom prÃpade jeho autori nenesú zodpovednosÅ¥ za akékoľvek Å¡kody vyplývajúce z použÃvania tohto softvéru.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> Povolenie použÃvaÅ¥ tento softvér sa udeľuje komukoľvek a na akýkoľvek úÄel, vrátane komerÄných aplikáciÃ, rovnako ako aj meniÅ¥ ho a Äalej slobodne Å¡ÃriÅ¥, okrem nasledujúcich obmedzenÃ:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 1. Pôvod tohto softvéru nesmie byÅ¥ skreslený; nesmiete tvrdiÅ¥, že ste naprogramovali originálny softvér. Ak tento softvér použijete v nejakom produkte, uznanie softvérui v dokumentácii k produktu by bolo vÃtané, avÅ¡ak nie je nutné.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Pozmenené zdrojové verzie sa musia jasne oznaÄiÅ¥ ako pozmenené a nesmú sa vydávaÅ¥ za originálny softvér.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. Toto upozornenie sa nesmie odstrániÅ¥ ani pozmeniÅ¥ v žiadnej distribúcii zdroja.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Show start up tips</source>
+ <translation>Zobraziť tipy pri štarte</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Jazyk</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Vyberte si jazyk</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Nový jazyk sa nahrá pri opätovnom spustenà programu</translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Zatvoriť Open-Sankoré</translation>
</message>
<message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>ID na Planète Sankoré na export súborov</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>Pri reštarte obnoviť údaje </translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré verzia 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />Open-Sankore je voľne Å¡Ãrený softvér: môžete ho Å¡ÃriÅ¥ a/alebo modifikovaÅ¥ podľa podmienok spoloÄnosti Lesser GNU General Public License, vydávaných nadáciou Free Software Foundation, a to buÄ verziu 2 tejto licencie, alebo ktorúkoľvek vyÅ¡Å¡iu verziu. Na tejto stránke môžete nájsÅ¥ zdrojový kód tohto softvéru</span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré sa rozÅ¡iruje v nádeji, že bude užitoÄný, ale BEZ AKEJKOĽVEK ZÃRUKY; dokonca aj bez predpokladanej záruky PREDAJNOSTI alebo VHODNOSTI PRE URÄITà ÃÄEL. Viac podrobnostà nájdete v podmienkach spoloÄnosti Lesser GNU General Public License nižšie.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_sv.ts b/Sankore-3.1/resources/i18n/sankore_sv.ts
index c776481..d012557 100644
--- a/Sankore-3.1/resources/i18n/sankore_sv.ts
+++ b/Sankore-3.1/resources/i18n/sankore_sv.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Lägg till bokmärke</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>Anpassa inspelning av Podcast</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Lagra flash</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Lagra flash innehål</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Lagra web</translation>
</message>
@@ -728,14 +721,6 @@
<translation>Fånga ett fönster</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Inbäddat webinnehåll</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Fånga inbäddat webinnehåll</translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>Visa på skärm</translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>Grupp</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hämta till</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>Hämta till bibliotek</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hämta till</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuell sida</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>Hämta till aktuell sida</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Lägg länk till</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">bibliotek</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>Lägg länk till bibliotek</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Lägg länk till</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">aktuell sida</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>Lägg länk till aktuell sida</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Lägg till bokmärke</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -989,12 +1011,110 @@
<translation>Form:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Storlek:</translation>
+ <source>Alpha:</source>
+ <translation>Alfa:</translation>
</message>
<message>
- <source>Close</source>
- <translation>Stäng</translation>
+ <source>Geometry:</source>
+ <translation>Geometri:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>Bredd:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Höjd:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>Behåll proportionerna</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Läge:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>Förhandsvisning:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>Stäng cache</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><släpp innehåll></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>Bilder accepteras inte</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>Kan inte visa data</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>Den släppta filen känns inte igen som en ljudfil</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>Spela en ljudfil</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>Lägg länk till sida</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>Lägg länk till websida</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>Dra och släpp ljudfilen från biblioteket i denna låda</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>Nästa sida</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>Föregående sida</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>Titelsida</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>Sista sidan</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>Sidnummer</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>Infoga url text här</translation>
</message>
</context>
<context>
@@ -1059,42 +1179,6 @@
<translation>Ta bort sida</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Ta bort dokument</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>Ãr du säker pÃ¥ att du vill ta bort dokument '%1'?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Töm papperskorgen</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Ãr du säker pÃ¥ att du vill tömma papperskorgen?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Tömmer papperskorgen</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Papperskorgen tömd</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Tabort mapp</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>Ãr du säker pÃ¥ att du vill ta bort mapp '%1' och all dess innehÃ¥ll?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Inget dokument markerat!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Ãppna filer som stödjes</translation>
</message>
@@ -1145,8 +1229,8 @@
<message numerus="yes">
<source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
<translation>
- <numerusform>Ãr du säker pÃ¥ att du vill ta bort mapp %n sida/sidor frÃ¥n det makrerade dokumentet '%1'?</numerusform>
- <numerusform></numerusform>
+ <numerusform>Ãr du säker pÃ¥ att du vill ta bort %n sida frÃ¥n det makrerade dokumentet '%1'?</numerusform>
+ <numerusform>Ãr du säker pÃ¥ att du vill ta bort %n sidor frÃ¥n det makrerade dokumentet '%1'?</numerusform>
</translation>
</message>
<message>
@@ -1161,6 +1245,14 @@
<source>Untitled Documents</source>
<translation>Namnlösa dokument</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>Denna åtgärd är oåterkallelig!</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1248,6 +1340,59 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>Acceptera</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>Ersätt</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Avbryt</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>Namnet %1 används redan.
+Om detta namn behålls kommer dokumentet att ersättas.
+Om ett nytt namn ges kommer ett nytt dokument att skapas.</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>Mina dokument</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Modeller</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>Papperskorg</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>Namnlösa dokument</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Kopierar sida %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 sida kopierad</numerusform>
+ <numerusform>%1 sidor kopierade</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1260,12 +1405,111 @@
<message numerus="yes">
<source>%1 pages copied</source>
<translation>
+ <numerusform>%1 sida kopierad</numerusform>
<numerusform>%1 sidor kopierade</numerusform>
- <numerusform></numerusform>
</translation>
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>Hämtning misslyckades</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>fjärrservern vägrade anslutningen (servern accepterar inte begäran)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>fjärrservern stängde anslutningen för tidigt, innan hela svaret tagits emot och behandlats</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>remote hostname hittades inte (ogiltigt hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>anslutningen till fjärrservern avbröts</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>operationen avbröts på grund av uppmaningar att avbryta() eller stänga() innan det var klart.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>SSL / TLS handslaget misslyckades och den krypterade kanalen kunde inte fastställas. Signalen sslErrors() borde ha sänts.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>anslutningen bröts på grund av avstängning från nätverket, men systemet har initierat roaming till en annan åtkomstpunkt. Begäran ska omprövas och kommer att behandlas så snart anslutningen har återupprättats.</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>proxyservern vägrade anslutningen (proxyservern accepterar inte begäran)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>proxyservern stängde anslutningen för tidigt, innan hela svaret tagits emot och behandlats</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>proxy hostname hittades inte (ogiltigt proxy hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>anslutningen till proxyservern avbröts eller proxyservern svarade inte tillräckligt snabbt på sänd begäran</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>proxyservern kräver autentisering för att hedra begäran men accepterade inte de referenser som erbjöds (om någon)</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>åtkomst till remote innehållet nekades (liknar HTTP-fel 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>operationen som begärs på remote innehållet tillåts inte</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>remote innehållet hittades inte på servern (liknar HTTP-fel 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>fjärrservern kräver autentisering för att tilldela innehållet men accepterade inte de referenser som erbjöds (om någon)</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>begäran behövde skickas igen, men detta misslyckades till exempel eftersom hämtad data inte kunde läsas en andra gång.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>Network Access API kan inte hedra begäran eftersom protokollet inte är känt</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>operationen som begärs tillåts inte för detta protokoll</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>ett okänt nätverksrelaterat fel har upptäckts</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>ett okänt proxyrelaterat fel har upptäckts</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>ett okänt fel relaterat till remote innehållet har upptäckts</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>ett protokollhaveri har upptäckts (tolkningsfel, ogiltiga eller oväntade svar, etc.)</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1334,6 +1578,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>Export misslyckades...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>Exportera som UBX fil</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Exporterar dokument...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>Export lyckades.</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>Export misslyckades.</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>Exportera till Sankore UBX Format</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1420,6 +1691,10 @@
<source>Object informations</source>
<translation>Objektinformation</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>Lägg till</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1502,6 +1777,14 @@
<source>Trash</source>
<translation>Papperskorg</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Bokmärken</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>Webb</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1535,6 +1818,22 @@
<source>Visible on Extended Screen</source>
<translation>Synlig på utvidgad skärm</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Lägg till en åtgärd</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Ta bort länk till ljudfil</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Ta bort länk till sida</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Ta bort länk till webb url</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1550,6 +1849,22 @@
<source>Go to Content Source</source>
<translation>Gå till innehållskällan</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>Lägg till en åtgärd</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>Ta bort länk till ljudfil</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>Ta bort länk till sida</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>Ta bort länk till webb url</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1570,13 +1885,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Nät</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1637,6 +1945,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (uppsättning dokument) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1851,6 +2166,142 @@ Vill du ignorera felen för den här värden?</translation>
<source>Marker is pressure sensitive</source>
<translation>Markören är tryckkänslig</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>Standardinställning</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Arabiska</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgariska</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Katalanska</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Tjeckiska</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Danska</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>Tyska</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grekiska</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>Engelska</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>Brittisk engelska</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>Spanska</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>Franska</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>Schweizisk franska</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>Italienska</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebreiska</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Japanska</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Koreanska</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Madagaskiska</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>Norska</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Nederländska</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>Polska</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Rätoromanska</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Rumänska</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>Ryska</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovakiska</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>Svenska</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>Turkiska</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>Kinesiska</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>Förenklad kinesiska</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>Traditionell kinesiska</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>Korsikanska</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>Hindi</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1892,6 +2343,17 @@ Vill du ignorera felen för den här värden?</translation>
<source>My Movies</source>
<translation>Mina filmer</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Webb</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>Synlig nästa gång</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2105,20 +2567,16 @@ Vill du ignorera felen för den här värden?</translation>
<source>Cache</source>
<translation>Cache</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>Hela sidan</translation>
</message>
<message>
- <source>Web</source>
- <translation>Nät</translation>
+ <source>Embed </source>
+ <translation>Inbädda</translation>
</message>
</context>
<context>
@@ -2465,6 +2923,49 @@ Vänligen starta om programmet för att komma åt uppdaterade dokument.</transla
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>Välj innehåll att lagra</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>Applikationens namn</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>Begränsning och ansvarsfriskrivning. </translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>Denna funktion är utvecklad för att fungera på de vanligaste webbsidor.</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>Vänligen respektera upphovsrätten vid skapande av länkar eller lagring av innehåll från webben.</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>Hämta till bibliotek</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>Hämta till aktuell sida</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>Lägg länk till bibliotek</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>Lägg länk till aktuell sida</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2540,6 +3041,10 @@ p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">By clicking 'Upload,' you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>Ã
terställ referenser vid omstart</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2736,22 +3241,10 @@ p, li { white-space: pre-wrap; }
<translation>Licenser</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>ÃppnaSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Nätverk</translation>
</message>
@@ -2795,10 +3288,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Lösenord:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>Planet Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Användare:</translation>
@@ -2808,535 +3297,70 @@ p, li { white-space: pre-wrap; }
<translation>Lösenord:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Credits</source>
<translation>Poäng</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>Starttips</translation>
+ </message>
+ <message>
+ <source>Show start up tips</source>
+ <translation>Visa starttips</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>Språk</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>Välj språk</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>Det nya språket kommer att laddas vid nästa omstart</translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>Stäng Open-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ID för fil export</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>Ã
terställ referenser vid omstart </translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
<message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Licenserna är på engelska för att respektera den officiella och juridiskt godkända översättningen.</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_tr.ts b/Sankore-3.1/resources/i18n/sankore_tr.ts
index 13c8d1b..cea26d1 100644
--- a/Sankore-3.1/resources/i18n/sankore_tr.ts
+++ b/Sankore-3.1/resources/i18n/sankore_tr.ts
@@ -189,6 +189,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>Sık Kullanılan</translation>
</message>
<message>
@@ -708,14 +709,6 @@
<translation>Ekran Kaydını Ayarla</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Flash TuzaÄı</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>Flash İçeriÄini Yakala</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>Webi TuzaÄı</translation>
</message>
@@ -736,14 +729,6 @@
<translation>Bir Pencereyi Yakala</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>Web İçeriÄini Göm</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>Gömülü Web İçeriÄini Yakala</translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation>Görüntü Ekranında Ana Ekranı Göster</translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>Grup</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">Sık Kullanılan</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1010,110 @@
<translation>Åekil:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>Boyut:</translation>
+ <source>Alpha:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Close</source>
- <translation>Kapat</translation>
+ <source>Geometry:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation type="unfinished">Tamam</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation type="unfinished">Sonraki Sayfa</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation type="unfinished">Ãnceki Sayfa</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>Sayfayı Kaldır</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>Dökümanı Kaldır</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>%1 adlı dökümanı kaldırmak istediÄinizden eminmisiniz?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>Ãöpü BoÅalt</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>Ãöp kutusunu boÅaltmak istediÄinizden eminmisiniz?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>Ãöp Kutusu boÅaltılıyor</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>Ãöp kutusu boÅaltıldı</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>Klasörü Kaldır</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>'%1' adlı klasörü ve içindeki tüm dosyaları kaldırmak istediÄinizden eminmisiniz?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>Seçili döküman yok!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>Desteklenen Dosyayı Aç</translation>
</message>
@@ -1159,6 +1243,14 @@
<source>Untitled Documents</source>
<translation>BaÅlıksız Döküman</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1246,6 +1338,56 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation type="unfinished">Kabul Et</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished">Ä°ptal</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation type="unfinished">Ãöp</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">Kopyalanan sayfa %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>%1 sayfa kopyalandı</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1264,6 +1406,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1332,18 +1573,45 @@
</message>
</context>
<context>
- <name>UBExportFullPDF</name>
+ <name>UBExportDocumentSetAdaptor</name>
<message>
- <source>Export as PDF File</source>
- <translation>PDF Dosyası Olarak DıÅa Aktar</translation>
+ <source>Failed to export...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<source>Exporting document...</source>
- <translation>Döküman dıÅa aktarılıyor...</translation>
+ <translation type="unfinished">Döküman dıÅa aktarılıyor...</translation>
</message>
<message>
<source>Export successful.</source>
- <translation>DıÅa aktarım tamamlandı.</translation>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBExportFullPDF</name>
+ <message>
+ <source>Export as PDF File</source>
+ <translation>PDF Dosyası Olarak DıÅa Aktar</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>Döküman dıÅa aktarılıyor...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>DıÅa aktarım tamamlandı.</translation>
</message>
<message>
<source>Export to PDF</source>
@@ -1418,6 +1686,10 @@
<source>Object informations</source>
<translation>Nesne bilgisi</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">Ekle</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1500,6 +1772,14 @@
<source>Trash</source>
<translation>Ãöp</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation type="unfinished">Sık Kullanılanlar</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation type="unfinished">Web</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1533,6 +1813,22 @@
<source>Visible on Extended Screen</source>
<translation>UzatılmıŠEkranda Görünsün</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished">Bir eylem ekle</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1548,6 +1844,22 @@
<source>Go to Content Source</source>
<translation>İçerik KaynaÄına Git</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished">Bir eylem ekle</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1568,13 +1880,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>Web</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1635,6 +1940,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1848,6 +2160,142 @@ Bu host için yukarıdaki hatalar yok sayılsın mı?</translation>
<source>Marker is pressure sensitive</source>
<translation>Ä°Åaretçi basınca duyarlıdır</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished">Almanca</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation type="unfinished">Ä°ngilizce</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished">Fıransızca</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation type="unfinished">İsveç Fıransızcası</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation type="unfinished">Rusça</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1889,6 +2337,17 @@ Bu host için yukarıdaki hatalar yok sayılsın mı?</translation>
<source>My Movies</source>
<translation>Filimlerim</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2102,20 +2561,16 @@ Bu host için yukarıdaki hatalar yok sayılsın mı?</translation>
<source>Cache</source>
<translation>Gizli Yer</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation type="obsolete">Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
- <translation>Tüm sayfa</translation>
+ <translation type="unfinished">Tüm sayfa</translation>
</message>
<message>
- <source>Web</source>
- <translation>Web</translation>
+ <source>Embed </source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2462,6 +2917,49 @@ Güncellenen dökümanlara eriÅmek için uygulamayı yeniden baÅlatın.</trans
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation type="unfinished">Uygulama adı</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2737,22 +3235,10 @@ p, li { white-space: pre-wrap; }
<translation>Lisanslar</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSI</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>Network</translation>
</message>
@@ -2796,10 +3282,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>Åifre:</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation type="obsolete">Sankoré Gezegeni ID</translation>
- </message>
<message>
<source>User:</source>
<translation>Kullanıcı Adı:</translation>
@@ -2809,1134 +3291,62 @@ p, li { white-space: pre-wrap; }
<translation>Åifre:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS</translation>
- </message>
- <message>
<source>Credits</source>
<translation>Künye</translation>
</message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation type="unfinished"></translation>
+ </message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></translation>
+ <source>Restore credentials on reboot </source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Start up tips</source>
+ <translation type="unfinished"></translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
+ <message>
+ <source>Show start up tips</source>
+ <translation type="unfinished"></translation>
</message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="obsolete"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></translation>
+ <message>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation type="unfinished"></translation>
</message>
<message utf8="true">
- <source>Planète Sankoré ID for exporting file</source>
+ <source>Close Open-Sankoré</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Restore credentials on reboot </source>
+ <source>OpenSSL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <source>Xpdf</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-size:12pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-size:9pt;"><br /><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-size:9pt;"><br /></span><span style=" font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-size:9pt;"> </span></p></td></tr></table></body></html></source>
+ <source>QuaZIP</source>
<translation type="unfinished"></translation>
</message>
- <message utf8="true">
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Crédits police scolaire Open-Sankoré : </p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police Andika Basic dispose d'une licence Open Font License </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Sil international</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Court </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier Ligne Court</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ecolier lignes pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">- Ãcolier CP pointillés</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> © Henri Rogelet <h.rogelet at free.fr></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Autorisation pour un usage non commercial</p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Source : http://pointecole.free.fr/polices.html</p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_zh.ts b/Sankore-3.1/resources/i18n/sankore_zh.ts
index 3159e1a..d451d40 100644
--- a/Sankore-3.1/resources/i18n/sankore_zh.ts
+++ b/Sankore-3.1/resources/i18n/sankore_zh.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>书ç¾</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>æ客å½å¶è®¾ç½®</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>æªåå¨ç»</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>æªåå¨ç»å
容</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>æªåç½é¡µ</translation>
</message>
@@ -728,14 +721,6 @@
<translation>çªå£æªå¾</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>åµå
¥ç½é¡µå
容 </translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>æªåå¯åµå
¥çç½é¡µå
容 </translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>å¨å±å¹ä¸æ¾ç¤º</translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>ç»å</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">书ç¾</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1010,110 @@
<translation>å½¢ç¶ï¼</translation>
</message>
<message>
- <source>Size:</source>
- <translation>大å°ï¼</translation>
+ <source>Alpha:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Close</source>
- <translation>å
³é</translation>
+ <source>Geometry:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation type="unfinished">ç¡®å®</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation type="unfinished">ä¸ä¸é¡µ</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation type="unfinished">ä¸ä¸é¡µ</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>å é¤é¡µé¢</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>å é¤ææ¡£</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>ç¡®å®è¦å é¤ææ¡£â%1âï¼</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>æ¸
空åæ¶ç«</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>ç¡®å®è¦æ¸
空åæ¶ç«ï¼</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>æ£å¨æ¸
空åæ¶ç«</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>å·²æ¸
空åæ¶ç«</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>å é¤æ件夹</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>ç¡®å®è¦å é¤æ件夹â%1âåå
¶ææå
容ï¼</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>æªéä¸ä»»ä½ææ¡£!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>æå¼æ¯æçæ件</translation>
</message>
@@ -1159,6 +1243,14 @@
<source>Untitled Documents</source>
<translation>æªå½åææ¡£</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1246,6 +1338,56 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation type="unfinished">æ¥å</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished">åæ¶</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation type="unfinished">åæ¶ç«</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">æ£å¨å¤å¶é¡µé¢ %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>å·²å¤å¶é¡µé¢%1</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1263,6 +1405,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1331,6 +1572,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation type="unfinished">æ档导åºä¸â¦â¦</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1417,6 +1685,10 @@
<source>Object informations</source>
<translation>ç´ æä¿¡æ¯</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">æ·»å </translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1499,6 +1771,14 @@
<source>Trash</source>
<translation>åæ¶ç«</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation type="unfinished">书ç¾</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation type="unfinished">ç½é¡µ</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1532,6 +1812,22 @@
<source>Visible on Extended Screen</source>
<translation>宽å±ä¸å¯è§</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished">æ·»å æ令</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1547,6 +1843,22 @@
<source>Go to Content Source</source>
<translation>访é®å
容æ¥æº</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation type="unfinished">æ·»å æ令</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1567,13 +1879,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>ç½é¡µ</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1634,6 +1939,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1751,102 +2063,238 @@ Do you want to ignore these errors for this host?</source>
<source>Sankore has lost access to the document repository '%1'. Unfortunately the application must shut down to avoid data corruption. Latest changes may be lost as well.</source>
<translation>Sankoreæ æ³è¿å
¥ææ¡£åºâ%1âã为é¿å
æ°æ®åºéï¼åºç¨ç¨åºé¡»ç«å³å
³éï¼æè¿æåçä¿®æ¹ä¹å¯è½ä¸¢å¤±ã</translation>
</message>
-</context>
-<context>
- <name>UBPlatformUtils</name>
+</context>
+<context>
+ <name>UBPlatformUtils</name>
+ <message>
+ <source>English</source>
+ <translation>è±è¯</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>ä¿è¯</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>å¾·è¯</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>æ³è¯</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>ç士æ³è¯</translation>
+ </message>
+</context>
+<context>
+ <name>UBPodcastController</name>
+ <message>
+ <source>Failed to start encoder ...</source>
+ <translation>ç¼ç å¨å¯å¨å¤±è´¥â¦â¦</translation>
+ </message>
+ <message>
+ <source>No Podcast encoder available ...</source>
+ <translation>没æå¯ç¨çæ客ç¼ç å¨â¦â¦</translation>
+ </message>
+ <message>
+ <source>Part %1</source>
+ <translation>é¨å%1</translation>
+ </message>
+ <message>
+ <source>on your desktop ...</source>
+ <translation>å¨æ¡é¢ä¸â¦â¦</translation>
+ </message>
+ <message>
+ <source>in folder %1</source>
+ <translation>å¨æ件夹%1ä¸</translation>
+ </message>
+ <message>
+ <source>Podcast created %1</source>
+ <translation>å·²å建æ客%1</translation>
+ </message>
+ <message>
+ <source>Podcast recording error (%1)</source>
+ <translation>æ客å½å¶é误ï¼%1ï¼</translation>
+ </message>
+ <message>
+ <source>Default Audio Input</source>
+ <translation>é»è®¤é³é¢è¾å
¥</translation>
+ </message>
+ <message>
+ <source>No Audio Recording</source>
+ <translation>æ é³é¢å½å¶</translation>
+ </message>
+ <message>
+ <source>Small</source>
+ <translation>å°</translation>
+ </message>
+ <message>
+ <source>Medium</source>
+ <translation>ä¸</translation>
+ </message>
+ <message>
+ <source>Full</source>
+ <translation>大</translation>
+ </message>
+ <message>
+ <source>Publish to Intranet</source>
+ <translation>åå¸å°å
é¨ç½</translation>
+ </message>
+ <message>
+ <source>Publish to Youtube</source>
+ <translation>åå¸å°Youtube</translation>
+ </message>
+ <message>
+ <source>Sankore Cast</source>
+ <translation>Sankoreè§å¬æ件</translation>
+ </message>
+</context>
+<context>
+ <name>UBPreferencesController</name>
+ <message>
+ <source>version: </source>
+ <translation>çæ¬ï¼</translation>
+ </message>
+ <message>
+ <source>Marker is pressure sensitive</source>
+ <translation>使ç¨åæè®°å·ç¬</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation type="unfinished">å¾·è¯</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation type="unfinished">è±è¯</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation type="unfinished">æ³è¯</translation>
+ </message>
<message>
- <source>English</source>
- <translation>è±è¯</translation>
+ <source>Swiss French</source>
+ <translation type="unfinished">ç士æ³è¯</translation>
</message>
<message>
- <source>Russian</source>
- <translation>ä¿è¯</translation>
+ <source>Italian</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>German</source>
- <translation>å¾·è¯</translation>
+ <source>Hebrew</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>French</source>
- <translation>æ³è¯</translation>
+ <source>Japanese</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Swiss French</source>
- <translation>ç士æ³è¯</translation>
+ <source>Korean</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPodcastController</name>
<message>
- <source>Failed to start encoder ...</source>
- <translation>ç¼ç å¨å¯å¨å¤±è´¥â¦â¦</translation>
+ <source>Malagasy</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No Podcast encoder available ...</source>
- <translation>没æå¯ç¨çæ客ç¼ç å¨â¦â¦</translation>
+ <source>Norwegian</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Part %1</source>
- <translation>é¨å%1</translation>
+ <source>Dutch</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>on your desktop ...</source>
- <translation>å¨æ¡é¢ä¸â¦â¦</translation>
+ <source>Polish</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>in folder %1</source>
- <translation>å¨æ件夹%1ä¸</translation>
+ <source>Romansh</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Podcast created %1</source>
- <translation>å·²å建æ客%1</translation>
+ <source>Romanian</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Podcast recording error (%1)</source>
- <translation>æ客å½å¶é误ï¼%1ï¼</translation>
+ <source>Russian</source>
+ <translation type="unfinished">ä¿è¯</translation>
</message>
<message>
- <source>Default Audio Input</source>
- <translation>é»è®¤é³é¢è¾å
¥</translation>
+ <source>Slovak</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>No Audio Recording</source>
- <translation>æ é³é¢å½å¶</translation>
+ <source>Swedish</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Small</source>
- <translation>å°</translation>
+ <source>Turkish</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Medium</source>
- <translation>ä¸</translation>
+ <source>Chinese</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Full</source>
- <translation>大</translation>
+ <source>Chinese Simplified</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Publish to Intranet</source>
- <translation>åå¸å°å
é¨ç½</translation>
+ <source>Chinese Traditional</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Publish to Youtube</source>
- <translation>åå¸å°Youtube</translation>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Sankore Cast</source>
- <translation>Sankoreè§å¬æ件</translation>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
</message>
-</context>
-<context>
- <name>UBPreferencesController</name>
<message>
- <source>version: </source>
- <translation>çæ¬ï¼</translation>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Marker is pressure sensitive</source>
- <translation>使ç¨åæè®°å·ç¬</translation>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -1889,6 +2337,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>æçè§é¢</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2102,20 +2561,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>é«çº§ç¼å</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
- <translation>æ´ä¸ªé¡µé¢</translation>
+ <translation type="unfinished">æ´ä¸ªé¡µé¢</translation>
</message>
<message>
- <source>Web</source>
- <translation>ç½é¡µ</translation>
+ <source>Embed </source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
@@ -2462,6 +2917,49 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation type="unfinished">åºç¨ç¨åºå</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2537,6 +3035,10 @@ p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">ç¹å»âä¸ä¼ â表示æ¨å¯¹ä¸ä¼ å
容æ¥æå
¨é¨çææå¾å°çæææ人å°ä¸ä¼ å
容å
¬å¼å表å¨YouTubeä¸çææï¼å¦åæ¤ä¸¾è¿åYouTubeæå¡æ¡æ¬¾ </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2733,22 +3235,10 @@ p, li { white-space: pre-wrap; }
<translation>è¯ä¹¦</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSL</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>ç½ç»è¿æ¥</translation>
</message>
@@ -2792,10 +3282,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>å¯ç ï¼</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>Planète Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>ç¨æ·ï¼</translation>
@@ -2805,550 +3291,62 @@ p, li { white-space: pre-wrap; }
<translation>å¯ç ï¼</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
+ <source>Credits</source>
+ <translation>çæ</translation>
+ </message>
+ <message>
+ <source>Start up tips</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Credits</source>
- <translation>çæ</translation>
+ <source>Show start up tips</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gaillyå Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> æ¬è½¯ä»¶âæåæ ·âæä¾ï¼ä¸é带任ä½æ示çææå«çæ
ä¿ãæ 论å¨ä½ç§æ
åµä¸ï¼è½¯ä»¶ä½è
对äºç±äºä½¿ç¨æ¬è½¯ä»¶æ带æ¥çä»»ä½æ失æ¦ä¸è´è´£ã</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> ä»»ä½äººé½å¯å°æ¬è½¯ä»¶ç¨äºä»»ä½ç®çï¼å
æ¬åä¸åºç¨ï¼ï¼å¹¶éæ对软件è¿è¡æ´æ¹æéæ° åå¸ï¼ä½æ¯å以ä¸æ¡ä»¶çéå¶ï¼</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 1. ä¸å¾æªæ²æ¬è½¯ä»¶çåºå¤ï¼æ¨ä¸å¾å£°ç§°åå§è½¯ä»¶æ¯èªå·±ç¼åçãå¦ææ¨å¨æ产åä¸ä½¿ç¨äºæ¬è½¯ä»¶ï¼å¸ææ¨å¯ä»¥å¨äº§åææ¡£ä¸æåï¼ä½å¹¶éå¿
é¡»ã</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. åæ ·ï¼å¿
é¡»æ æç»è¿æ´æ¹çæºä»£ç ççæ¬ï¼ä¸å¾å£°ç§°å
¶ä¸ºåå软件ã</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. ä¸å¾ä»ä»»ä½æºä»£ç åå¸ä¸å°æ¤è¯´æå»é¤æè¿è¡ä¿®æ¹ã</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Select a language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation type="unfinished"></translation>
</message>
<message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré 1.4çï¼Copyright (C) 2010-2012ä¿è¿éæ´²æ°ç æè²å
Œ
±å©çå
±åä½ï¼Groupement d'Intérêt Public pour l'Education Numérique en Afriqueï¼ç®ç§°GIP ENAï¼<br /><br />Open-Sankoré为èªç±è½¯ä»¶ï¼æ¨å¯æ ¹æ®èªç±è½¯ä»¶åºéä¼ï¼Free Software Foundationï¼å表ç第äºçæææ°çãGNU éç¨å
Œ
±ææãï¼Lesser GNU general Public Licenceï¼ç®ç§°GNU LGPLï¼æ¡æ¬¾è§å®ï¼èªç±ä¼ æå/æä¿®æ¹æ¬è½¯ä»¶ã<br />æ¨å¯å¨è¯¥ç½ç«æ¥è¯¢æºä»£ç æå°æºä»£ç ä¸è½½å°è¯¥ç½ç«ï¼</span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoréçåè¡å®æ¨å¨äºå¸æ该软件è½åæ¥åè½ï¼ä½å®å
¨æ æ³ï¼æç¡®æé´æ¥ï¼ä¿è¯å
¶å¯ç¨äºåä¸ç¨éæ满足ç¹æ®éæ±ã<br />请æ¥è¯¢ä½¿ç¨è®¸å¯é¡µé¢ä¸çãGNU éç¨å
Œ
±ææãææ¥è¯¢ç½ç« </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">ã<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">èç³»æ¹å¼ : <br />ä¿è¿éæ´²æ°ç æè²å
Œ
±å©çå
±åä½<br />éæ´²æ°ç æè²é¨ä½ç»¼å代表å¢<br />å°åï¼20 Avenue Ségur Paris 75007<br />çµè¯ : 01 43 17 68 08<br />çµé®: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html>
-</translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/Sankore-3.1/resources/i18n/sankore_zh_CN.ts b/Sankore-3.1/resources/i18n/sankore_zh_CN.ts
index 3159e1a..5619587 100644
--- a/Sankore-3.1/resources/i18n/sankore_zh_CN.ts
+++ b/Sankore-3.1/resources/i18n/sankore_zh_CN.ts
@@ -237,6 +237,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>书ç¾</translation>
</message>
<message>
@@ -700,14 +701,6 @@
<translation>æ客å½å¶è®¾ç½®</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>æªåå¨ç»</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>æªåå¨ç»å
容</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>æªåç½é¡µ</translation>
</message>
@@ -728,14 +721,6 @@
<translation>çªå£æªå¾</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>åµå
¥ç½é¡µå
容 </translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>æªåå¯åµå
¥çç½é¡µå
容 </translation>
- </message>
- <message>
<source>Show on Display</source>
<translation>å¨å±å¹ä¸æ¾ç¤º</translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>ç»å</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ä¸è½½å°</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">å¾ä¹¦é¦</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>ä¸è½½è³å¾ä¹¦é¦</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">ä¸è½½è³</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">æè¿æå¼é¡µé¢</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>ä¸è½½è³æè¿æå¼é¡µé¢</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">å°é¾æ¥æ·»å è³</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">å¾ä¹¦é¦</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>å°é¾æ¥æ·»å è³å¾ä¹¦é¦</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">å°é¾æ¥æ·»å è³</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">æè¿æå¼é¡µé¢</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>å°é¾æ¥æ·»å è³æè¿æå¼é¡µé¢</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">书ç¾</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1010,110 @@
<translation>å½¢ç¶ï¼</translation>
</message>
<message>
- <source>Size:</source>
- <translation>大å°ï¼</translation>
+ <source>Alpha:</source>
+ <translation>Alpha:</translation>
</message>
<message>
- <source>Close</source>
- <translation>å
³é</translation>
+ <source>Geometry:</source>
+ <translation>å ä½ï¼</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>宽ï¼</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>é«ï¼</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>ä¿æ该æ¯ä¾</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>模å¼ï¼</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>é¢è§ï¼</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>å
³éé«çº§ç¼å</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><drop content></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>å¾çæ æ³æ¥å</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>æ æ³æ¾ç¤ºæ°æ®</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>æ·»å æ件æ æ³è¾¨è¯ä¸ºé³é¢æ件</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>ææ¾é³é¢æ件</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>å°é¾æ¥æ·»å è³é¡µé¢</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>å°é¾æ¥æ·»å è³ç½é¡µ</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>å°è¿ä»½é³é¢æ件ä»å¾ä¹¦é¦æå
¥çä¸</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>ç¡®å®</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>ä¸ä¸é¡µ</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>ä¸ä¸é¡µ</translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>æ é¢é¡µé¢</translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>æåä¸é¡µ</translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>页ç </translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>å¨æ¤æå
¥urlææ¬......</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>å é¤é¡µé¢</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>å é¤ææ¡£</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>ç¡®å®è¦å é¤ææ¡£â%1âï¼</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>æ¸
空åæ¶ç«</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>ç¡®å®è¦æ¸
空åæ¶ç«ï¼</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>æ£å¨æ¸
空åæ¶ç«</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>å·²æ¸
空åæ¶ç«</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>å é¤æ件夹</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>ç¡®å®è¦å é¤æ件夹â%1âåå
¶ææå
容ï¼</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>æªéä¸ä»»ä½ææ¡£!</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>æå¼æ¯æçæ件</translation>
</message>
@@ -1159,6 +1243,14 @@
<source>Untitled Documents</source>
<translation>æªå½åææ¡£</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation>æ¤ä¸¾å°æ æ³å¤åï¼</translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1246,6 +1338,58 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>æ¥å</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>æ¿æ¢</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>åæ¶</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation>æ件å %1 已被使ç¨ã
+使ç¨è¯¥å称ä¼æ¿æ¢ææ¡£ã
+使ç¨æ°å称å¯å建æ°ææ¡£ã</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>æçææ¡£</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>模æ¿</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>åæ¶ç«</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>æªå½åææ¡£</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">æ£å¨å¤å¶é¡µé¢ %1/%2</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>å·²å¤å¶é¡µé¢%1</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1263,6 +1407,105 @@
</message>
</context>
<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>ä¸è½½å¤±è´¥ã</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>è¿æ¥å°è¿ç¨æå¡å¨å¤±è´¥ï¼æå¡å¨ä¸æ¥å请æ±ï¼</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>è¿ç¨æå¡å¨å¨æ¥åå®æ´åå¤å¹¶æ§è¡åå¤åææ©æå¼è¿æ¥</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>è¿ç¨æå¡å¨å称æªæ¾å°ï¼æå¡å¨å称æ æï¼</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>è¿ç¨æå¡å¨è¿æ¥è¶
æ¶</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>å¨éè¿å¼å«è¿è¡éåº() æå
³é()åï¼è¯¥æä½å·²åæ¶ã</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>SSL/TLSæ¡æå议失败ï¼æ æ³å»ºç«å å¯é¢éãsslErrors()ä¿¡å·åºå·²ååºã</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>è¿æ¥å ç½ç»æå¼èä¸æï¼ä½ç³»ç»å·²æ¼«æ¸¸è³å¦ä¸ä¸ªæ¥å
¥ç¹ãé¡»éæ°æ交请æ±ï¼ç½ç»è¿æ¥æ¢å¤åï¼å°å°½å¿«å¤çã</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>è¿æ¥å°ä»£çæå¡å¨å¤±è´¥ï¼ä»£çæå¡å¨ä¸æ¥å请æ±ï¼</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>代çæå¡å¨å¨æ¥åå®æ´åå¤å¹¶æ§è¡åå¤åææ©æå¼è¿æ¥</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>代çæå¡å¨å称æªæ¾å°ï¼æå¡å¨å称æ æï¼</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>è¿æ¥å°ä»£çæå¡å¨è¶
æ¶æåé请æ±æ¶ä»£çæå¡å¨ä¸ååº</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>代çæå¡å¨è¦æ±éªè¯ä»¥éè¿è¯·æ±ï¼ä½ä¸æ¥åä»»ä½è¯ä¹¦ï¼å¦ææçè¯ï¼</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>访é®è¿ç¨æå¡å¨è¢«æç»ï¼ç±»ä¼¼HTTPé误401ï¼</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>æ æ对è¿ç¨å
容è¿è¡è¯¥é¡¹æä½</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>æå¡å¨ä¸æªæ¾å°è¿ç¨å
容ï¼ç±»ä¼¼HTTPé误401ï¼</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>è¿ç¨æå¡å¨è¦æ±éªè¯ä»¥è¯å®è¯·æ±ï¼ä½ä¸æ¥åä»»ä½è¯ä¹¦ï¼å¦ææçè¯ï¼</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>é¡»å次åé请æ±ï¼ä½å¤±è´¥ï¼å ä¸ä¼ æ°æ®æ æ³è¢«å次读åã</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>å 为æªç¥åè®®ï¼ç½ç»è®¿é®APIæ æ³éè¿è¯·æ±</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>æä½è¯·æ±å¯¹æ¤é¡¹åè®®æ æ</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>åç°ä¸ç½ç»ç¸å
³çæªç¥é误</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>åç°ä¸ä»£çæå¡å¨ç¸å
³çæªç¥é误</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>åç°ä¸è¿ç¨å
容ç¸å
³çæªç¥é误</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>åç°åè®®æ
éï¼è§£æé误ãæ æææªç¥ååºççï¼</translation>
+ </message>
+</context>
+<context>
<name>UBDownloadWidget</name>
<message>
<source>Downloading files</source>
@@ -1331,6 +1574,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>导åºå¤±è´¥......</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>以UBXæä»¶æ ¼å¼å¯¼åº</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>æ档导åºä¸â¦â¦</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>导åºæåã</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>导åºå¤±è´¥ã</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>以Sankore UBXæä»¶æ ¼å¼å¯¼åº</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1417,6 +1687,10 @@
<source>Object informations</source>
<translation>ç´ æä¿¡æ¯</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation>æ·»å </translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1499,6 +1773,14 @@
<source>Trash</source>
<translation>åæ¶ç«</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>书ç¾</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>ç½é¡µ</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1532,6 +1814,22 @@
<source>Visible on Extended Screen</source>
<translation>宽å±ä¸å¯è§</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>æ·»å æ令</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>å é¤é³é¢é¾æ¥</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>å é¤é¡µé¢é¾æ¥</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>å é¤ç½ç« urlé¾æ¥</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1547,6 +1845,22 @@
<source>Go to Content Source</source>
<translation>访é®å
容æ¥æº</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>æ·»å æ令</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>å é¤é³é¢é¾æ¥</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>å é¤é¡µé¢é¾æ¥</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>å é¤ç½ç« urlé¾æ¥</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1567,13 +1881,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>ç½é¡µ</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1634,6 +1941,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (设置æ件) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1848,6 +2162,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>使ç¨åæè®°å·ç¬</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>é»è®¤</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>é¿æ伯è¯</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>ä¿å å©äºè¯</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>å æ³°ç½å°¼äºè¯</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>æ·å
è¯</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>丹麦è¯</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>å¾·è¯</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>å¸è
è¯</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>è±è¯</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>è±å½è±è¯</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>西ççè¯</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>æ³è¯</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>ç士æ³è¯</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>æ大å©è¯</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>å¸ä¼¯æ¥è¯</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>æ¥è¯</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>é©è¯</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>马达å æ¯å è¯</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>æªå¨è¯</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>è·å
°è¯</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>æ³¢å
°è¯</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>ç½æ¼ä»è¯</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>ç½é©¬å°¼äºè¯</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>ä¿è¯</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>æ¯æ´ä¼å
è¯</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>çå
¸è¯</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>åè³å
¶è¯</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>æ±è¯</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ç®ä½ä¸æ</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>ç¹ä½ä¸æ</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation>ç§è¥¿åè¯</translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation>å°åº¦è¯</translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1889,6 +2339,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>æçè§é¢</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/ç½ç«</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>ä¸ä¸æ¬¡å¯è§</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2102,20 +2563,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>é«çº§ç¼å</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>æ´ä¸ªé¡µé¢</translation>
</message>
<message>
- <source>Web</source>
- <translation>ç½é¡µ</translation>
+ <source>Embed </source>
+ <translation>åµå
¥</translation>
</message>
</context>
<context>
@@ -2462,6 +2919,53 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>éæ©æåå
容ï¼</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>åºç¨ç¨åºå</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>使ç¨éå¶ä¸å
责声æã</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>è¿é¡¹ç¹æ§å¯éç¨æ常è§ç½é¡µã</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>å建é¾æ¥æä»ç½ç«æåå
容æ¶è¯·éµå®çæã</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation>ä¸è½½è³
+å¾ä¹¦é¦</translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation>ä¸è½½è³
+æè¿æå¼é¡µé¢</translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation>å°é¾æ¥æ·»å è³
+å¾ä¹¦é¦</translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation>å°é¾æ¥æ·»å è³
+æè¿æå¼é¡µé¢</translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2537,6 +3041,10 @@ p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">ç¹å»âä¸ä¼ â表示æ¨å¯¹ä¸ä¼ å
容æ¥æå
¨é¨çææå¾å°çæææ人å°ä¸ä¼ å
容å
¬å¼å表å¨YouTubeä¸çææï¼å¦åæ¤ä¸¾è¿åYouTubeæå¡æ¡æ¬¾ </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>éå¯åæ¢å¤è¯ä¹¦</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2733,22 +3241,10 @@ p, li { white-space: pre-wrap; }
<translation>è¯ä¹¦</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSL</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>ç½ç»è¿æ¥</translation>
</message>
@@ -2792,10 +3288,6 @@ p, li { white-space: pre-wrap; }
<source>Pass:</source>
<translation>å¯ç ï¼</translation>
</message>
- <message utf8="true">
- <source>Planète Sankoré ID</source>
- <translation>Planète Sankoré ID</translation>
- </message>
<message>
<source>User:</source>
<translation>ç¨æ·ï¼</translation>
@@ -2805,551 +3297,70 @@ p, li { white-space: pre-wrap; }
<translation>å¯ç ï¼</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Credits</source>
<translation>çæ</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation type="unfinished"></translation>
+ <source>Start up tips</source>
+ <translation>使ç¨æå</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gaillyå Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> æ¬è½¯ä»¶âæåæ ·âæä¾ï¼ä¸é带任ä½æ示çææå«çæ
ä¿ãæ 论å¨ä½ç§æ
åµä¸ï¼è½¯ä»¶ä½è
对äºç±äºä½¿ç¨æ¬è½¯ä»¶æ带æ¥çä»»ä½æ失æ¦ä¸è´è´£ã</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> ä»»ä½äººé½å¯å°æ¬è½¯ä»¶ç¨äºä»»ä½ç®çï¼å
æ¬åä¸åºç¨ï¼ï¼å¹¶éæ对软件è¿è¡æ´æ¹æéæ° åå¸ï¼ä½æ¯å以ä¸æ¡ä»¶çéå¶ï¼</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 1. ä¸å¾æªæ²æ¬è½¯ä»¶çåºå¤ï¼æ¨ä¸å¾å£°ç§°åå§è½¯ä»¶æ¯èªå·±ç¼åçãå¦ææ¨å¨æ产åä¸ä½¿ç¨äºæ¬è½¯ä»¶ï¼å¸ææ¨å¯ä»¥å¨äº§åææ¡£ä¸æåï¼ä½å¹¶éå¿
é¡»ã</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. åæ ·ï¼å¿
é¡»æ æç»è¿æ´æ¹çæºä»£ç ççæ¬ï¼ä¸å¾å£°ç§°å
¶ä¸ºåå软件ã</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. ä¸å¾ä»ä»»ä½æºä»£ç åå¸ä¸å°æ¤è¯´æå»é¤æè¿è¡ä¿®æ¹ã</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Show start up tips</source>
+ <translation>æ¾ç¤ºä½¿ç¨æå</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>è¯è¨</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>éæ©ä¸ç§è¯è¨</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>éæ°å¯å¨å导å
¥æ°è¯è¨çæ</translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>å
³éOpen-Sankoré</translation>
</message>
<message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>è¾å
¥Planète Sankoré ID导åºæ件</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>éå¯åæ¢å¤è¯ä¹¦......</translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation></translation>
+ </message>
+ <message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
<translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré 1.4çï¼Copyright (C) 2010-2012ä¿è¿éæ´²æ°ç æè²å
Œ
±å©çå
±åä½ï¼Groupement d'Intérêt Public pour l'Education Numérique en Afriqueï¼ç®ç§°GIP ENAï¼<br /><br />Open-Sankoré为èªç±è½¯ä»¶ï¼æ¨å¯æ ¹æ®èªç±è½¯ä»¶åºéä¼ï¼Free Software Foundationï¼å表ç第äºçæææ°çãGNU éç¨å
Œ
±ææãï¼Lesser GNU general Public Licenceï¼ç®ç§°GNU LGPLï¼æ¡æ¬¾è§å®ï¼èªç±ä¼ æå/æä¿®æ¹æ¬è½¯ä»¶ã<br />æ¨å¯å¨è¯¥ç½ç«æ¥è¯¢æºä»£ç æå°æºä»£ç ä¸è½½å°è¯¥ç½ç«ï¼</span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoréçåè¡å®æ¨å¨äºå¸æ该软件è½åæ¥åè½ï¼ä½å®å
¨æ æ³ï¼æç¡®æé´æ¥ï¼ä¿è¯å
¶å¯ç¨äºåä¸ç¨éæ满足ç¹æ®éæ±ã<br />请æ¥è¯¢ä½¿ç¨è®¸å¯é¡µé¢ä¸çãGNU éç¨å
Œ
±ææãææ¥è¯¢ç½ç« </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">ã<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">èç³»æ¹å¼ : <br />ä¿è¿éæ´²æ°ç æè²å
Œ
±å©çå
±åä½<br />éæ´²æ°ç æè²é¨ä½ç»¼å代表å¢<br />å°åï¼20 Avenue Ségur Paris 75007<br />çµè¯ : 01 43 17 68 08<br />çµé®: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html>
-</translation>
- </message>
- <message utf8="true">
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation type="unfinished"></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">èèå°æ£å¼æ³å®çç¿»è¯ï¼è®¸å¯è¯ç¨è±è¯æ°åã</span></p></td></tr></table></body></html></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/i18n/sankore_zh_TW.ts b/Sankore-3.1/resources/i18n/sankore_zh_TW.ts
index 069e799..77578c3 100644
--- a/Sankore-3.1/resources/i18n/sankore_zh_TW.ts
+++ b/Sankore-3.1/resources/i18n/sankore_zh_TW.ts
@@ -39,7 +39,7 @@
</message>
<message>
<source>Stop</source>
- <translation>åæ¢</translation>
+ <translation>çµæ</translation>
</message>
<message>
<source>Open</source>
@@ -392,14 +392,6 @@
<translation>æ·åè¦çª</translation>
</message>
<message>
- <source>Embed Web Content</source>
- <translation>åµå
¥ç¶²é å
§å®¹</translation>
- </message>
- <message>
- <source>Capture Embeddable Web Content</source>
- <translation>æ·åå¯åµå
¥ç網é å
§å®¹</translation>
- </message>
- <message>
<source>Show Main Screen on Display Screen</source>
<translation>å¨é¡¯ç¤ºå¨ä¸é¡¯ç¤ºä¸»è¢å¹</translation>
</message>
@@ -441,7 +433,7 @@
</message>
<message>
<source>Quit</source>
- <translation>åæ¢</translation>
+ <translation>çµæ</translation>
</message>
<message>
<source>Eraser</source>
@@ -481,6 +473,7 @@
</message>
<message>
<source>Bookmark</source>
+ <extracomment>tooltip</extracomment>
<translation>æ¸ç±¤</translation>
</message>
<message>
@@ -688,14 +681,6 @@
<translation>Podcasté製è¨å®</translation>
</message>
<message>
- <source>Flash Trap</source>
- <translation>Flashåç«æ·å</translation>
- </message>
- <message>
- <source>Trap Flash Content</source>
- <translation>æ·åFlashåç«å
§å®¹</translation>
- </message>
- <message>
<source>Web Trap</source>
<translation>網é æ·å</translation>
</message>
@@ -767,27 +752,27 @@
<source>Stop Loading</source>
<translation>åæ¢è¼å
¥</translation>
</message>
- <message>
+ <message utf8="true">
<source>Open-Sankoré</source>
<translation>Open-Sankoré</translation>
</message>
- <message>
+ <message utf8="true">
<source>Quit Open-Sankoré</source>
<translation>éåºOpen-Sankoré</translation>
</message>
- <message>
+ <message utf8="true">
<source>Open-Sankoré Editor</source>
<translation>Open-Sankoré編輯å¨</translation>
</message>
- <message>
+ <message utf8="true">
<source>Show Open-Sankoré Widgets Editor</source>
<translation>顯示Open-Sankoréå°å·¥å
·ç·¨è¼¯å¨</translation>
</message>
- <message>
+ <message utf8="true">
<source>Hide Open-Sankoré</source>
<translation>é±èOpen-Sankoré</translation>
</message>
- <message>
+ <message utf8="true">
<source>Hide Open-Sankoré Application</source>
<translation>é±èOpen-Sankoréæç¨ç¨å¼</translation>
</message>
@@ -823,6 +808,43 @@
<source>Group</source>
<translation>群çµ</translation>
</message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to library</source>
+ <translation>ä¸è¼è³åæ¸é¤¨</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Download to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></translation>
+ </message>
+ <message>
+ <source>Download to current page</source>
+ <translation>ä¸è¼è³ç®åé é¢</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">library</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to library</source>
+ <translation>æ°å¢é£çµè³åæ¸é¤¨</translation>
+ </message>
+ <message>
+ <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></source>
+ <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p align="center" style=" margin-top:2px; margin-bottom:2px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Add link to</p><p align="center" style=" margin-top:2px; margin-bottom12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">current page</p></body></html></translation>
+ </message>
+ <message>
+ <source>Add link to current page</source>
+ <translation>æ°å¢é£çµè³ç®åé é¢</translation>
+ </message>
+ <message>
+ <source>Bookmark</source>
+ <comment>tooltip</comment>
+ <translation type="unfinished">æ¸ç±¤</translation>
+ </message>
</context>
<context>
<name>PasswordDialog</name>
@@ -988,12 +1010,110 @@
<translation>å½¢ç:</translation>
</message>
<message>
- <source>Size:</source>
- <translation>大å°:</translation>
+ <source>Alpha:</source>
+ <translation>Alpha:</translation>
</message>
<message>
- <source>Close</source>
- <translation>éé</translation>
+ <source>Geometry:</source>
+ <translation>å½¢ç:</translation>
+ </message>
+ <message>
+ <source>Width: </source>
+ <translation>寬:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>é«:</translation>
+ </message>
+ <message>
+ <source>Keep proportions</source>
+ <translation>ä¿æçæ¯ä¾</translation>
+ </message>
+ <message>
+ <source>Mode:</source>
+ <translation>Mode:</translation>
+ </message>
+ <message>
+ <source>Preview:</source>
+ <translation>é 覽:</translation>
+ </message>
+ <message>
+ <source>Close cache</source>
+ <translation>éé cache</translation>
+ </message>
+ <message>
+ <source>On Click</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Persistent</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkLabel</name>
+ <message>
+ <source><drop content></source>
+ <translation><drop content></translation>
+ </message>
+ <message>
+ <source>Images are not accepted</source>
+ <translation>ååä¸è¢«è¾¨èæ¥å</translation>
+ </message>
+ <message>
+ <source>Cannot display data</source>
+ <translation>è³æç¡æ³é¡¯ç¤º</translation>
+ </message>
+ <message>
+ <source>Dropped file isn't reconized to be an audio file</source>
+ <translation>æªæ¡ä¸è¢«è¾¨èçºé³è¨æª</translation>
+ </message>
+</context>
+<context>
+ <name>UBCreateLinkPalette</name>
+ <message>
+ <source>Play an audio file</source>
+ <translation>ææ¾é³è¨æª</translation>
+ </message>
+ <message>
+ <source>Add Link to Page</source>
+ <translation>æ°å¢é é¢é£çµ</translation>
+ </message>
+ <message>
+ <source>Add Link to a Web page</source>
+ <translation>æ°å¢ç¶²é é£çµ</translation>
+ </message>
+ <message>
+ <source>Drag and drop the audio file from the library in this box</source>
+ <translation>å¾åæ¸é¤¨ææ³é³è¨æª</translation>
+ </message>
+ <message>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>ä¸ä¸é </translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>ä¸ä¸é </translation>
+ </message>
+ <message>
+ <source>Title Page</source>
+ <translation>æ¨é¡é </translation>
+ </message>
+ <message>
+ <source>Last Page</source>
+ <translation>åä¸é </translation>
+ </message>
+ <message>
+ <source>Page Number</source>
+ <translation>é é¢ç·¨è</translation>
+ </message>
+ <message>
+ <source>Insert url text here</source>
+ <translation>æ¤èæå
¥url</translation>
</message>
</context>
<context>
@@ -1058,42 +1178,6 @@
<translation>移é¤é é¢</translation>
</message>
<message>
- <source>Remove Document</source>
- <translation>移é¤æ件</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the document '%1'?</source>
- <translation>確å®è¦ç§»é¤æ件 '%1'?</translation>
- </message>
- <message>
- <source>Empty Trash</source>
- <translation>æ¸
空åæ¶æ¡¶</translation>
- </message>
- <message>
- <source>Are you sure you want to empty trash?</source>
- <translation>確å®è¦æ¸
空åæ¶æ¡¶?</translation>
- </message>
- <message>
- <source>Emptying trash</source>
- <translation>åæ¶æ¡¶æ¸
空ä¸</translation>
- </message>
- <message>
- <source>Emptied trash</source>
- <translation>åæ¶æ¡¶å·²æ¸
空</translation>
- </message>
- <message>
- <source>Remove Folder</source>
- <translation>移é¤æªæ¡å¤¾</translation>
- </message>
- <message>
- <source>Are you sure you want to remove the folder '%1' and all its content?</source>
- <translation>確å®è¦ç§»é¤æªæ¡å¤¾ '%1' åå
¶ææå
§å®¹?</translation>
- </message>
- <message>
- <source>No document selected!</source>
- <translation>æªé¸æä»»ä½æ件ï¼</translation>
- </message>
- <message>
<source>Open Supported File</source>
<translation>éåæ¯æ´çæªæ¡</translation>
</message>
@@ -1141,9 +1225,11 @@
<source>The document '%1' 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>æ件 '%1' ä¿ç±æ°ççSankore (%2)æ製ä½ãè¥ä»è¦éåï¼å¯è½ææ失é¨ä»½å
§å®¹ã確å®è¦é²è¡å?</translation>
</message>
- <message>
+ <message numerus="yes">
<source>Are you sure you want to remove %n page(s) from the selected document '%1'?</source>
- <translation>確å®è¦å¾æé¸æ件 '%1' ç§»é¤ %n åé é¢?</translation>
+ <translation>
+ <numerusform>確å®è¦å¾æé¸æ件 '%1' ç§»é¤ %n é ?</numerusform>
+ </translation>
</message>
<message>
<source>Title page</source>
@@ -1157,6 +1243,14 @@
<source>Untitled Documents</source>
<translation>æªå½åæ件</translation>
</message>
+ <message>
+ <source>This is an irreversible action!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The model documents are not editable. Copy it to "My documents" to be able to work with</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBDocumentManager</name>
@@ -1244,6 +1338,58 @@
</message>
</context>
<context>
+ <name>UBDocumentReplaceDialog</name>
+ <message>
+ <source>Accept</source>
+ <translation>æ¥å</translation>
+ </message>
+ <message>
+ <source>Replace</source>
+ <translation>ç½®æ</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>åæ¶</translation>
+ </message>
+ <message>
+ <source>The name %1 is allready used.
+Keeping this name will replace the document.
+Providing a new name will create a new document.</source>
+ <translation> %1 å稱已被使ç¨ã
+使ç¨æ¬å稱ï¼æ件æ被置æã
+使ç¨æ°å稱ï¼åæç¢çæ°æ件ã</translation>
+ </message>
+</context>
+<context>
+ <name>UBDocumentTreeModel</name>
+ <message>
+ <source>My documents</source>
+ <translation>æçæ件</translation>
+ </message>
+ <message>
+ <source>Models</source>
+ <translation>Models</translation>
+ </message>
+ <message>
+ <source>Trash</source>
+ <translation>åæ¶æ¡¶</translation>
+ </message>
+ <message>
+ <source>Untitled documents</source>
+ <translation>å°æªæ¨é¡æ件</translation>
+ </message>
+ <message>
+ <source>Copying page %1/%2</source>
+ <translation type="unfinished">é é¢ %1/%2 è¤è£½ä¸</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 pages copied</source>
+ <translation type="unfinished">
+ <numerusform>å·²è¤è£½ %1 é </numerusform>
+ </translation>
+ </message>
+</context>
+<context>
<name>UBDocumentTreeWidget</name>
<message>
<source>%1 (copy)</source>
@@ -1253,9 +1399,110 @@
<source>Copying page %1/%2</source>
<translation>é é¢ %1/%2 è¤è£½ä¸</translation>
</message>
- <message>
+ <message numerus="yes">
<source>%1 pages copied</source>
- <translation>å·²è¤è£½ %1 åé é¢</translation>
+ <translation>
+ <numerusform>å·²è¤è£½ %1 é </numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>UBDownloadManager</name>
+ <message>
+ <source>Download failed.</source>
+ <translation>ä¸è¼å¤±æ</translation>
+ </message>
+ <message>
+ <source>the remote server refused the connection (the server is not accepting requests)</source>
+ <translation>å¤é¨remote server æçµé£ç· (the server is not accepting requests)</translation>
+ </message>
+ <message>
+ <source>the remote server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>æ©å¨reply被æ¥æ¶ä¸èçä¹åï¼å¤é¨remote server å°±ééé£ç·ã</translation>
+ </message>
+ <message>
+ <source>the remote host name was not found (invalid hostname)</source>
+ <translation>the remote host name was not found (invalid hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the remote server timed out</source>
+ <translation>å¤é¨ä¼ºæå¨remote server timed out</translation>
+ </message>
+ <message>
+ <source>the operation was canceled via calls to abort() or close() before it was finished.</source>
+ <translation>the operation was canceled via calls to abort() or close() before it was finished.</translation>
+ </message>
+ <message>
+ <source>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</source>
+ <translation>the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.</translation>
+ </message>
+ <message>
+ <source>the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established.</source>
+ <translation>網路é£ç·å¤±æã系統已ååå®é»roamingãééæ°æ交requestï¼å¾
é£ç·å復æ¹è½èçã</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy server was refused (the proxy server is not accepting requests)</source>
+ <translation>proxy伺æå¨é£çµè¢«æ (the proxy server is not accepting requests)</translation>
+ </message>
+ <message>
+ <source>the proxy server closed the connection prematurely, before the entire reply was received and processed</source>
+ <translation>æ©å¨reply被æ¥æ¶ä¸èçä¹åï¼proxy server å°±ééé£ç·ã</translation>
+ </message>
+ <message>
+ <source>the proxy host name was not found (invalid proxy hostname)</source>
+ <translation>the proxy host name was not found (invalid proxy hostname)</translation>
+ </message>
+ <message>
+ <source>the connection to the proxy timed out or the proxy did not reply in time to the request sent</source>
+ <translation>proxy timed out æ the proxy æ²æåæ</translation>
+ </message>
+ <message>
+ <source>the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)</source>
+ <translation>proxy éè¦èªè¨¼æè½èçè¦æ±ï¼ä½ä¸¦æªééä»»ä½æä¾çè³æï¼å¦ææç話ï¼</translation>
+ </message>
+ <message>
+ <source>the access to the remote content was denied (similar to HTTP error 401)</source>
+ <translation>å¤é¨å
§å®¹åå被æ (similar to HTTP error 401)</translation>
+ </message>
+ <message>
+ <source>the operation requested on the remote content is not permitted</source>
+ <translation>å¤é¨çrequestä¸è¢«å
許</translation>
+ </message>
+ <message>
+ <source>the remote content was not found at the server (similar to HTTP error 404)</source>
+ <translation>the remote content was not found at the server (similar to HTTP error 404)</translation>
+ </message>
+ <message>
+ <source>the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)</source>
+ <translation>å¤é¨remote server éè¦èªè¨¼æè½èçï¼ä½ä¸¦æªééä»»ä½æä¾çè³æï¼å¦ææç話ï¼</translation>
+ </message>
+ <message>
+ <source>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</source>
+ <translation>the request needed to be sent again, but this failed for example because the upload data could not be read a second time.</translation>
+ </message>
+ <message>
+ <source>the Network Access API cannot honor the request because the protocol is not known</source>
+ <translation>å çºprotocol æªç¥ï¼Network Access APIçrequestä¸è¢«èçã</translation>
+ </message>
+ <message>
+ <source>the requested operation is invalid for this protocol</source>
+ <translation>the requested operation is invalid for this protocol</translation>
+ </message>
+ <message>
+ <source>an unknown network-related error was detected</source>
+ <translation>åµæ¸¬å°ç¶²è·¯æé¯èª¤</translation>
+ </message>
+ <message>
+ <source>an unknown proxy-related error was detected</source>
+ <translation>åµæ¸¬å°proxyç¸éçé¯èª¤</translation>
+ </message>
+ <message>
+ <source>an unknown error related to the remote content was detected</source>
+ <translation>åµæ¸¬å°å¤é¨å
§å®¹æé¯èª¤</translation>
+ </message>
+ <message>
+ <source>a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)</source>
+ <translation>åµæ¸¬å°protocolé¯èª¤ (parsing error, invalid or unexpected responses, etc.)</translation>
</message>
</context>
<context>
@@ -1327,6 +1574,33 @@
</message>
</context>
<context>
+ <name>UBExportDocumentSetAdaptor</name>
+ <message>
+ <source>Failed to export...</source>
+ <translation>å¯åºå¤±æ...</translation>
+ </message>
+ <message>
+ <source>Export as UBX File</source>
+ <translation>以UBZæ ¼å¼å¯åº</translation>
+ </message>
+ <message>
+ <source>Exporting document...</source>
+ <translation>æ件å¯åºä¸...</translation>
+ </message>
+ <message>
+ <source>Export successful.</source>
+ <translation>å¯åºæåã</translation>
+ </message>
+ <message>
+ <source>Export failed.</source>
+ <translation>å¯åºå¤±æã</translation>
+ </message>
+ <message>
+ <source>Export to Sankore UBX Format</source>
+ <translation>å¯åºæSankore UBXæ ¼å¼</translation>
+ </message>
+</context>
+<context>
<name>UBExportFullPDF</name>
<message>
<source>Export as PDF File</source>
@@ -1413,6 +1687,10 @@
<source>Object informations</source>
<translation>ç©ä»¶è³è¨</translation>
</message>
+ <message>
+ <source>Add</source>
+ <translation type="unfinished">æ°å¢</translation>
+ </message>
</context>
<context>
<name>UBFeaturesActionBar</name>
@@ -1495,6 +1773,14 @@
<source>Trash</source>
<translation>åæ¶æ¡¶</translation>
</message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>æ¸ç±¤</translation>
+ </message>
+ <message>
+ <source>Web</source>
+ <translation>網路</translation>
+ </message>
</context>
<context>
<name>UBFeaturesNewFolderDialog</name>
@@ -1528,6 +1814,22 @@
<source>Visible on Extended Screen</source>
<translation>æ¼å»¶ä¼¸è¢å¹å¯è¦</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>æ°å¢åä½</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>移é¤é³è¨æªé£çµ</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>移é¤é é¢é£çµ</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>移é¤ç¶²è·¯urlé£çµ</translation>
+ </message>
</context>
<context>
<name>UBGraphicsItemDelegate</name>
@@ -1543,6 +1845,22 @@
<source>Go to Content Source</source>
<translation>è³å
§å®¹ä¾æº</translation>
</message>
+ <message>
+ <source>Add an action</source>
+ <translation>æ°å¢åä½</translation>
+ </message>
+ <message>
+ <source>Remove link to audio</source>
+ <translation>移é¤é³è¨æªé£çµ</translation>
+ </message>
+ <message>
+ <source>Remove link to page</source>
+ <translation>移é¤é é¢é£çµ</translation>
+ </message>
+ <message>
+ <source>Remove link to web url</source>
+ <translation>移é¤ç¶²è·¯urlé£çµ</translation>
+ </message>
</context>
<context>
<name>UBGraphicsTextItem</name>
@@ -1563,13 +1881,6 @@
</message>
</context>
<context>
- <name>UBGraphicsW3CWidgetItem</name>
- <message>
- <source>Web</source>
- <translation>網路</translation>
- </message>
-</context>
-<context>
<name>UBGraphicsWidgetItem</name>
<message>
<source>Loading ...</source>
@@ -1630,6 +1941,13 @@
</message>
</context>
<context>
+ <name>UBImportDocumentSetAdaptor</name>
+ <message>
+ <source>Open-Sankore (set of documents) (*.ubx)</source>
+ <translation>Open-Sankore (set of documents) (*.ubx)</translation>
+ </message>
+</context>
+<context>
<name>UBImportImage</name>
<message>
<source>Image Format (</source>
@@ -1709,22 +2027,28 @@
<translation>ç»å
¥Proxy失æ</translation>
</message>
<message>
+ <source>Yes</source>
+ <translation>æ¯</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>å¦</translation>
+ </message>
+ <message>
<source>SSL Errors:
+
%1
+
%2
+
Do you want to ignore these errors for this host?</source>
<translation>SSL Errors:
+
%1
+
%2
- è¦å¿½ç¥éäºè¨æ¯å?</translation>
- </message>
- <message>
- <source>Yes</source>
- <translation>æ¯</translation>
- </message>
- <message>
- <source>No</source>
- <translation>å¦</translation>
+
+æ¯å¦è¦å¿½ç¥éäºé¯èª¤ï¼</translation>
</message>
</context>
<context>
@@ -1838,6 +2162,142 @@ Do you want to ignore these errors for this host?</source>
<source>Marker is pressure sensitive</source>
<translation>æå£åæ示ç</translation>
</message>
+ <message>
+ <source>Default</source>
+ <translation>é è¨</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>é¿æ伯æ</translation>
+ </message>
+ <message>
+ <source>Bulgarian</source>
+ <translation>Bulgarian</translation>
+ </message>
+ <message>
+ <source>Catalan</source>
+ <translation>Catalan</translation>
+ </message>
+ <message>
+ <source>Czech</source>
+ <translation>Czech</translation>
+ </message>
+ <message>
+ <source>Danish</source>
+ <translation>Danish</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>å¾·æ</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>å¸èæ</translation>
+ </message>
+ <message>
+ <source>English</source>
+ <translation>è±æ</translation>
+ </message>
+ <message>
+ <source>English UK</source>
+ <translation>è±æ-UK</translation>
+ </message>
+ <message>
+ <source>Spanish</source>
+ <translation>西ççæ</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>æ³æ</translation>
+ </message>
+ <message>
+ <source>Swiss French</source>
+ <translation>æ³æ(ç士)</translation>
+ </message>
+ <message>
+ <source>Italian</source>
+ <translation>義大å©æ</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>å¸ä¼¯ä¾æ</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>æ¥æ</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>éæ</translation>
+ </message>
+ <message>
+ <source>Malagasy</source>
+ <translation>Malagasy</translation>
+ </message>
+ <message>
+ <source>Norwegian</source>
+ <translation>æªå¨æ</translation>
+ </message>
+ <message>
+ <source>Dutch</source>
+ <translation>Dutch</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>æ³¢èæ</translation>
+ </message>
+ <message>
+ <source>Romansh</source>
+ <translation>Romansh</translation>
+ </message>
+ <message>
+ <source>Romanian</source>
+ <translation>Romanian</translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>ä¿æ</translation>
+ </message>
+ <message>
+ <source>Slovak</source>
+ <translation>Slovak</translation>
+ </message>
+ <message>
+ <source>Swedish</source>
+ <translation>çå
¸æ</translation>
+ </message>
+ <message>
+ <source>Turkish</source>
+ <translation>åè³å
¶æ</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>ä¸æ</translation>
+ </message>
+ <message>
+ <source>Chinese Simplified</source>
+ <translation>ç°¡é«ä¸æ</translation>
+ </message>
+ <message>
+ <source>Chinese Traditional</source>
+ <translation>æ£é«ä¸æ</translation>
+ </message>
+ <message>
+ <source>Corsican</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Hindi</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portuguese</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Basque</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>UBProxyLoginDlg</name>
@@ -1879,6 +2339,17 @@ Do you want to ignore these errors for this host?</source>
<source>My Movies</source>
<translation>æçå½±ç</translation>
</message>
+ <message>
+ <source>/Web</source>
+ <translation>/Web</translation>
+ </message>
+</context>
+<context>
+ <name>UBStartupHintsPalette</name>
+ <message>
+ <source>Visible next time</source>
+ <translation>ä¸æ¬¡é¡¯ç¾</translation>
+ </message>
</context>
<context>
<name>UBTGActionWidget</name>
@@ -2087,20 +2558,16 @@ Do you want to ignore these errors for this host?</source>
<source>Cache</source>
<translation>Cache</translation>
</message>
- <message>
- <source>Aristo</source>
- <translation>Aristo</translation>
- </message>
</context>
<context>
- <name>UBTrapFlashController</name>
+ <name>UBTrapWebPageContentController</name>
<message>
<source>Whole page</source>
<translation>æ´é </translation>
</message>
<message>
- <source>Web</source>
- <translation>網路</translation>
+ <source>Embed </source>
+ <translation>Embed </translation>
</message>
</context>
<context>
@@ -2327,10 +2794,6 @@ Please reboot the application to access the updated documents.</source>
<translation>%2 ç %1 (%3/ç§) %4</translation>
</message>
<message>
- <source>?</source>
- <translation>?</translation>
- </message>
- <message>
<source>%1 of %2 - Stopped</source>
<translation>%2 ç %1 - å·²åæ¢</translation>
</message>
@@ -2346,17 +2809,25 @@ Please reboot the application to access the updated documents.</source>
<source>MB</source>
<translation>MB</translation>
</message>
+ <message>
+ <source>?</source>
+ <comment>unknown file size</comment>
+ <translatorcomment>æªæ¡å¤§å°æªç¥</translatorcomment>
+ <translation>?</translation>
+ </message>
</context>
<context>
<name>WBDownloadManager</name>
<message>
- <source>%1 Downloads</source>
- <translation>%1 åä¸è¼</translation>
- </message>
- <message>
<source>1 Download</source>
<translation>1 åä¸è¼</translation>
</message>
+ <message>
+ <source>%1 Downloads</source>
+ <comment>always >= 2</comment>
+ <translatorcomment>æ°¸é >= 2</translatorcomment>
+ <translation>%1 åä¸è¼</translation>
+ </message>
</context>
<context>
<name>WBHistoryModel</name>
@@ -2445,6 +2916,49 @@ Please reboot the application to access the updated documents.</source>
</message>
</context>
<context>
+ <name>WBTrapWebPageContentWindow</name>
+ <message>
+ <source>Select content to trap:</source>
+ <translation>é¸æè¦æªåçå
§å®¹</translation>
+ </message>
+ <message>
+ <source>Application name</source>
+ <translation>æç¨ç¨å¼å稱</translation>
+ </message>
+ <message>
+ <source>Restriction and disclaimer. </source>
+ <translation>éå¶èå
責è²æ</translation>
+ </message>
+ <message>
+ <source>This feature is developed to work on the most common web pages.</source>
+ <translation>æ¬ç¹è²ä¿æä¸è¬æ常è¦ç¶²é æéç¼</translation>
+ </message>
+ <message>
+ <source>Please respect copyrights for creating links or trapping content from the web.</source>
+ <translation>å°æ¼ä»»ä½ç¶²è·¯é£çµæå
§å®¹æªåï¼è«å°éæºæ
§è²¡ç¢æ¬</translation>
+ </message>
+ <message>
+ <source>Download to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Download to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+library</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Add link to
+current page</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>WBWebPage</name>
<message>
<source>Download</source>
@@ -2520,6 +3034,10 @@ p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:10pt;">By clicking 'Upload,' you certify that you own all rights to the content or that you are authorized by the owner to make the content publicly available on YouTube, and that it otherwise complies with the YouTube Terms of Service located at </span><a href="http://www.youtube.com/t/terms"><span style=" font-family:'Lucida Grande'; font-size:10pt; text-decoration: underline; color:#0000ff;">http://www.youtube.com/t/terms</span></a></p></body></html></translation>
</message>
+ <message>
+ <source>Restore credentials on reboot</source>
+ <translation>Restore credentials on reboot</translation>
+ </message>
</context>
<context>
<name>brushProperties</name>
@@ -2707,7 +3225,7 @@ p, li { white-space: pre-wrap; }
<source>Marker</source>
<translation>æ示ç</translation>
</message>
- <message>
+ <message utf8="true">
<source>version : â¦</source>
<translation>çæ¬: â¦</translation>
</message>
@@ -2716,26 +3234,14 @@ p, li { white-space: pre-wrap; }
<translation>ææ¬æ¢æ¬¾</translation>
</message>
<message>
- <source>OpenSSl</source>
- <translation>OpenSSl</translation>
- </message>
- <message>
<source>zlib</source>
<translation>zlib</translation>
</message>
<message>
- <source>xpdf</source>
- <translation>xpdf</translation>
- </message>
- <message>
- <source>Quazip</source>
- <translation>Quazip</translation>
- </message>
- <message>
<source>Network</source>
<translation>網路</translation>
</message>
- <message>
+ <message utf8="true">
<source>Open-Sankoré</source>
<translation>Open-Sankoré</translation>
</message>
@@ -2776,10 +3282,6 @@ p, li { white-space: pre-wrap; }
<translation>å¯ç¢¼:</translation>
</message>
<message>
- <source>Planète Sankoré ID</source>
- <translation>Planète Sankoré ID</translation>
- </message>
- <message>
<source>User:</source>
<translation>使ç¨è
帳è:</translation>
</message>
@@ -2788,902 +3290,63 @@ p, li { white-space: pre-wrap; }
<translation>å¯ç¢¼:</translation>
</message>
<message>
- <source> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
- Preamble
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
- a) The modified work must itself be a software library.
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
- NO WARRANTY
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
- END OF TERMS AND CONDITIONS
-</source>
- <translation> GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
- Copyright (C) 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
- Preamble
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
- a) The modified work must itself be a software library.
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
- NO WARRANTY
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
- END OF TERMS AND CONDITIONS
-</translation>
- </message>
- <message>
<source>Credits</source>
<translation>è²¢ç»</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></translation>
+ <source>Start up tips</source>
+ <translation>ååæ示</translation>
</message>
<message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;">Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler</span><span style=" font-family:'Ubuntu'; font-size:12pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> This software is provided 'as-is', 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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:</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 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.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"><br /></span><span style=" font-family:'Ubuntu'; font-size:9pt; color:#1a1a1a;"> 3. This notice may not be removed or altered from any source distribution.</span><span style=" font-family:'Ubuntu'; font-size:9pt;"> </span></p></td></tr></table></body></html></translation>
+ <source>Show start up tips</source>
+ <translation>顯示ååæ示</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>èªè¨</translation>
+ </message>
+ <message>
+ <source>Select a language</source>
+ <translation>é¸æèªè¨</translation>
+ </message>
+ <message>
+ <source>The new language will be loaded on next restart</source>
+ <translation>ä¸æ¬¡ååæï¼æ°é¸èªè¨å°æè¼å
¥</translation>
+ </message>
+ <message utf8="true">
+ <source>Close Open-Sankoré</source>
+ <translation>ééOpen-Sankoré</translation>
+ </message>
+ <message utf8="true">
+ <source>Planète Sankoré ID for exporting file</source>
+ <translation>Planète Sankoré ID for exporting file</translation>
+ </message>
+ <message>
+ <source>Restore credentials on reboot </source>
+ <translation>Restore credentials on reboot </translation>
+ </message>
+ <message>
+ <source>OpenSSL</source>
+ <translation>OpenSSL</translation>
+ </message>
+ <message>
+ <source>Xpdf</source>
+ <translation>Xpdf</translation>
+ </message>
+ <message>
+ <source>QuaZIP</source>
+ <translation>QuaZIP</translation>
</message>
<message>
<source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;">
<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
<tr>
<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;">
-<tr>
-<td style="border: none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Open-Sankoré version 1.4 , Copyright (C) 2010-2012 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br /><br />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.<br />Vous pouvez consulter et charger le code source du logiciel sur </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />Open-Sankoré est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER.<br />Veuillez consulter la licence Lesser GNU General Public Licence située dans l'onglet Licences ou consulter le site </span><a href="http://www.gnu.org/licenses/"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><http://www.gnu.org/licenses/></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">.<br /><br />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 </span><a href="https://github.com/Sankore"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;"><https://github.com/Sankore></span></a><span style=" font-family:'Ubuntu'; font-size:11pt;"><br />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.<br /><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Contact : <br />Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)<br />Délégation Interministérielle à l'Education Numérique en Afrique<br />20 Avenue Ségur Paris 75007<br />Téléphone : 01 43 17 68 08<br />email: </span><a href="mailto:contact at sankore.org"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">contact at sankore.org</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">"</span></p></td></tr></table></body></html></translation>
- </message>
- <message>
- <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></source>
- <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Crédits police scolaire Open-Sankoré : </span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police Andika Basic dispose d'une licence Open Font License </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Sil international</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licence OFL (traduction française non officielle) http://fontforge.sourceforge.net/OFL-Unofficial-fr.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence OFL : </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Court </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier Ligne Court</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Ecolier suivantes sont l'oeuvre de Jean-Marie Douteau et disposent d'une licence Creative Commons BY NC ND :</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ecolier lignes pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">- Ãcolier CP pointillés</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Jean-Marie Douteau (douteau.ecolier at sfr.fr)</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://douteau.ecolier.perso.sfr.fr/page_ecolier.htm</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Cursive sont l'oeuvre d'Antoine Fetet (antoine.fetet at laposte.net) à partir d'une police proposée par Jean-Claude Gineau</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://lps13.free.fr/contenu/construire/Cursive_standard.zip et http://fr.fontriver.com/font/gino_school_script/</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">L'auteur en autorise l'utilisation dans le cadre du logiciel open-Sankoré pour un usage non commercial</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Les polices Script (Ecole et CaseEcole) sont l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCO.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/SCRIPTCA.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p>
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:10pt;"></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"><br /></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">La police phonétique, Alphonet est l'oeuvre d'Henri Rogelet</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices/ALPHONET.zip</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;"> © Henri Rogelet <h.rogelet at free.fr></span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Autorisation pour un usage non commercial</span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Source : http://pointecole.free.fr/polices.html</span></p></body></html></translation>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">The licences are in English to respect the official and legal approved translation.</span></p></td></tr></table></body></html></source>
+ <translation type="unfinished"></translation>
</message>
</context>
<context>
diff --git a/Sankore-3.1/resources/images/circle.svg b/Sankore-3.1/resources/images/circle.svg
new file mode 100644
index 0000000..33346f1
--- /dev/null
+++ b/Sankore-3.1/resources/images/circle.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="26px" height="26px" viewBox="0 0 26 26" style="enable-background:new 0 0 26 26;" xml:space="preserve">
+
+<circle style="fill:#CCCCCC;" cx="13" cy="13" r="13"/>
+<circle style="fill:#999999;" cx="13" cy="13" r="11"/>
+<circle style="fill:#FFFFFF;" cx="13" cy="13" r="7"/>
+
+</svg>
diff --git a/Sankore-3.1/resources/images/createLinkPalette/LinkPage.svg b/Sankore-3.1/resources/images/createLinkPalette/LinkPage.svg
new file mode 100644
index 0000000..39fc9a3
--- /dev/null
+++ b/Sankore-3.1/resources/images/createLinkPalette/LinkPage.svg
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-15.421 -0.528 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g>
+ <g>
+ <path fill="#FFFFFF" d="M58.264,41.693c0,1.951-1.596,3.548-3.547,3.548H4.257c-1.951,0-3.547-1.597-3.547-3.548V4.257
+ c0-1.951,1.596-3.547,3.547-3.547h50.46c1.951,0,3.547,1.596,3.547,3.547V41.693z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="29.4873" y1="2.936" x2="29.4873" y2="43.0151">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M56.25,39.822c0,1.755-1.485,3.193-3.3,3.193H6.023c-1.814,0-3.299-1.438-3.299-3.193V6.128
+ c0-1.756,1.485-3.192,3.299-3.192H52.95c1.814,0,3.3,1.437,3.3,3.192V39.822z"/>
+ </g>
+ <g>
+ <path fill="none" stroke="#A2A9AD" stroke-width="1.419" stroke-miterlimit="10" d="M58.264,41.693
+ c0,1.951-1.596,3.548-3.547,3.548H4.257c-1.951,0-3.547-1.597-3.547-3.548V4.257c0-1.951,1.596-3.547,3.547-3.547h50.46
+ c1.951,0,3.547,1.596,3.547,3.547V41.693z"/>
+ </g>
+</g>
+<path fill="#676767" d="M32.789,26.523h-2.882V15.662c-1.053,0.985-2.294,1.713-3.723,2.185v-2.615
+ c0.752-0.246,1.569-0.713,2.451-1.4s1.487-1.489,1.815-2.405h2.338V26.523z"/>
+<g>
+ <g>
+ <path fill="#FFFFFF" d="M68.184,58.218c0,1.951-1.596,3.548-3.547,3.548h-50.46c-1.951,0-3.548-1.597-3.548-3.548V20.781
+ c0-1.951,1.597-3.547,3.548-3.547h50.46c1.951,0,3.547,1.596,3.547,3.547V58.218z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="39.4072" y1="19.4604" x2="39.4072" y2="59.5396">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M66.17,56.346c0,1.756-1.485,3.193-3.3,3.193H15.943c-1.815,0-3.3-1.438-3.3-3.193V22.653
+ c0-1.756,1.484-3.192,3.3-3.192H62.87c1.814,0,3.3,1.437,3.3,3.192V56.346z"/>
+ </g>
+ <g>
+ <path fill="none" stroke="#A2A9AD" stroke-width="1.419" stroke-miterlimit="10" d="M68.184,58.218
+ c0,1.951-1.596,3.548-3.547,3.548h-50.46c-1.951,0-3.548-1.597-3.548-3.548V20.781c0-1.951,1.597-3.547,3.548-3.547h50.46
+ c1.951,0,3.547,1.596,3.547,3.547V58.218z"/>
+ </g>
+</g>
+<path fill="#676767" d="M44.458,40.757v2.677H34.355c0.109-1.012,0.438-1.971,0.984-2.877c0.547-0.906,1.627-2.107,3.241-3.605
+ c1.299-1.21,2.096-2.031,2.39-2.461c0.396-0.595,0.595-1.183,0.595-1.764c0-0.643-0.173-1.137-0.518-1.482
+ c-0.346-0.345-0.822-0.518-1.432-0.518c-0.602,0-1.08,0.181-1.436,0.543c-0.355,0.362-0.561,0.964-0.615,1.805l-2.872-0.288
+ c0.171-1.586,0.708-2.725,1.61-3.415c0.902-0.691,2.031-1.036,3.385-1.036c1.483,0,2.649,0.399,3.497,1.2
+ c0.848,0.8,1.272,1.795,1.272,2.984c0,0.677-0.122,1.321-0.364,1.933c-0.243,0.612-0.628,1.253-1.154,1.923
+ c-0.349,0.444-0.978,1.083-1.887,1.918c-0.909,0.834-1.485,1.388-1.729,1.661c-0.242,0.274-0.439,0.541-0.59,0.8H44.458z"/>
+<path fill="none" stroke="#FBCB45" stroke-width="3" stroke-miterlimit="10" d="M78.58,77.427c0,2.09-1.661,3.797-3.691,3.797
+ H22.382c-2.03,0-3.69-1.707-3.69-3.797V37.354c0-2.088,1.66-3.796,3.69-3.796h52.507c2.03,0,3.691,1.708,3.691,3.796V77.427z"/>
+<g id="XMLID_1_">
+ <g>
+ <path fill="#FFFFFF" d="M77.475,76.258c0,1.951-1.596,3.548-3.547,3.548h-50.46c-1.951,0-3.548-1.597-3.548-3.548V38.822
+ c0-1.951,1.597-3.547,3.548-3.547h50.46c1.951,0,3.547,1.596,3.547,3.547V76.258z"/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="48.6982" y1="37.501" x2="48.6982" y2="77.5796">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M75.461,74.387c0,1.756-1.485,3.192-3.3,3.192H25.234c-1.815,0-3.3-1.437-3.3-3.192V40.693
+ c0-1.756,1.484-3.192,3.3-3.192h46.927c1.814,0,3.3,1.437,3.3,3.192V74.387z"/>
+ </g>
+ <g>
+ <path fill="none" stroke="#A2A9AD" stroke-width="1.419" stroke-miterlimit="10" d="M77.475,76.258
+ c0,1.951-1.596,3.548-3.547,3.548h-50.46c-1.951,0-3.548-1.597-3.548-3.548V38.822c0-1.951,1.597-3.547,3.548-3.547h50.46
+ c1.951,0,3.547,1.596,3.547,3.547V76.258z"/>
+ </g>
+</g>
+<path fill="#676767" d="M43.703,59.895l2.79-0.339c0.088,0.711,0.328,1.256,0.718,1.631c0.39,0.377,0.861,0.564,1.415,0.564
+ c0.595,0,1.096-0.226,1.502-0.677c0.407-0.452,0.61-1.06,0.61-1.825c0-0.725-0.194-1.3-0.584-1.724s-0.865-0.636-1.426-0.636
+ c-0.369,0-0.811,0.072-1.323,0.215l0.318-2.348c0.779,0.02,1.374-0.148,1.784-0.508s0.615-0.836,0.615-1.432
+ c0-0.506-0.15-0.908-0.451-1.209s-0.7-0.451-1.2-0.451c-0.492,0-0.912,0.17-1.261,0.512s-0.562,0.842-0.636,1.498l-2.657-0.451
+ c0.185-0.91,0.464-1.637,0.836-2.18c0.373-0.543,0.893-0.971,1.56-1.282c0.666-0.312,1.413-0.466,2.24-0.466
+ c1.416,0,2.551,0.451,3.405,1.354c0.704,0.738,1.057,1.572,1.057,2.502c0,1.32-0.722,2.373-2.164,3.158
+ c0.861,0.186,1.55,0.6,2.066,1.242s0.774,1.418,0.774,2.328c0,1.318-0.482,2.443-1.446,3.373c-0.964,0.931-2.164,1.396-3.6,1.396
+ c-1.36,0-2.489-0.392-3.385-1.175S43.847,61.159,43.703,59.895z"/>
+<g>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="22.5479" y1="55.0215" x2="14.5479" y2="82.5214">
+ <stop offset="0" style="stop-color:#F6B93C"/>
+ <stop offset="0.0341" style="stop-color:#F6B53A"/>
+ <stop offset="0.2023" style="stop-color:#F3A633"/>
+ <stop offset="0.393" style="stop-color:#F29C2E"/>
+ <stop offset="0.6231" style="stop-color:#F1962B"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M24.448,65.637l8.522,8.555V48.929L8.203,49.331l7.428,7.456
+ c-4.562,5.018-20.488,25.244,6.841,37.215C22.472,94.002,7.121,79.278,24.448,65.637z"/>
+ <g>
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="24.2822" y1="55.1094" x2="-1.3598" y2="105.5664">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.0261" style="stop-color:#F8D244"/>
+ <stop offset="0.083" style="stop-color:#F6C33E"/>
+ <stop offset="0.1499" style="stop-color:#F5B63A"/>
+ <stop offset="0.2322" style="stop-color:#F3AE37"/>
+ <stop offset="0.3465" style="stop-color:#F3A936"/>
+ <stop offset="0.6503" style="stop-color:#F3A735"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M23.063,94.925l-3.636-2.05c-6.476-3.653-11.159-9.02-12.222-14.005
+ c-1.997-9.371,5.227-18.565,8.425-22.083l-7.427-7.456l24.767-0.025V74.19l-8.522-8.554c-5.218,4.107-7.987,8.725-8.231,13.722
+ c-0.24,4.913,3.354,10.315,4.535,12.092L23.063,94.925z M12.942,51.255l4.104,4.121c0.754,0.754,0.782,1.966,0.064,2.756
+ c-2.991,3.29-9.754,11.856-7.949,20.321c0.744,3.49,3.565,7.238,7.646,10.323c-1.384-2.638-2.755-6.122-2.59-9.516
+ c0.273-5.602,3.299-10.713,8.993-15.195c0.767-0.607,1.962-0.536,2.655,0.162l5.104,5.122V51.258L12.942,51.255z"/>
+ </g>
+ <path fill="#7B5020" d="M24.777,81.949"/>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M24.448,65.637l8.522,8.555V49.306L8.203,49.331l7.428,7.456c-4.562,5.018-20.488,25.244,6.841,37.215
+ C22.472,94.002,7.121,79.278,24.448,65.637z"/>
+</g>
+</svg>
diff --git a/Sankore-3.1/resources/images/createLinkPalette/LinkWeb.svg b/Sankore-3.1/resources/images/createLinkPalette/LinkWeb.svg
new file mode 100644
index 0000000..5262e44
--- /dev/null
+++ b/Sankore-3.1/resources/images/createLinkPalette/LinkWeb.svg
@@ -0,0 +1,395 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-13.297 -1.989 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<path fill="none" stroke="#FBCB45" stroke-width="3" stroke-miterlimit="10" d="M45.92,1.5c-3.361,0-42.052,0-42.052,0v81.461
+ h61.869c0,0,0-59.171,0-62.127c0-0.788-0.075-3.659-1.049-4.852c-1.63-1.997-12.126-11.074-14.008-12.801
+ C49.455,2.056,46.855,1.5,45.92,1.5z"/>
+<g id="XMLID_2_">
+ <g>
+ <path fill="#FFFFFF" d="M44.298,2.604c-3.26,0-39.495,0-39.495,0v79h60c0,0,0-57.821,0-60.688c0-1.682-0.81-3.904-1.754-5.062
+ c-1.58-1.936-10.316-9.098-12.142-10.773C49.719,3.992,45.205,2.604,44.298,2.604z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="34.8027" y1="6.5547" x2="34.8027" y2="77.6548">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M43.349,6.555c-2.935,0-35.546,0-35.546,0v71.1h54c0,0,0-52.039,0-54.619
+ c0-1.514-0.729-3.514-1.578-4.555c-1.423-1.743-9.285-8.188-10.928-9.696C48.228,7.803,44.165,6.555,43.349,6.555z"/>
+ </g>
+ <radialGradient id="SVGID_2_" cx="53.4854" cy="12.1338" r="16.1284" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#D3D3D3"/>
+ <stop offset="1" style="stop-color:#FAFDFD;stop-opacity:0"/>
+ </radialGradient>
+ <path fill="url(#SVGID_2_)" d="M39.228,6.482c0,0-9.017,6.213-2.155,14.081c6.862,7.869,11.963,10.418,17.65,9.242
+ c5.687-1.177,5.529-1.826,6.314-3.395s0.932-5.307,0.353-8.13c-0.533-2.598-7.11-7.148-10.026-9.238
+ C47.063,5.96,44.738,6.417,39.228,6.482z"/>
+ <path fill="#FFFFFF" d="M47.718,18.25c1.835,0,10.509-0.217,12.083,0.438c1.573,0.655,3.984,4.525,3.984,6.492v-8.531L43.983,3.141
+ c0,0,2.41,2.174,3.067,4.797C47.706,10.56,47.718,18.25,47.718,18.25z"/>
+ <path fill="none" stroke="#A1A9AD" stroke-width="1.5" stroke-linejoin="round" stroke-miterlimit="10" d="M45.584,2.604
+ c-3.26,0-40.781,0-40.781,0v79h60c0,0,0-57.383,0-60.25c0-0.764-0.073-3.548-1.018-4.706c-1.58-1.936-11.759-10.74-13.584-12.415
+ C49.013,3.144,46.491,2.604,45.584,2.604z"/>
+</g>
+<g>
+
+ <image width="158" height="158" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACjCAYAAADmbK6AAAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAM0hJREFUeNrsfU2vLMlxXUb2G268
+FwTDGy+80sKgRNOQIYnyP/FqvsgZ2HuDpgUZggB/zXBhcf6LTZG0QMPW1mtvbMDwX5jpDHdVxseJ
+yKzqvvd234/3umf63Xu7q7urq06dEyciMrOU++1+u9/ut/vtfrvfXumN7ofAb7//l7/98fKznY5K
+PR0brv3wfCTPV/j5Ha1/0aFwabJd5cuO7G//xQ9/fj/adzCut+//xd98zlRWOLXTv9WPxgJGYqL1
+wAjGToDrB2p5fPm1v65v0x/vx5ESaOORJoKDPoDxv/7zf/T1HYwfyO0fngBYBTinn58vYFrZbzkE
+8j+CkAR0AsIpAAfwCeDI/nzAiaDycyTW33z54YHzvQXj7/2b33xeT6g6oW3FyOmLfl6WHwKoIr9s
+gbAAC+rzWwCkOfAoP0ZnDjjLXW4Gxl9/IMB8r8D4e3/+m89O8R4dOgo+q8JohVBaBWXUGW8LhMVZ
+UNEbAFhpYDZCwImkn5DOAbTnbuvW3F+k71GZVzAe33Ng0vsCwn7yyufLKe/gciAa+hIbHiAmzCDU
+120xIIKvAPBItmNkUAqM5+gOIOR4Uk5/NvibO0b5tN8rGH/1xQ++voPxFYJwYcFVQiUOlJ9FZVlj
+w8SGaEwcsAmERJHSiEC6BXwFgMerE6dwfGdyPWVE/JvjU+30gwCgi4yfPp+Ppzd/X4D5JsH4D/78
+1599r+/6ZwVAdxAgKthMlnfYsELMqHKeQahP10iSGXzmXrYOar3geLcRlyDf9iQncK7A/C9vXMLf
+FBj//p/9+tN3dQESfXrQfQdGrMJs1eItcCsi3wcBDa+oBQYVcM1ASMCCAwAn4Fv2pSU6pJzyoTkt
+tglLnmLGAaTs7InAfNOgpLcCwtLZ7rOPhAG3gIjx4UyWkQ2DJIMpOQPCAYAIPn2/RiDTeKD3bIyi
+KwKSK0eQZnAqME+gZOqPfs1vEJT0ukH4q09lFz9dwURLNYR2gbg8iPFhETY8GLq22ZCARRGEFlFS
+SGwbAA8AvjoBHKNMn8ntKMhoAtQG4DxOgIlsKYb86//8xQ++uoPxCbe/97O//vSjlaZIGXEF4gEd
+8gYQNWhbgHiQvw4gyxTTOIENMSZEEFa6HIAs+1uSEy5lozIzxozD69bHeSXmi4HZHJQrO74FUNJr
+BOLpxyfvanV5BSCuFZQLgXjwpDVlpwxsaLRXDViSGkognAGQJ4yH4KQSS4WX3Nh/cgJfYFDaAGYG
+JS8b8etnSXo9IPzVJ3L8Pl3B1gE1AJHQNZ8BYnDLc1ke3DPGhBmE1aPSwICYLKcyoi9WXoh480Qw
+T2JGQyVbStLBiYzJArsMSpXvU0D51fLAawUlvR4glgWMpEBcduyj7pydeURWayH3ypC+yUAkx+lU
+lpENEdyKTjctDkICDqz6GXAkrQKjIQU+xxewIkV6bOvLewTIIzi5YUKSA5OypX6YMaZcpfs1AvLF
+wfh3T0CsAsSDIETl+XtEKIG01prlJK9l5+Sa94CYTUqNbIgs1/OTul0CYfU/LAVUEXzkoJMSJHHf
+r4vBeJRtT8zGDUHKDs4GBpwTWyooBagrFJN0L7b769fGki8Gxt/9V3/9iTDLJyJRlOPEwTlTNDCP
+AKKx1YE0GQ515uV9uiRbTJhBqBeHQhQBuPx+PO3ku5CXocG8zPLiDMRnJqb5G323fL/WQYjAZMgH
+tRko5e+TdPMRWPI1xpL0UkA8/fjYwDWX503DgtKsLTnfA7OyB0R/zGUZ2VAlWWPCDEJjwQ0ALuCr
+CXB0wUHnnb9XOQZwIjCXWHaBl7FlAqXFlBo/8hBLvhrZfnYw/u5Pf/nx6Vx+YnVkkWeN0QZ57mxl
+4AlALF1f351+voM84iVARFnue+G/GxuCHGcQ8g4Ac6uY1nT4ASdEE4XZ0MyAefqdl/1vAEqV72aJ
+RwNoT4xn2X4FgHxWMP7OCYinc/iJyiTI87ovh4k81/VEo2GpROCsF1B9dAEjYu6wQpHQZDmxoVUF
+QcoRhHsA7Il3j/Wo0Cy/My8ImjlhizEJwLkFzAxKkWDr9kGWXAA6ke0VkMt2v3whUNJzAvH0YR8L
+M/WKSDItU3lOcSLKs9WaV5PgIDtMgEjCdAhE3Qa5NrMh+YWwXhQIwlTmo1Kgbk3RQNcHHKsWTw53
+6XVwlgRMBGUT2AqgN1lS00Ci1QbIdRvmr16ilEjPBUSNEZ0Ve9ULTcu70y/vAGyb8pwMiwFL4sZa
+1SVjSmcEIspy9fAzGJsDu8xSpQBCZEBxQcRl2hAhrzl/uNk7Gzk3UCg4WSRaGRNByVB6OY4suW7d
+kmxnQHJH6bMDkp4LiOTxmrHilmk5J88LqtCwCMpcjmvB/CHRZUAc2FAleROEhOnHYJU9HQlOhubH
+nzeqL5jllvRN2EZBtAlKk+7Mkmy/vypA0nMAUeRvYMXDCXHZtEzLfaM8n40T3z0CiLQyoQ2+6gl2
+ikBHEHIoH0LjZMyBlwTX826ax7+8n9GBKWw5gLJBQrxBvvJIIuGvFJD0HEDcY8VsWhYwHpQVd+R5
+hbQAM8eJyy/vRBUPRJcBMcnyEhseQnnPxx0MIIRRgyjMqTJz8bH2mrSNiRmAyTyCUoJBczvL/bgc
+UkEWyvYlgDzKh3xXylfP0U1OtwbiOVZcmmXflcSKYFpKH9dM5+RZ4kSLEQ8AMB2Qj+HnDIg9/WMI
+j2xYY+kvgXAAYGiQkFGKF4ORhJoQnAmYbHlCDs+vP9rIkizmppVtQKqp6UaosG535HV8z1e/vDFD
+1lsDEXNtVLzEhnFUTb2nZEAEQyENCwTyTGWM9yyfCEAs9Hgg9j/ikK6qhqiYfVq3qT3YJA0x1DTV
+ZRjVstfywt37ohrM627Ye4i3qrKz8N097iYYK1b9ajHnL2ojYZEVsTzlFX1ila+t5dfTr1/emhnr
+rYGI40VUfSh0X2u2UUFKkDJxGyD1XZLTak/BMAFSjRYQGLr5EUAski7Scybxow32QhDOAGjgWv5e
+gLAowQVYXLczVPcHZ8BMoCxWLiVLjdr+PxSQDMMgLW4+3X7087/98k3I9BYj6gk8SINXzituxYpY
+e86m5Zw8D3Ei9dGB7whazyRvuAVEQbOeJDthDnrINfopXHbo9H4MLbkydpro/BFnKCpjt/hJMNvy
+wtZks+5EzDl7i7dIbpdg7XPsurwh2SbX/Zfvlo/eiB9vLdd0U2nWVAvUoJdqizDN6KDhCmWJFZf/
+WGJF8pxiSOMUKAdWinGitX+teUxR/Npds/Uv7gPRh76OfZQGQtPJZQ8UfPYMz/z1mNlhzDaS998o
+OLlpnDeCkr1I0zSW5MLnALm8ZHXZvTbI3zFbY2QrMX5sYq9PhubrW0wmcC2Z/niK9DD3DJcD/Hmg
+y2JFHYLqrIRAR4CM8mza7GOkCdM3DwCifsAARJVhqtUIXeS53/pzRbWWgiQXUHO/kmx7fFxlFWVc
+Pl9j2a7R63ezi8aOW92WbL0wdYgGHreZXJ9uX/7J1//jy1cHRmHFbeqF9C+OacYk8fol2R/jMVaU
+ODECx5PUBVN8Eu/1B7nkIajkceMZIFYH4vqgx4U9JtwCYQEwVSp2P6zjtjWuJOmj7Hd/zrfXfVzf
+bwuUGFP6l7N9PQdIDz9i/Mhy5TMVnNDKftYbGJp6C3lGNaowuQd7psNmXWAddQe5uoewoo72I2gB
+I2Bd8jhRgN8T2oNrngCREIisFxNbb6WZLQQhAPAggHOaLBfcBYMlghPfn6qaPGNV3y92QNIGIIPL
+Jk/waxBMsY+T8Lj6bB1Urs2O9RZAHCW6n5itdI5FT6E77DJWLAl8oKNBnksBeYYObXLqDtKsQOyp
+mQhEknq6OS0AYQRg8fg2gHLnVvTicnAiMAMo9QJWFweArBQbjQMg0ZDJdahyrcyX5BrdNUG3/FXl
+ul47TswSneV6KtExnUPsrLg+1mKpd8qKehVzb/WiLM8EztlYD95wEiPavmqaxWVZTpTEeMJeAkIH
+YAEAWm5SNqiL65Y7oXQjLhMwZXiEhgnF6FkAWT0utWNdYP4hyDqEypCEDFRLSPcUk2vux7WWMJJS
+T8SXf3wlQNabxImhZ+ACiR5Z0ZpdbWgpx+z5JayII/Vm8uwWeJQgqqUEIKoem6yDJCMTQunTJLQK
+vSnT1SjZ1bV23c7yk4Ex7WJRUEaWlHJC9dhVWBMvNgoXctmTa5y3LbNjCey4bPvFi4DxnDxPJLrs
+SXQ2LilQLuyospzfJax4AOBuynONk6EYwFOMWCkG+JbnhFEQNYJQHLEBzZmvoqHx38VZA3OSALOi
+iw3JaUtwm9vBAkyKIUtqGk7xY5Zr8ja+S9iRrsGO9Rby/CAXnYxLlugS+1cpDwklPs+KvcNmIs+u
+0oR5xADE6nYSgWjJewsvHYTFCyg6uMzuVrIMrlpAgNuRm4/OmA5KKDZpLA5U6VdhACSllFWSMZVr
+2xS6j2bsqCQCgf8XzwrGc/KcpJpyLncm0WVHotW4hKnqfKehc0Ha+zdYsUxYkaGjO0w7RtGsBGkm
+BGIcuug5lwhCBV4hijnF4J2hNO117zIFJQJSdvmAzl+xlEwN5gwJKkhMmN7x47TFjg074qJUlz/6
+j09jx3ptVoyNpBwenrnosifRO8aFSgARPYIVvXED5Lm/dnDNiRG9Lt6T1wTDaR2EBQBmDZOeL/S7
+SQTZ1WHABFBa72b1eLJkQNYNQPoX9e87pswuZUcK6ud/fvFH/+G/f3FzMF7KiudSOluJ7g2JDsYl
+S3QCdhxkr5f9NisWYMUkz9bdDXkeiREjEHv1RdjrQLFpAQfZ1OVTib3BId/Xx1m2c1uOzRkHYEkB
+ZEFAepOEG2b4HkGugR3LFjuSsyNMlFpwpt40Dmjd4MvnYMbLJRpSOlXnrUkDQCaJ7qmL3pNodHZk
+VQPHsLrwLVbEE+BJOE6XvxdnsGG8Got1ECAbwlwpHYCQNKwCzPFeUmbcQVlGlsSJDYAArMgCE9qH
+Xhz7noOZQXYsPiacgUUZFKqm41nhHD6WHeu1Y8XcC6Dym+NFaCSF6AsT4FQulOgwNzzFAxZa2AZW
+RF/EhUKuRVqOPN/oJfMMxAr1cRpBCGQIUWa6QyyXgMlEFN9few0RkDjkW/OL2tUccknIjnAcAjvm
+yAKluiQjM0r1o81MvSYrxom3eABe3eycoiG2bEEQStly0e2MRFOoWce3ok1WDB1fOVySfnUOQEQ0
+kElsBGDF3KNJPEEvYgRmpRIaIQqGFAJILg56wv6QPBnahB3zcUB2pB2pXv5qKTWX3+MPH8GO9Zqs
+uDMKLuCAUn5R5VnjxTKLFzdcNDZiZYluWGT1bcIlPLAiRlUmz74fCICKK3EYi3nHN5iCHuP1Ko7f
+Kf0tVZ4KMzXDbtn7Fw9jwoWBK3RVkwcKF5F+X2Q2i9kDI5BNZjWT6jJx1SlO++IWzHi5RJ9JdufL
+LuQXZ/Ei/EwzNsRKAJdBoqWpNvRVIusROOhzrFhAntE1hyEQAMTAhApCz5QUqM5gqkdAlEFJFFhS
+PgfnKgd2tTaTwI60yY5xdS+8GDVdNpNqjnEjnI+wfuIf/vuHsWO9ZqyYoXnOvCRAAkvatw8EaPEe
+l5IT3VMXXc5INLJiSf2w4DZLShRrpYJDfhGNRCGQ4VQiLJjmKSVKOuH2FYYWFGA3/Tz2+YkKp/Ud
+AjvCgkrorDFzNpPqQ9mQ6jEBnhYfsX++uCYzPhiM6KTRvEACPJgXnpiX5k38makCptokKuBUy96X
+6JIcEp4T4xZjxbDwUbqQCFJzVs4DY1MQnBVq0Pq7ga9gR46VE2GIw/DZJtc21QGyYxLVIAtlV6on
+rjqc6pZOEZeM7FL+8QNix3ptVtxY3gSd9FnzUvJ6ARYM8uTJMSbFeHG8WCZlRh4luhLTFiuO8hwv
+xoq5PckJkveQWXdOhZGGBCisNZqXCn1briyDXIfyprMjj1LNPIZ900CfevPEyAvDMQ1givH8T67B
+jE+R6M0PunTQTTYvIt/hQs/5RT2oTD4dcY4X03kJxBgHsxScvN6dxGTCeAizpJaNA780BSR/Awvq
+3dgSS8/4enjf9HmhQyrtJyZGB6nO37+EzqcYNzLFbTmm26BqwaN/4CfK9FNjxVwG3GLOfHkdLtlR
+itl/NS/Z5By2aBMVKyz9FyUaX9xPAIeFK9FMoDwD00Rg1eIxIJQB0S1X6UcbABn7RMAIcVyyoXjs
+GMzt6H8HV711bg7FJ50K041zqoKRr8udbz/8d5dJdX0OVhwM9SStwzQ66DJz0iVNSxzzX/2IcHwP
+njjxMsSL+HmMtcdRonMnkT4fSogjwxGOnQGH7E2xI6MiU9VKMzZWcxukmkPsy7QVq5Qxbix5GZFq
+smTHgaC3MZyX2Zra9UKprldH2oXPhZr0ADzeBiVvvPFkET+a1K6nudBhKrHJ1McTiSZYhgOzWoFj
+E8BwwJV2bcM4l7B97ugollecACiyc57qZx6fzI8HmhjKD2zGhryNASqXaXW9hXHZe46I9l5HtGWG
+UkGm0WzN5ov3KZqXMhrOsL95jV+CWRxzxQIrwjQCsg/2I+vu9gR4GYCYF03CihL0ONHmPu44lGxi
+LjmnPLEwLQEbJx9AcP2Tf/vffvIYZvz4Vgz5oG1pTNmEg/AIqt9x4Yi8QZ45VXpiFYJjjdZtT8SE
+JOFtXqDaR6DWip1lMZ3g/UKhIz1+7mSfYiVlVuR7+OwNW8e17RBC/Pzyk8d+xm3ASI8GLj31oJ0D
+5v4H8ETiefpKmixtEBPXmDAknM45ueJzFxINyTFK+/tgBaOrAeVRM5VcHYxv9sb8qAPNl5wJGnwS
+pRwNhbD3gguFHwuA9D3pGZcY+OEZqa5XTOncb/fbudvlYLxRSue9vl1ELLzxJ6xacI72rqKDr/x2
+dZnmF/5C7bGqfLleTare8X2HFVF9pjD3srbqAFvyhH3dlmFyMt5ELE0O/U7dIy/Mztc9rudg8P0d
+qa7Xlmh+DENc8LZ0BTDODjwP+zJb+IKMwdC9BjvDY9Xd1lnpn92nlVvmlWv2XL8v0861vmqGLkLJ
+9nsGOw82Cvdr8gXDGgm8c+z3gHkpGGnz8+3240uY8dklmvcAyfHYEHNqvLjSPuDyz8zhU5WlYhmM
+Q1rH5tEucT3oMNeirhyg82QveBRQrj9ZgFh0hQEAIUwEys6ezCm9U+D4UHE2jpQNM9UTXUXEhkoX
+8x7Z8LPINF/4XGYQjqwXnp3lsHTjmi/jAJJtIuYL1GkkOQ7hncioLe9H8Bo83wosnxkWGFJYUn+f
+bTd8Zr440n7oZ+YvsPdlJ8eDt84pTd5MzwPTdi6YL6zBPDsYZccT63mUwyFzNpPTMZhq6dJc188D
+xkIJc90cz9bGGWHelHQCWWVfGMjWUHFCYlmYhfvaLIwybWuuNFuBIL8WV9QoToQ03S+GA8WR1Deh
+x8C1oAS+pDBIU4MAt6XzwhsSz+ej2ZvnGXmDmSYO0kE1Y8S28wUbHHjd9pjpd4v+uOBit3olM0/g
+L1JqbUmcgjJkR2Q3xan93laZLnoXENo/8XXIiuEHyvL6WF9VlYKEs03JnL4nz2kz2/sjHOtwvMmO
+dUBh2yEmBfHv/+Vvf/xcYOS9xMMegx7PBcccrk4xotFUMMdO71zKCwRBhYPTtcaHEP11adTV7VG2
+QVIVhK2xs1hYMXKlGQMhw81BWYBaPdhcT3pjZlyIUtdgkx0wZ650G9jRh1ShY2caQ5ehpKid3jya
+JU5UQxiDjY4Oz+82GG+V7KYnpAaYxi/FskZaVhmaqG4FM8Lh9wk5LsF81NuJBxGwMYSHiR1tocgB
+kE55JtEN7iDVJVBoBCInVsT9QHVAiXbXw2aD1LzMjgUGq2VdCph5drynIjNrXqHLEyf12k46FsrZ
+5K2h8/OrjinFy30MC08EfgR0nYQClLZL2TiehEnhMnf1jlKtEjhnx+A2BkCuYFM2bEGLiy9TBSxp
+W0QgluJYzazYvyPJoqpBosd4kbdD5Vn2tKXjp5vUrfRPOne1pNW+ni3pDV+tcYzpLL6ZmQf4HpU5
+RD5g2NRRc3bULR/oZGIKz0wMJ6mGtdAKrs0MqAJ2JCM/OgdIwZssaaF5Rb93UGFsuQNE/TyIFTkA
+GzI9trZvgZVXVaLBoQ9XKpqXmVmMTholPuTsqbPrbn7zNmCM5S0+7uwEHoDktNgcta9jghbSXts8
+BQcHv/RVdeBiQKDxqEqDVKtMNp6zI9uiPZj/2wZk4wjKnZt9/i4QIY2j+zFjxWX/s+xmiR6Ph3OF
+HT+C5YN1qUJ00pipD+TQE27+NjvJ+bKsNX5l60xjeiDugK55U/vSPfpQFfQ1GUawfJnDxFEfdMUe
+EicnM6qOn7HKgzyv4637CBGW5CZp2o6QFmRFIZajpydg7d5n277JFzN27iPBNG3KsgAmi/nxFTxh
+7Zp8DQc3jqSUgIjyjBcIhoXIihFmNEi0MhkxxKISL6KTzuaFo5PmmZNuwniqXMTgwG/JjDy3Lww7
+xudKUke8Wilfeng1jnEjp7hxJtU5ibyeVJTqltmxJHb0eK0pcwdWIzAqrvpNDcwo0SbV/XWucg3e
+JwFRV0eF0MFqQdxZMbrx9XuR7FuSaB4Lh4zHby9eZJ7Ei3pRAO6PF+DnJnlGngwPRBNTNkwMb5iY
+vbgRgjq7ojvzbUg1LG+mS5n5mmbEuBAfOGBHZDIQe4DUONFB6WuPN/EsjUNCxlNEITdJmA0PQCw9
+TRlCpMYlJigLMwZy8n19rWlw0VOJ5rBh4XhCNuPFLfOynLrv/8XffP48YJykm2YmJhiJMaeo2nAu
+bmTPnaVV6yHFM3XVM3Zc2KPFLhsuIV2oIJsCElJDnEHZ+t/BSeNLludHEBa0UGUEYgmmhQusP63H
+ZYcVp+0UmNLhkMM1HDY4hpzOYXMr7xMvjKWgz28aM07ix8XE2NjiHDcWCjXLHjcuX5RWGVinz7BZ
+wNaDQ9TI40bNU4NU0yIH73qkRkfyhG3R1SThs9eT2Sf5XOhGV0uQ5e1PZ3AZKbXQTl32ZVkXc+EB
+8vhR52dY1nuUSfqImXAOgZ4XkFkcaFbjGKsfmo4hXZgSVlB11gtEb0Ac5blZrMgTVkTpd+MlIRPZ
+yuh8TBLdUqK1TSS6scWLfC5evAkYO2S6ZZuZmNa/jM46Zovf2sqjp0eOMqC/6nKiUH+TvLdJNWmB
+eJ2hRNiEXDWWeR7rylEnQK0THimGrJLdP0K8Dhd/I0HcCZCnXxIglwH0AgQEZD9ZfcFzMyG62/1a
+o3NVJjsSDbIGjccmDTQsCsS+tq/AzGJhcuAmZUFWhPypgjWwopIqoUSnymKSaIsXCXLPW91a727E
+iAE6gh9a40Zim3cH48bSz7C3O0geS07eymAHD9FXYOlSujNXTcCUIzuKye2zcelMO+t11E5oq4Ls
+RTeXyWpWwC0Es8eQvH6x9RQ1OV190of+/VsZJwCYVKwCADmz1/K+zTQ4SDMC0S705kBs8jdWqD03
+O2FFOKXHDRetYQP2vGWJbtlHSGn1WcC42Ta2gIZ9wVSCki/jdDrrid2W6iJSXeX1+ryn0YR1rXDt
+7MgMa0crLKXtWiY4Mrk2/YMPUNbaAGSprYuChJO6K74EL6Q6adqRFAFYAISySLQwJHo3ACKkZri5
+JRrlGXqXgBUb45rUoYMoHJLQG3CBRJMzLO+Urm8IRlDYJW48TOLGxV1TpSDV1MXgnFR3PSYTDlNU
+SfUZ2yE7rgeI1oNn0t0D+0IOHwlHSZaVWd5J4sc+4U7PPrb+0tP76Iw1ZnA6G5KLmSyXy1t1e940
+gA5CzkWF3lfhOW1sNZM4UUua7IuZI0B7nAELoiuA5qwYKDonunlPojVexJo6T1oc390IiBA3UkGp
+xrhxT6qXU7wYkI/sciSU6vXAvrOQbp8dSdhRlGqZ1gZFu5OfAqnDeqXUtk5PPAHk8iFVzQmvjGpz
+3zpgBI79K7UOUMu+8WZfEkOzroMQsgTKhlAKgQoJALFxKMBY3JhryJJqWim+eXFnmxXFqZMYG47t
+Y2JWuHxX1BB6r/qWRN8OjB5jWAgJUm1x45ZUazXmxI58cM9iplpLKh6HzdnxBGZ6J59xrGvI1yeF
+MgCudLHGhbzGtB0xtZwDZD/ksp7eAvQ+IxhPQemT5lg9eTJvpARag2FIIMTmXc9xS2VpB4gtyr9p
+e0u9mo3swW1WLHBxlFASD+76KOybXTRPUnk3lektqW5iGISNplJtGZhkZEiMjPLaIrfb7Lhqtbpj
+PSDlox4UrQBUuUZAhvhxAkhefQxrPxvbfOTin4i097GDMnRdlO1xPzQZMDUBobMhyHJRb7ILRA5A
+LCDPy4uX4/BtKqKAg95mxY3cIhoXSi6a+3XzrDHjplQfRcOqTrHItvYfSnXRnCNZRpLKJexIsma1
+lgWrALaAXFcBoLrrjnaLH6eAXPOHSzlvLT0LS/Y85JpHZPHOBN2XOE8YpJy2DR/UlYfONhwy2DIb
+WtZnDkQsn6B77t/HenXVqDfsM8B2yMiKpXAcDrHumuUWU6I7Fm+e103vSLXlAqkH4h0hNkO5nNnT
+z6NOoq5mGNlRfh/YUaoXYndXudYJWI92EXQDE9x1ka6WDUCKcy4FZVun3mIAZdHsJwATZxw9k4EY
+AQhtD01DGqs1eh4x9sYGIHIatajumSVObGT5mZ7g9pyk9Qmpg4ZYka17h/255sZFnDTEtH3UhXXO
+P59Mo6OYuOoLjEyhHXbU6QqbTVHTH9O8o6aHPA4nlxSCofMkiXEtywggucQYknWhV0bZ7knIAEqf
+g9yByTRMGLlVgcEqvYk8jyDUenoDZiwAxOY9aG6hFSw+PNbixWxaoNQa84qzWDGxIqRzzhqX54oZ
+V6nurV9k2SsRuaXcZEamsaRHbOZBY8c1zTNjx4PWSSXvWHreca2AuFx3fjLD0hdtW/LZ9JFUaDRQ
+nQGyFQc9aesMgWwrySIo9brBcaWSMOLzF3DoKnZjN4JQCtexZbEoW2VpBiBqGsfiRB/xAGFPkOfG
+3m/cpg56YMWCrIhglnDtPz0rGEMnHQmI5LfGHTRN3DP2ONZckRGW22PHIorAvji9yXURxV7k+mC5
+70VqaP27QfyogFy3qmvjghmV5UXV1MdZMoNyOcverekFeNH7fWaME0wzqyy3CQgnbIjpG5KYkEoC
+ohiWYwLiEQ0TgzyzJ8TLpoMeYsWQzmlQFVqO9P/8l3/8/GDcMzI5zbPDjil27GZD3bA2UIAzDXKt
+ZWyNHzV91CQ3XieAlLMLrrtYKVpYUoJCkogSQNmg31y6b60/m/aOVWLDBs29haxnMYPQO2n6lt4a
+54iZAVHZs0mcqADkLM8FUkAu55zyivzdRqw4YcXnl+lsZDR9k42Mpnl22DE4a2VLUjcNZoYmcr2a
+myV+FEY7aiO2AJInDEnaRdEMcCRVIyZfeaB/g57pMabUcuc6YXeDgbHlsomWrLghwJ6Mx4HWtjjQ
+v4D5wGT5FhBZh4cIEJsDPcgz46hrHpqctdoyOOgZK7aXAiMUECQbQ6uReSdkiWmePXYsHt8tlRe3
+O9pzL4zFUa5D/IiGZgHkgboMk0R8pIBcttMVqtRKy2qRyJIq3TakQcqLVmdpjJ4lSjQuG9by/DQc
+2zy5xNIb5gK1421DlrW6on2Pm0BE4wFAbNGlZHnu9A/VFk9obrNi27gknweMF6R5Mju2xI7aZ6hV
+mS25RnetrToaP3Yjw+sKVdJwsLpilewiDHkkcViYGFfZFlleQ8oCoBTXTDDWVdiNp2hsvJvfSQOc
+YtNwGUFYOCIFE9pH8nRMAWnWYQ0kzpsgCahx4qzSkuW5GSuylf9Im3/NlXslhl+SGcc0z8iOJbFj
+Ffn0c0Emz0cCfI9yvbpradsi+NBVpskrKjq+ZQVYFY49eofP2g3RqrdmAkuWGSg1Y2TAjICiB8wB
+yDw03HKo5WQQIhsWLcXBmIcjJLVbZkRtZBCZliEi1r3uceJZeR4mGbC8onyV40IoG8dBhx1880xS
+Ha4MGx8s8Q606nmhAAqjpOkDxvQBw/AXDjN4WWe0xPLQcawHaN32qAOhdNtiDc79ud6IALk7KTQ2
+LM75bGIwvkUHVenQBG4F5nSCuz7XbJYyfa2O7y+WF7Sj0vT7y+epLLe+30cdL1O8FbfJd0pAZASi
+Hi/GmvaGPB/le5Myq0/HwWGGQWDFxjujA//fn/3Tb56LHRm6cI4+Gq50gNl4CdaB5hyrAZZIO2oh
+HwZItYcD0jpS0mvXE3h0hHe56yd3CkpuzBmYzWYZ43A/Tu55G3/bAYBTEDZt2IEhgyE+RIlVs9IB
+tAnENPkUe6WFTfaPBZs2UtmPTJ6NFSU6+asXlemU5jHd1dYquVpOpsKqMmZmYEWWQa4PXpoO8aOv
+Ort2hbP2YzSQbO4xpAyD6C1qpTd0F2lBNDtPlsE/HdDa8429Edhzh7CWo3vqUJzen1GBJm2NOPaZ
+osL4uBjJk4ExKQ1mQGnQQZ5dM02A2M4AkTfk2cdphmqNKeJRLtD/9dM/eXkworNua/OsdsJaVeZk
+Hnr2Rs1M64lm0jJhEastdbcOSC/WUIHm2RkgiTyGFPsR0j7sJWRt95E4rMeSR5YCorJHXZuADbDk
+Pl8Hx8Q+CF+5qAyDUHgCTii34SB5jQnX30kvFo3pOMz3ZDnE4nGhpm90IgDMOc6AyNBHIfJsVRee
+yHMyLcqKu5mt5wcjXOEybnCtylRhv2BmNP3VewbNXSMgtZx3MMWlXUBqMmh5fTWq6duosWEZNags
+WX3ShtIAlLXvb9/P2kuWFJeCG4YYEK4wmbYbQpoyzKFkLLgA8BANi436LjM2FBWqODgbgLgnzThF
+pAJR48SSgJhyiirPfLzAvOG46W+emR2zmbHg9hibMU1CsPCO8SMaGpjObjeG1PCqgPOxONLGMWv6
+gyF+6xsfodpwtNnDfLaII5oS7ZLBO8aIs+fltZKsZpmzZ20UOkJMeLRjZ1Myg3mSllKID3FYqm97
+ARCTYclxYnTPc3nOs+9ugvG5TEy46rfNDB97rZMRcIzBcZwuQV5T8vyKm4DM8y22gqP0o9vWdqsM
+yiMAk8GMmAsXRIdpTPr2w71xnO6EBdxH2enw3vp5ZQOEiQ39SubgaJnjvJJngMhHeB3Gidi6hkDt
+FxMc4/4dfvFqZHrbzLhcs8t1kfixj0uWtq2qsSZpRlyGmUpF5mBD6qhsSba5XhnWUAvGkWJopHWh
+6ryM2s8oY15IRi/2/KR2rpMVIo4gyxWuxEZjhbqm2BAvWp3KmECWObhsxvyfzdNT0vj8HB8Sx9nF
+HgJEHPIwiRO5QU7RZlU5Pfe/f/anf/XqwJjNTIVYUkyrDqoL8WMjbWYoTwJk8/kdpOlQCzqFjCVL
+72Vch0b0NcQHUFYPAAMwi04/rOAcfHK84cRIDcxLS5nwGQBj5KKBtg3KZxyDbcyJE2Q9EYipyhLi
+xDD5wAP7GRep/vg55do6pU54O0hl5tDPIc3SPcyjoTkDyII9kNoTWW3AEeuIZtKrewF/tY6O/mZ1
+NTWRKVlxmICpjRbqbJeHjg++UCM7lgkAG3SOKxNWNhb1uE0bPADMGqJYZRLTNxDuXAJEmDJqM048
+wkpglxiYZ40bs5nxYRpj/Pgtc+yTY2hrwoHBPI0hw8xhZh5aiiMtJiswUZPFkriUxrpzTao/uHwG
+xpbLe31nJqXgfSi/NL/Ddv31R6zmlBKW7SCdCq+FiWsVWOyJ9/69jjgpqXbfNDdReeT+5UD0DNXy
+ud/yECcqEH/xYp3ej+gI7zlFiR/XK/30+LH3TvQuHOtg9wFWZxiyaB5ShgGsrImd30VZUphThmiK
+RNsS3rA0hzdte1zpEzYF1nfmLNPunbKzVAWXSWrIk8mV40QOxZw6XJQ5UR6Wg3MJL9DLiOmbS4Co
+TkgNyxGA2NjXzfo/P/vRg8H4rFINTRRD/LjmxeaGRlwc9arKBiAXZTpKzOh5yF4oIYn9tClCppK1
+WJJseuIISiJw3hqTijmofU4bk2lKAD0HvqEiY9OplCDBaW5yjAkHEDLM9JZrzEmWw/DVI4PUbwCx
+QUpkYlhKg4z/JatdDPMzvoRUp3SPVjxwMoX1ajv2+rXN7WKphC3J7le7vK6sncglrPxT2BbdYV9I
+khnmQuwdLowpFpXbo14TUf4sR1lc0lPjxO593VaH7rW4KELByR2PIMWYUsIaOsdQAocf4NQo62/L
+8fnOgcjQKrTFiAWA2I8zh0kwSh/mu/79i4camBeXa51gpA8TdUOTHXYRNmQ1wzOGLDotYm8Nk8Es
+i7EpKNvkDlmmbiRcw4g4MOUpbCjrqNTOhhPGhAuMoLXxIaQYp6xL5UCfcCl2Tjdkwjh3Y2gv071M
+suxhgaoFYHEmzZSACM7Z4kS90P/vv/7TR4Px2aV6iB/lJ10GyKKDmfuwU88lynAqnSx3kW2b1PMQ
+Flroj3uj7hyUVU/4DjBVp48PGWuQ48UyXVFtE4CE09MlEML74WyyPhmUsGEsFMa5yqxTqYQYcReI
+7K+5SG03hwf9zk9/+bcvxZB9CjnSAfa6iNo65rrKMgHLcILDOottH6hVYBWBSvbY+rP1hl6ypd0E
+ZVWGu+pjsomkGyGGIUn12J/SbNtfV2TWMUOu7o8OQqMLjvcQQhcfTQYd3b6eCwKwjBMzldTdg7Gh
+JruP0EuKde211G7gdiCimZkBsWUgCm5PrPgHl5z3PZl+OXaMhsYc9jE5bGDIUn2mRDpCVcdYjXRI
+rOqxs+Say4TZwzRelZkovG7pC2ZY97RmwrVjR1lT5T6v+jwN1HcCfGMjm67P68HYpMow0r5FVOMg
+LtbxKgXY0GTDSrA+TzkzY/iRXfMaI9IOEJkvl4XNCeZfysikRlwvM6UcZDI1nofE0lQyNunwmLmR
+nKSvGhBzcet/R2cH1nWicZkCafBA4+Pbx6aJeXNt2oZTE8XaUBwNDTOsW63b29hnMGK2SoKnbNyk
+YMmfJ47Zm2enQCxngMgPaMB5VQbmIQypMaQy5BJLvZP5ntDYYBzZJiypo7aOOkWfTl8SpxG3FA2y
+ZcV4LrFmqjCZydl0MXn93o1NeNLjmFmQmIeqjXe8e8w4Y8MCF5JuZMNNl4yEvPdxK0aMQHwQqZ0D
+44tJ9aWAxLwhr3FlScamuGzLHN467zuvK1xpAlu3HUEJwzgI51dsxecRn4EzBYoXydVsbfYt8BGu
+UlXiIrJoWvZASMmkZFmeOWYxJjp/0iYQH9qWeDagfkkjs2VqJBFtxYzVsIirGIxN38qad6swGBoV
+VoMjH0TFl3irkMSubnas6tJ0KTh15ZPJnR6z2M5sAfi4tqIk2S0o9gS5d8mEZdgCXaJBsUXjrc8x
+rq89AaI17lr6ZgTiwoo/eMh3vkSmX5wdM0Oy9D6QTKKjB/EQZZvf2UD8yJIVWFLSkDbHdB+/UAJT
+FlsQUIDZZ7/LjOldEekiku5nuvjC43GxGGA2nLonp4EMgCUxYeLOIMlbbJhlmRIQOaZvSlqa+pvH
+EE55K+yIDKlhWi0+Fec63Z4+dwFL6jQlmgZyDiylevsZsJ6PrsqMWSJr2rGtqSC9tw4MlbiaVEvX
+IqVVqHYBaKkB9q75iSTjOoV7bLgRH4YJJDga4B889NxeamBeBTsGhgyVmlJyHFlhxOEWSxaySTZX
+lq2xjwFjSsvAKTADY2KeEyondeJmeGOOxgnzDXKNy2VgUpxg7WmfXyrFhBsg5B02PBMf4vrVPMFL
+uQkzvjZ2hFw0CVOG5LjEhqts88iSFu+VtNxuYMqUNA9s6bGlvQswoh3USvPjvAXG2UNtYmgoTXtS
+EgALxpNJjjMIcdYyTdnA4u4yqWjk3VYmC8Y/kRUfmtp5New4qWWvQ1plahGNbYiAJTEFVMkXLoSp
+SSJT6nxmE7bsJ9vqzjwRYOpJ8YfXpMf40aZNCStiK/h0wqYEUl9c8zwIe/OJbAC5Q1ixi2Aa5H0g
+licM7KOHbHxix49fGyChGKwsGeJIZcmaYkmN+w5CqJkplRlmbImxYENWncWEj6kFbkAYVgww9gtS
+PmFBGBq8C0KMDducDTfjw2uw4oOzDi9dlTlbrSnWnSLphj47T7NldkPlZg3Qv5VRdtaUGpbYZZ02
+rld+Su7GxmUwOL/ShimSzQkU7zgEVO+4bSyk+PvrtnlfZK7u3tFdQreZtqOZOfmWveULKykcGmIJ
+x7cwj475aqy4ZkMe+oK/86N/tvz4g/KKbzyJBtlbwYoZHAi3GlBsvkpx8cmGj0HjKkUio0vkh8v2
+1GSTjlwe1hgsNm1dlmRjQU0tNen4kTHpJuM2nDUsJUzIsGfZUIH4VLKix7zotcr1lrlRw4LSfZBZ
+fA4gyVUk+EBFp3aOwCTPKVICImFBMD7+NMYf42Rf/gwk2FaS5eGiMRCWMpgTcMlRksv52PBq8vyU
+4sCrletsblRyZtJ9hK5qjY+SfJuEH2HMMekCA1mQZSA+zip29M7rcsQGip07bp/eh9sovybBFGR4
+dcarFH/L3tSA5gRmRJtKcsOo4zJz++TbUxolvnnt7Ig5SV36SsuJ6rq1LY0wQwJL8/ZWs/7aKqtn
+E6yuVqN3GNaT1smBrE/rwh3H1jPO6g3yy4kBWxiDEkyJyUI2J9kllwvZ8Fry/CSZfktyPZNu+d0c
+MMX0TZEKjUl4STKOecSKgeae3NBDr6J4myW/m893OAWgSnGBSaCuCMKryfOTZPotyfVMuhmlCuQb
+3XeavDPI+HcTOde7yrpOZuq9jQ+4F5Pb4u/ln5HlF/ZnkOGW3DHKsT4HvaMPzYde9fxfo5/xm7fE
+jqF1IMl3MaaU3kWOc8OjWz54Ij0Qn8p6SdnyKRPQ9jzzM4JskwYKdMPp74JJ+ThR/OOZ8BbyfBWZ
+fqtyvZc0L+DAccnhLOUo4bqtNmDwhQdalom5aFw1TmOCygxSHCRYR9DkDh9+IgJvBcSrgfF9ACSC
+Eg9MBCYetJH0DiMYQwtPpfOHu40Lg4dZJY5TGNGQgxwAeB0Q3gyIVwXj+wLIS4GZDx6dV2UD697t
+eBYuoQ8nLJZ+QwDexLBc1cC8dUNzLrZkvClrxRln06yzBAU9vxfLbarR4DLe1YDIAiOTe3PzUZIJ
+8dzgZL+veLvp+b3FgKxv3hd2nJoeyBMx5O62h77M5OfsSr9TqWbm+fPMvBVrXvO83pps6BZv+j7J
+9YMOIo06/NRy4Cw/9QzAe3Yg3gyMHyIgLz7AtBM4Jvbl1/EVvnmu8Itu+eZ3QL752zfP6QPo1h9w
+B+QdiK8GjHdA3oH4qsAIgCx3UN6B+OJgvLPk6wfh8s9L5orpJT70Dsg7G74aMN4BeQfiqwLjPY68
+A/FVgfHOkh9ufPhqwXgH5IfLhq8SjHfZ/jDZ8NWC8Q7KD48NXz0Y79L94bDhmwHjnSU/DBC+GTDe
+Qfn+g/DNgfEOyvcXhG8WjHdQvn8gfPNgnIDyQwGmAe99GgD3XoDxAwLmN+8jAN9bML6HwHxvWfCD
+AuMbBWYA3IcAwA8OjDvAfEmADkD70MD3wYPxAQB9Klh3gfWhA+8OxtuB9Q62++1+e59u/1+AAQDL
+35glpO9LmwAAAABJRU5ErkJggg==" transform="matrix(0.24 0 0 0.24 15.3145 17.2417)">
+ </image>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="31.5752" y1="39.6914" x2="26.3417" y2="49.0839">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M32.792,44.485c-0.88-0.377-2.303-1.005-2.93-1.8c-0.461-0.545-0.419-0.545-1.131-0.796
+ c-0.587-0.167-0.963-0.502-1.633-0.585c-0.502-0.043-2.51-0.545-2.386,0.167l-0.042-0.167c-0.25,0.795-0.628,1.464-1.046,2.218
+ c-0.294,0.544-0.209,0.712-0.042,1.298c0.293,1.088,0.419,1.172,1.298,1.632c2.511,1.381-0.292,5.4,1.801,6.571
+ c0.333,0.21,0.752,0.336,1.087,0.461c0.419-0.586,0.628-0.963,1.214-1.339c0.377-0.21,0.629-0.293,0.88-0.671
+ c0.333-0.417,0.209-0.837,0.418-1.255c0.293-0.586,1.088-0.42,1.549-0.838c0.586-0.544,0.627-1.256,0.879-1.883
+ c0.293-0.67,1.172-1.004,1.423-1.634C34.425,45.029,33.419,44.736,32.792,44.485z"/>
+ <path fill="#FFFFFF" d="M40.912,28.37c0,0.418-0.503,0.67-0.293,1.047c0.419-0.503,0.712-0.754,1.382-0.837
+ c-0.168-0.502-0.712-0.837-0.837-1.339c-0.126-0.377,0-0.88-0.545-0.754l0.125,0.125c-0.627-0.125-0.335,0.671-0.21,0.963
+ C40.619,27.784,40.912,28.202,40.912,28.37z"/>
+ <path fill="#FFFFFF" d="M39.907,27.532c0.032,0.048,0.063,0.11,0.095,0.181c0.024-0.057,0.049-0.116,0.073-0.181H39.907z"/>
+ <path fill="#FFFFFF" d="M40.002,27.713c-0.161,0.353-0.357,0.595-0.429,0.992C40.303,29.07,40.205,28.192,40.002,27.713z"/>
+ <path fill="#FFFFFF" d="M37.563,23.724l0.083-0.126c-0.167,0.042-0.46,0.042-0.669,0.084c-0.294,0.921,0.669,1.046,1.214,0.628
+ C39.112,23.598,38.15,23.263,37.563,23.724z"/>
+ <path fill="#FFFFFF" d="M39.237,35.988c-0.078-0.04-0.084-0.042-0.156-0.078c-0.003,0.011-0.053,0.036-0.053,0.036
+ c0.116,0.033,0.195,0.078,0.243,0.133c0.003-0.003,0.006-0.005,0.009-0.007L39.237,35.988z"/>
+ <path fill="#FFFFFF" d="M43.514,19.509c-0.065-0.071-0.138-0.145-0.216-0.222C43.365,19.369,43.438,19.44,43.514,19.509z"/>
+ <path fill="#FFFFFF" d="M45.6,24.645c0.006-0.03,0.011-0.06,0.017-0.09c-0.047,0.003-0.094,0.006-0.142,0.006L45.6,24.645z"/>
+ <path fill="#FFFFFF" d="M39.069,35.904c0.005,0.002,0.008,0.004,0.012,0.006C39.083,35.907,39.079,35.904,39.069,35.904z"/>
+ <path fill="#FFFFFF" d="M39.231,36.114c0.021,0,0.045,0,0.066,0c-0.006-0.013-0.017-0.024-0.026-0.036
+ C39.246,36.095,39.183,36.12,39.231,36.114z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="26.373" y1="27.4229" x2="16.9086" y2="38.422">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M23.835,41.346l0.167,0.167c0.125-0.125-0.629-0.502-0.796-0.711
+ c-0.335-0.503-0.041-0.879,0.042-1.548c-0.377,0.04-0.754,0.208-1.174,0.208c0.128-0.251,0.797-1.004,0.546-1.298
+ c-0.335-0.292-1.214,0.796-1.592,0.796c-0.209-0.712-0.418-1.926,0.127-2.512c0.335-0.376,1.13-0.628,1.591-0.46
+ c0.627,0.209,0.585,0.628,0.711,1.172c0.545-0.585,0.293-1.506,0.628-2.135c0.209-0.418,0.755-0.46,0.796-0.962l-0.085,0.084
+ c0.671-0.67,1.258-1.381,2.01-1.967c0.628-0.502,1.506-1.005,1.926-1.675c-0.544-0.083-1.048-0.042-0.587-0.711
+ c0.419-0.67,1.467-0.209,1.591-0.837c0.127-0.586-0.836-1.256-1.004-1.759c-0.168-0.417-0.335-0.962-0.42-1.423
+ c-0.208,0.21-0.334,0.502-0.543,0.712c-0.335-0.585-0.085-0.837-0.795-0.712c-0.419,0.042-0.837,0.335-0.963,0.753
+ c-0.166,0.503,0.167,1.047,0,1.55c-0.125,0.418-0.587,1.045-0.963,1.213c-0.125-0.459,0.251-0.921,0.126-1.381
+ c-0.712,0.042-0.921-0.335-1.466-0.669l0.168-0.084c-0.251,0.167-0.628-0.418-0.921-0.586c0.502-0.669,1.214-1.172,1.758-1.8
+ c0.419,0.795,1.089-1.13,1.424-1.465c0.25-0.293,1.173-0.585,1.424-0.167c0.291,0.502-0.419,1.046-0.67,1.382
+ c0.459,0,0.961,0.083,1.338,0.334c0.378-0.292,0.879-0.753,1.089-1.214c-0.335-0.208-0.629-0.418-0.879-0.712
+ c0.25-0.501,0.194-1.154-0.325-1.045c0.084-0.051,0.162-0.108,0.242-0.168c-0.964-0.293-1.298,0.335-1.09-0.837
+ c0.084-0.544,0.21-0.879,0.67-1.381l-0.125-0.042c0.251-0.251,0.46-0.586,0.628-0.879c-0.042,0-0.168,0-0.21,0
+ c0.042-0.183,0.003-0.333-0.098-0.456c-7.169,2.409-12.423,8.983-12.896,16.845c1.2-0.378,1.926,1.715,2.32,2.697
+ c-0.127-0.46-0.209-0.962-0.419-1.38c0.586,0.67,1.256,1.046,1.34,1.967c0.085,0.586-0.167,0.545,0.502,0.795
+ c0.503,0.168,1.047,0.125,1.507,0.336C21.406,39.714,22.829,41.555,23.835,41.346z"/>
+ <path fill="#FFFFFF" d="M36.559,20.793c0.083-0.167,0.754-0.292,0.964-0.335c-0.043-0.668-0.336-1.381-0.127-1.967
+ c0.101-0.301,0.337-0.69,0.607-0.974c-0.321-0.066-0.644-0.123-0.971-0.172l-0.351,0.044l0.33-0.047
+ c-0.922-0.138-1.866-0.21-2.828-0.21c-1.273,0-2.517,0.126-3.719,0.365c-0.143,0.358-0.353,0.826-0.353,0.826l0.112-0.017
+ c-0.407,0.688-1.621,0.729-1.661,1.565c0.629,0.083,1.299-0.168,1.926-0.042c0.503,0.795,0.711,1.423,0.252,2.302
+ c0.292,0.335,0.668,0.043,1.005,0.084c-0.086,0.711-0.754,1.255-0.461,2.051c0.083,0.293,0.292,0.962,0.418,1.213
+ c0.251,0.377,0.378,0.293,0.838,0.461c0.46-0.879,0.375-2.008,1.339-2.511c0.629-0.293,1.382-0.335,1.925-0.671
+ c0.377-0.25,1.047-0.752,1.047-1.255C36.852,21.212,36.433,21.128,36.559,20.793z"/>
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="43.9824" y1="31.7183" x2="48.7282" y2="46.2283">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M43.951,19.836c0.021,0.026,0.04,0.052,0.058,0.078c-0.067-0.057-0.138-0.111-0.203-0.165
+ c-0.052-0.03-0.104-0.062-0.154-0.092c0.442,0.503,0.608,0.906,0.608,1.721c-0.251-0.084-0.459-0.167-0.668-0.292
+ c-0.253,0.879-0.378,1.548,0.082,2.385c-0.123,0.409-0.482,0.938-0.383,1.39c-0.238,0.473-0.488,1.238-0.369,1.708
+ c1.004-0.837,0.92,0.042,1.59,0.586c0.208-0.376,0.376-0.795,0.628-1.171c0.125-0.168,0.377-0.042,0.419-0.419
+ c0-0.292-0.378-0.335-0.419-0.543c-0.083-0.419,0.21-2.177,0.712-2.302c-0.08,0.598-0.124,1.233-0.235,1.835
+ c0.152-0.013,0.305-0.041,0.455-0.071c0.003,0.257-0.189,0.646,0.062,0.923c0.441,0.484,1.11-0.089,1.565,0.366
+ c-0.224,0.369-0.342,0.184-0.666,0.251c-0.36,0.075-0.4,0.236-0.543,0.62c-0.158-0.378-0.533-0.796-0.807-0.243
+ c-0.194,0.394,0.052,1.048-0.344,1.332c-0.335,0.239-1.232,0.334-1.489-0.034c-0.243-0.35-0.028-0.883-0.334-1.209
+ c-0.063,0.342-0.269,0.658-0.228,1.001c0.036,0.318,0.303,0.561,0.17,0.874c-0.272,0-0.617,0.02-0.819,0.186
+ c-0.167,0.135-0.171,0.391-0.428,0.493c-0.227,0.089-0.582-0.045-0.767,0.163c-0.091,0.101-0.11,0.48-0.162,0.622
+ c-0.233,0.029-0.521,0.057-0.729,0.144c0.095,0.507,0.824,0.659,0.777,1.246c-0.028,0.359-0.169,0.348-0.504,0.295
+ c-0.361-0.058-0.765-0.082-1.122-0.154c-0.013,0.745,0.426,1.229,0.041,1.983c0.132,0.061,0.247-0.039,0.361,0.01
+ c0.088,0.037,0.162,0.147,0.218,0.169c0.228,0.09,0.404,0.137,0.67,0.092c0.28-0.048,0.396-0.13,0.547-0.342
+ c0.054-0.077-0.016-0.214,0.068-0.307c0.08-0.086,0.214-0.075,0.307-0.148c0.365-0.282,0.346-0.97,0.719-1.213
+ c0.062-0.039,0.465-0.025,0.62-0.083c0.221-0.082,0.337-0.053,0.495-0.214c0.124,0.476,0.399,0.861,0.76,1.21
+ c0.359,0.349,0.818,0.713,0.046,0.845c0.247,0.33,0.323,0.449,0.614,0.067c0.215-0.283,0.339-0.564,0.602-0.788
+ c-0.479-0.45-0.898-1.005-1.243-1.582c0.501-0.494,1.635,1.117,1.656,1.541c0.024,0.464-0.232,0.661,0.241,0.877
+ c0.641,0.293,0.413-0.452,0.436-0.917c0.384,0.212,0.77-0.176,1.125-0.046c0.182,0.065,0.213,0.283,0.334,0.411
+ c0.192,0.206,0.123,0.16,0.333,0.22c0.425,0.122,0.624,0.003,0.756,0.543c0.08,0.329,0.191,0.762,0.053,1.088
+ c-0.206,0.483-0.866,1.12-1.344,1.29c-0.493,0.176-0.941-0.228-1.384-0.413c-0.709-0.296-1.421-0.555-2.112-0.93
+ c-0.679-0.366-0.541-0.11-1.042,0.146c-0.53,0.271-1.057,0.682-1.624,0.87c-0.762,0.254-1.834,0.379-2.659,0.377
+ c0.192,0.31-0.392,0.865-0.562,1.171c-0.672,1.046-1.047,1.632-0.713,2.888c0.168,0.628,0.378,1.172,0.713,1.716
+ c0.167,0.251,0.292,0.628,0.585,0.796c0.376,0.293,0.336,0.125,0.838-0.043c0.544-0.167,1.465-0.292,2.051-0.125
+ c0.208,0.043,0.293,0.251,0.501,0.293c0.085,0.042,0.671,0.084,0.712,0.125c0,0,0,0,0.043,0c0.126,0.545-0.168,0.963-0.168,1.466
+ c-0.042,0.545,0.084,0.46,0.294,0.963c0.376,0.879,0.082,1.968-0.21,2.805c-0.336,0.963-0.084,1.631,0,2.637
+ c0.047,0.563,0.345,1.089,0.53,1.611c2.281-1.364,4.252-3.192,5.782-5.357c-0.259-0.639-0.451-1.269-0.16-1.779
+ c0.628-1.13,2.009-1.632,2.302-2.972c0.085-0.461,0.043-0.921,0.21-1.339c0.11-0.369,0.351-0.551,0.654-0.668
+ c0.304-1.347,0.465-2.748,0.465-4.187C53.165,29.205,49.472,23.157,43.951,19.836z M46.019,24.31
+ c0.023,0.025,0.037,0.056,0.045,0.089L46.019,24.31z"/>
+ </g>
+ <circle fill="none" stroke="#1996CE" stroke-width="1.5" stroke-miterlimit="10" cx="34.183" cy="36.11" r="19.373"/>
+</g>
+<g>
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="16.4316" y1="53.8184" x2="8.4317" y2="81.3183">
+ <stop offset="0" style="stop-color:#F6B93C"/>
+ <stop offset="0.0341" style="stop-color:#F6B53A"/>
+ <stop offset="0.2023" style="stop-color:#F3A633"/>
+ <stop offset="0.393" style="stop-color:#F29C2E"/>
+ <stop offset="0.6231" style="stop-color:#F1962B"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_6_)" d="M18.332,64.434l8.522,8.555V47.726L2.087,48.128l7.428,7.456
+ c-4.562,5.018-20.488,25.244,6.841,37.215C16.355,92.799,1.005,78.075,18.332,64.434z"/>
+ <g>
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="18.166" y1="53.9062" x2="-7.476" y2="104.3633">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.0261" style="stop-color:#F8D244"/>
+ <stop offset="0.083" style="stop-color:#F6C33E"/>
+ <stop offset="0.1499" style="stop-color:#F5B63A"/>
+ <stop offset="0.2322" style="stop-color:#F3AE37"/>
+ <stop offset="0.3465" style="stop-color:#F3A936"/>
+ <stop offset="0.6503" style="stop-color:#F3A735"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_7_)" d="M16.947,93.722l-3.636-2.05C6.836,88.019,2.152,82.652,1.09,77.667
+ c-1.997-9.371,5.227-18.565,8.425-22.083l-7.427-7.456l24.767-0.025v24.885l-8.522-8.554c-5.218,4.107-7.987,8.725-8.231,13.722
+ c-0.24,4.913,3.354,10.315,4.535,12.092L16.947,93.722z M6.826,50.052l4.104,4.121c0.754,0.754,0.782,1.966,0.064,2.756
+ c-2.991,3.29-9.754,11.856-7.949,20.321c0.744,3.49,3.565,7.238,7.646,10.323c-1.384-2.638-2.755-6.122-2.59-9.516
+ c0.273-5.602,3.299-10.713,8.993-15.195c0.767-0.607,1.962-0.536,2.655,0.162l5.104,5.122V50.055L6.826,50.052z"/>
+ </g>
+ <path fill="#7B5020" d="M18.661,80.746"/>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M18.332,64.434l8.522,8.555V48.103L2.087,48.128l7.428,7.456c-4.562,5.018-20.488,25.244,6.841,37.215
+ C16.355,92.799,1.005,78.075,18.332,64.434z"/>
+</g>
+</svg>
diff --git a/Sankore-3.1/resources/images/createLinkPalette/PlayAudio.svg b/Sankore-3.1/resources/images/createLinkPalette/PlayAudio.svg
new file mode 100644
index 0000000..80f21dc
--- /dev/null
+++ b/Sankore-3.1/resources/images/createLinkPalette/PlayAudio.svg
@@ -0,0 +1,409 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-10.836 -5.585 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g id="XMLID_2_">
+ <g>
+ <path fill="#FFFFFF" d="M51.119,0.75c-3.26,0-39.495,0-39.495,0v79h60c0,0,0-57.821,0-60.688c0-1.682-0.81-3.904-1.754-5.062
+ c-1.58-1.936-10.316-9.098-12.142-10.773C56.54,2.138,52.026,0.75,51.119,0.75z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="41.6235" y1="4.7002" x2="41.6235" y2="75.7998">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M50.169,4.7c-2.935,0-35.546,0-35.546,0v71.1h54c0,0,0-52.039,0-54.619
+ c0-1.514-0.729-3.514-1.578-4.555c-1.423-1.743-9.285-8.188-10.928-9.696C55.048,5.949,50.986,4.7,50.169,4.7z"/>
+ </g>
+ <radialGradient id="SVGID_2_" cx="60.3052" cy="10.2793" r="16.1285" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#D3D3D3"/>
+ <stop offset="1" style="stop-color:#FAFDFD;stop-opacity:0"/>
+ </radialGradient>
+ <path fill="url(#SVGID_2_)" d="M46.048,4.628c0,0-9.017,6.213-2.155,14.081c6.862,7.869,11.963,10.418,17.65,9.242
+ c5.687-1.177,5.529-1.826,6.314-3.395s0.932-5.307,0.353-8.13c-0.533-2.598-7.11-7.148-10.026-9.238
+ C53.884,4.106,51.559,4.562,46.048,4.628z"/>
+ <path fill="#FFFFFF" d="M54.539,16.395c1.835,0,10.509-0.217,12.083,0.438c1.573,0.655,3.984,4.525,3.984,6.492v-8.531
+ L50.804,1.287c0,0,2.41,2.174,3.067,4.797C54.527,8.706,54.539,16.395,54.539,16.395z"/>
+ <path fill="none" stroke="#A1A9AD" stroke-width="1.5" stroke-linejoin="round" stroke-miterlimit="10" d="M52.405,0.75
+ c-3.26,0-40.781,0-40.781,0v79h60c0,0,0-57.383,0-60.25c0-0.764-0.073-3.548-1.018-4.706c-1.58-1.936-11.759-10.74-13.584-12.415
+ C55.833,1.29,53.312,0.75,52.405,0.75z"/>
+</g>
+<path fill="#9FC23B" d="M36.45,21.794l-6.531,5.611h-4.78c-0.845,0-1.534,0.69-1.534,1.534v7.357c0,0.844,0.689,1.534,1.534,1.534
+ h4.288l7.023,6.034c0.447,0.385,0.814,0.217,0.814-0.375V22.169C37.264,21.578,36.897,21.41,36.45,21.794z"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="30.4341" y1="44.0723" x2="30.4341" y2="21.5889">
+ <stop offset="0" style="stop-color:#85A53D"/>
+ <stop offset="0.1032" style="stop-color:#8FB03D"/>
+ <stop offset="0.2503" style="stop-color:#98BA3C"/>
+ <stop offset="0.4552" style="stop-color:#9DC13B"/>
+ <stop offset="1" style="stop-color:#9FC23B"/>
+</linearGradient>
+<path fill="url(#SVGID_3_)" d="M36.45,21.794l-6.531,5.611h-4.78c-0.845,0-1.534,0.69-1.534,1.534v7.357
+ c0,0.844,0.689,1.534,1.534,1.534h4.288l7.023,6.034c0.447,0.385,0.814,0.217,0.814-0.375V22.169
+ C37.264,21.578,36.897,21.41,36.45,21.794z"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="46.7632" y1="32.5791" x2="55.9878" y2="32.5791">
+ <stop offset="0" style="stop-color:#85A53D"/>
+ <stop offset="0.1032" style="stop-color:#8FB03D"/>
+ <stop offset="0.2503" style="stop-color:#98BA3C"/>
+ <stop offset="0.4552" style="stop-color:#9DC13B"/>
+ <stop offset="1" style="stop-color:#9FC23B"/>
+</linearGradient>
+<path fill="url(#SVGID_4_)" d="M49.823,17.39c-0.113-0.113-0.266-0.178-0.426-0.179c-0.188-0.009-0.312,0.062-0.426,0.174
+ l-1.711,1.689c-0.236,0.233-0.238,0.614-0.006,0.851c3.305,3.347,5.126,7.779,5.126,12.479c0,4.86-1.93,9.399-5.433,12.78
+ c-0.239,0.23-0.246,0.611-0.016,0.85l1.67,1.73c0.111,0.115,0.262,0.182,0.423,0.184c0.003,0,0.007,0,0.011,0
+ c0.155,0,0.305-0.06,0.417-0.168c4.214-4.066,6.535-9.527,6.535-15.376C55.988,26.748,53.797,21.416,49.823,17.39z"/>
+<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="42.52" y1="32.5273" x2="49.8755" y2="32.5273">
+ <stop offset="0" style="stop-color:#85A53D"/>
+ <stop offset="0.1032" style="stop-color:#8FB03D"/>
+ <stop offset="0.2503" style="stop-color:#98BA3C"/>
+ <stop offset="0.4552" style="stop-color:#9DC13B"/>
+ <stop offset="1" style="stop-color:#9FC23B"/>
+</linearGradient>
+<path fill="url(#SVGID_5_)" d="M45.473,21.685c-0.112-0.114-0.266-0.178-0.425-0.179c-0.135-0.007-0.312,0.061-0.427,0.173
+ l-1.711,1.69c-0.235,0.233-0.238,0.614-0.005,0.85c2.167,2.196,3.36,5.103,3.36,8.185c0,3.188-1.265,6.165-3.562,8.383
+ c-0.114,0.11-0.18,0.263-0.184,0.421c-0.003,0.16,0.059,0.314,0.168,0.429l1.67,1.73c0.111,0.114,0.263,0.181,0.423,0.184
+ c0.004,0,0.007,0,0.011,0c0.156,0,0.305-0.061,0.418-0.169c3.008-2.903,4.666-6.801,4.666-10.978
+ C49.875,28.366,48.312,24.559,45.473,21.685z"/>
+<g>
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="22.1724" y1="88.7773" x2="22.1724" y2="45.9297">
+ <stop offset="0" style="stop-color:#788A38"/>
+ <stop offset="1" style="stop-color:#9FC23B"/>
+ </linearGradient>
+ <circle fill="url(#SVGID_6_)" cx="22.173" cy="67.354" r="21.423"/>
+ <circle fill="#8AA53C" cx="22.173" cy="67.354" r="19.281"/>
+</g>
+<image opacity="0.4" width="181" height="181" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALcAAAC3CAYAAABQbs+fAAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAPcBJREFUeNrsfVuvLdl11hh1zmOf
+P8APWA04iZ0cwwPCDkkcJ7E7bXAiEoQQUhASr0hIvCAhhATiIgFSEiAg27hN++4EhzceSWK3u08c
+4wjERlw6ROIH7LzuOVhVNS/jOmvW2mvvs885a7W3z95r1bpUra+++sY3LhPhctt1++77n3ty/OdQ
+/iai8hv7e/09AdXn4XL/8R5at6WyfVq3J8z/plSfi8s26frPHP7W1eXI77/h5RDEt++9/5YE8grI
+4310YHBuj1L5e/2dgAN/voPa61B+lArQKZ8Y6ylBlPJz0/Xx/67K43UbxOuPvP63L6C/gHsUzG8L
+MB8BpYCsbyTBHTA4VeA6QKc0AHJ+P5X/MujTyv6Yrj/6x//OBewXcK+3//L+lxSYGyuDEBv+XxV0
+m2BvrE4MxBrk8kQo2yYB7PX3JE4EyvIFAa/SvP36vOs/9yf+7tUF3K/Q7ft/8GUO6OPveNh+Fhlw
+r9JCSxOttEmdAIp9iYaZnBa9ntp7CHZff2+vmzKz0xWt2v0I9L93dQH3S3j7/f/7VQVoOmDZdcRB
+bJMBMtfYRYoYHa51twI6VaCuoJUgb9p8BbaWKqkyd70a5Oc1dl+2LRLmCPK/f3UB90tw+69/+PUC
+6ick5AYCnrTrFuBQA0cVUFZm10CPQE5CXwP5LC9Z3JEpVZYYgGeQH9n8eH+idP0TH/iHVxdwv8Cg
+9mUHqr9wE86wob3rdgLsHJD8eUkAXYCcARWIgxcyKxdWj2SK0OHsyqBOhiO4aQb6MRD92J/8R1cX
+cD94UH+DgbrIEJQARm/XcUBvC6p2gE8W7ARGW0ugW5BXkJKSGgQSvF2ZkhTA2/aS7VcGpyxZfvID
+//jqAu4HC2qsoF7AjHwXPX7G7SNAPd+EBODJCTwl0FPA5lxWeKyfFIv3ZArT4dVt6QB8lijr49fH
+32c//frjP/BPry7gfmCgloDmYMb8P8vWw9g24KYaaBqwk7QBR0FOHHic6bl2pi2ZYk+CUYCn9bFF
+ruCR0T/+g//s6gLuewf1r1dQ4/yvAbQGswb6/nCShEViAU3sMQt06ZjEICcVeDLwMs87kimnA/xm
+AfayVXksa/Ij5K9/5gf/xdUF3PcO6gjQ/D404eN63/5dl2wdg9oFumFzC3IL8KTcktSVKX6guQ3w
+wt4EWaJQ4rr8CPI0OyzXn/ihX766gPtOgP0bM7CfGlAzoFZgI3aAjMzexl28TeSJlQL4xLZJTtJm
+G+SFNZtUSVWuuDJFgFACHHhA6QFc2YTr3zcV3NVhaZLlmlJ69skP/crVBdznBfWsp58cP+1Bg7oA
+ujH0DO7JAJmMDj/tVoCJFbz8XmIJH5JZRiFRApBzp0M8NzkyxdPhIwBPLKXPAe6wd/6Z77vJ3vjx
+gStCun7jg796dQH3OdgaMQQ1IkqGziD3wYzdXS6ETzQCcXIgr8FdpEFjcw16ULUmPot7MoXZfvPe
+UuoAXMiMJjt6AOfbMoDP+nxN7adnb3zwX11dwH1LtuZA1qAWLI2OS8L/Quc+72gQQNcAJOqA3WFq
+D+SsNkQD3LJ4cmWK0NkdgLs+uMlkcg2+BpiJJ4eKbGn6fMl2JqLrNz/0r68u4D6JrRmQNaiZFOF+
+ttXVyCxvaQFuCRUn4c4kBdfV/Jak5HBAzqv9rFRJQtokkkmZswB8vh+psnLSAWbV3yz4rPr7Zmmq
+mJ+/SBWgZ29+6NeuLuDuOiEo2bpKkGkD1BrQkwC35HPO2r0sJQUJmyY7yIBdanAbNPogl4/5LJ7I
+CQJPBDjf1sqVXfKkOSpEzz71w//m6gLukK3ngHGqDN0kyNSAjhiAumyrAY0BkLmrsqGweWmqC3gy
+enoU5DqNrjOUMcBZ7chugO8IMGWCJ4PasPfii88yZU4CvfnDn7m6gFvJEKmtPbbug1q4JwLQkwAy
+8uixexgokCK200Z03bh1JQC6MnB5jPVWkqnTTiHAuRdOzLtuPriyCVP+1wDcCzAj/V3kyU1xT+rz
+23tmFv+Rz1690uDWwC7B4QrsSTggK6Nr1i0nAudqC2jhe59sCJJNxdc+yKKhHaATuSAHI0d4Gp2z
+vAomhwDefHBRezL/jikDPRn9fbo8aSyfnzMnfp79+R/5d1evJLj/2x/+hwXYRV/PYOYyJGLroqlX
+pp5YAqfo7EkwOmi9jRG4Y81ts5NOuEm8qo8UyDkzS5kiMpCkZYLW4RHAtQZP0gpkJ02ov8METwrY
+2w0uF1aHnPSBBeCfv3qlwO0DW8oQT1svLJ1ZfKqwbaBucgNlXQmis7u4A9z+71ZygAkMeRKngC0F
+LM4BbnR4B+AkKgstkGGH/ubpeQn2m9HgcgF4fs4iUf7C07euXglwe1JEy5ACYMvWmMUJY+wKak+2
+gLEIEU/Zdd2IoINFR4MrOUKKpT0WF95zchItGwBvtSOyZiTpAHNh2hPkiQgubwbYewH53OL2XACO
+9wfqb+SuGHwSArsCdArYGoUmj0HtARoH7L+NoFLrbpIaG5S2DjvZXRbnqfbM2LsBnlRxlGZvEvrY
+lyc+e9vg8maUvef3XRj80x/+wtVLB+5cd/108bGxWH3jwJ7yfUKCKD2uZYwFNII0SfYXvdrCKa65
+wToh4nHbzFvkg5QpSbonIcBlaauVKHv1tzpBiKTGdoPLYfZemyGOGvznnr59bwCf7ukcerIf2JMB
+9nzfhFN9PhQGxyk/d6onxCpgmpbnVwDER/V54z+P2klVY4JJJJm8z1XtSf5azj61E3OSAfM0iews
+sjIDfazkCc/yBfl+Yr/rf4UFS5MtTGNBP4rPWv6eZLyDfB+X+54cP8DTr7/3i4eXBtwt8zg5yZce
+sCcD7AYgHXQ6oGaA7oJ56vyw7UA9D+BR/TwAsjxAADifeA3gx0cQGcCRnbRgAY4N4KBAKfx+mNgx
+1MeafQb++FIuqU8WaPc772M+Q/59KseapPWqXKvlCv71937h8MLLktxc8BRnrY0888iBggGwlb7G
+xhD8gKNwR1DWk2D7spD1SyI7p8dbg0kO4iEywaRxT4gCqdJkSuI6vF7uQWQgl79SsrbdLv0dyZNU
+5Y8fXN7s1975MSDptqzy6QZyK9uzn//wV65eSHDnADLrbH55OgXYjd0NW6tMpU7w2O4ccAbx4Ca0
+9WAeD+geyKVGBpl8ySAaAbj2wSP9XTUu8SaHJAJJ7Z6kdLNhDfLCKq69b3hbmtDeCUTWkn2um3Li
+XR8fe/bzf+prVy+ULGkBJByktmuX+HIpJBM8opIik2LsyQSU9dIv5AZWaVM99OXnUdaHXGqg+QFs
+27Tt235MVS+37Zt8aXKF7zv/rLUGXcgvYJKGXYHY5+fxitXfW/JEteAJO1Vrb62dPe2trqJch+u4
+oF426+stGPnKu58+vDDgzgNxnuYKP6OvQQQ+MuiZmLshAjIewFVdzfRtBOoKaA5mrhkHAklQgAf1
+WgrkPMDVVxNkXzx2AY45yIwAboNC/j6TDmZFPBAFl1OgvQHAOYnMfUx7Qy1ek9vIgHc1Go6/Pf3a
+u586PHhwN2Cv7WDgRuSTOcM9V4QDW8oQzgzsCzegbkCUYFYnDndV2M8EkzoB5O/29TnIJ8bmal+H
+AI418CzAoPIb+kBDk8kFVUzWglyPvYGRhmZv3HBOJHuDCizzZzflEHU/nhyv3k+/+p3zA/zxXTB2
+O6Q6gLR12AhorDELbHSAzUEEFRj1i2c1JO6BHUi8y4RP1tG8W6cQ22KdwaJj5QsiLypctOfyWY7b
+0/I71N+hWH/Z3y6lBPNeLeO3Kw+lfAVsn2EJ6JZ/sX76eftWcMXuX44pLdumcowosy2tjF6cknV/
+JTvzx8o3WH5rn2H+fMQOV7v6zPdTfs/yXaSFwel1WCZfPUzmliPMdG2I0dnQ2E3ZfW5NCdOsmk2n
+ckn1LtuoWdn+ZzUpmm0BAu+cWWL1/YEFxor1IwYvl3BrEyoHqHxloTyZNtgb++xtfO92TuuSYnD8
+cmELKixU88o0di8PvHZu9p7OyNoHz4vVWs/X2SiCRDQlrZNiahSeNzCN64EaDEj5fx2tHTxHAJ3v
+G5cqwPYPlYyKrkSAImht/nTT30KeQE+e6OCS95JOgfYGx/eWgSW/KtmkDtrPwKSJ/awM6riQ49Mv
+v/Pm4cGAe559TURVZ9szuzgOVo5McvccVyQANtfuHCwsAyhBzfUhzzg+yjr5kfnh20w4ST2qQO4m
+VxhL+wAHx0VRJ78IMPn7xewNyuf32RsC9rYxkgwsQQHZqbRUM2NW+QGSFPKHIuai5Kv5PDv96Zfe
++eThQWju4wdlrA1BENnkSA040GYfNYu1WhJ5CRPARttELP8F630TsBMj2i9ozQjorIAgvtZJ6vGi
+sed9pFVbT/O4hiJtievnFQA16FrkMGbJ2lTtup+z98xBnuo2XIQ3RUyB9mYn4aK989YEImtJ1D5T
+Of6UtTLpqzR/TpYmS+RAWWMXoK93sddgx2+uNJwZnPAs+nu6LWsfP9MBnc5zbv0ZKYDWojLpYtRt
+ZCPAnoSnKi1F5nkrqRL9x0+y9bmN0SfF5IbFNxhcBLm6CAzQ6F9do15weBp7gysjpJQEcxUG6XKw
+k+80aaJcE/6er52DvU8G97y2DJcjEIEXxWXHjj9zZ5GoAiBVVwJKnoCQHlMIal3/ASADQfGj4oAq
+pXSdigtw2AQ4IMZZVVf+gAguvQAxGlhhtffkxEJoJIb4XlAHltH0l+y46GASnFZANWeG2h4v+vtL
+73zi8FzAPcuRZbaI2ZEdrJ3BQ0aOoB9AigOiei4VW1cQajbViR0IfkSGkn2W+Qum8ikfmQTMCMAR
+rP4GJ0MIqtJwH3v7vndUdkConltkBiiHw7NzUTM+CNfEx4ecJSNlSqkkhdfvHdzf/4Mvzax9UALA
+XGK3WNu145QcAd4AjPqyb/soZVCpQc0BjOM/ODG2ndSQoIml+SMGBwVwUNYdjy1UHTqCCS5RAGIK
+nRNvRks/sATxHUbShMzQfifJw59Fso5efF4yliB/7aM8+enDvYF7XrvxGBA81XOxAcEHqXNRaswO
+IWtrna29WC5FDLDngI24pvMB3XzrR+pHuiM2FmBXDVI1Hw6Di/Y2XS6K6NRnePdB8De4zolxNhAd
+W/A0aSKObdCLSrq8FmSOA4yAMrq75E6evv3tnzrcF3Ov7WI4+YNuzMFt058025qkgMfaXI6gdUMa
+sDPAiCeImD8rAP3IJHambLdNQUreMHkIcD3fijErgtXTCOIqF7P35GpvEL63Ao3qRuKBpS9N2OM1
+G8kztuW9ADzbF9hjInGDOjeskl++7i7vdrI8mfax9hfXNRzNqgXObD6UZ7DJjCEIG8tnbTCVaaaO
+gXvcGtimuu6RALOoBNTFRazmhdegCCZEH+CTo491LQk/Xn4Fnb+vmr0rgTQBDvEkRAOvzlg6Pf9c
+ntxoEjpYbU1UV+1IdzPJHeju+iqvfeHbP3m4a+ZWy0l7kkQe5HbiogpKWFZMs7ZxE/hrgml1qlLE
+ALsVDDUNDjJVrCxCUTQFPsi1LdZncBWPoKNTN9jbLVlFNFlLG7BCYM955cayYsQEfkZ28Kobu6/b
+uhucRJDW3fUEeHK8//U7A/f33n/7CZUsJE7OODI7f88LJO0Z6gUj9uKOxg8GxeQgGhl0ncika7Fd
+TW31uM0YOiDvApzbcSDtR8PeEDgnIALLdjwYMHBAmoSuCS9R9dyUvu52V4kDUAkmEBWOAtCmrNb7
+dHBk748d7oq5n4jmA0eSoDnbbYpXfB+IzqWKszYI3zmUIybtDTL1juA6M1GjAndYkKW8m1TyWbxW
+65lTFI0TEWlveaKC02QAVg5uSJMIyh45gU4GnaC7Xb87nK7rfBp0Jxbs1t5D4P699/99HgYPnQOF
+trBGSBIwksTkzBCET6oDJjlZmxUUkdZzkwL2ZGuVlVuhQV2ZUCdNUJ/YOiGBY+wtpJi2yQJA4B5p
+4n0/blgX9hr2dXcwlE5kRMEJKuUx1XGFDSrF7bW3vvXjh3Mzt9LaYCw/L2gBBmxfkkCY2tXaHUyt
+iLLVtGNT6w0nO9/Etb8mPzOIuhezB3AmAUif6GqFB/QZE9RJrSWL6Bt1pQmYclRb2NTX3TCkux0y
+Q+Vd81dxp+qirsvykjn8Z3bqXj8buL/3/ltzIflB6jIfnJ7ejhIFbtIB7UAdQHTtsZi1o5MDhNSQ
+2TU1j0QVYXEW1wD36jXq5yWPvW0KGoU+lixordaARELfGVxLML4Gx9dnffODSl9AxUGl/Yz998Yj
+e//Y4VzMbZoQvLV3xYWOINZ9+lIsr9DheEo0gU+Ptfm8bnCBrSUIF5MuwAFMcqTpzslnb8c9ADVx
+Vh0W8IfiO186WUuNgpM6qnqMgEwYTeZiQSXoZA74hAe9baAfG5hjubzpsPae+lr780+IszaCw0Lc
+uPeOaenmUKl0x2dFT8N75TliYSbL2sYTrqwLQpr0BltYvY3Oh0Dn0zkzU8Q8QwtmcCfSBuyMKhZx
+6VSz88hEcgx0foA5ij8lGEa376EdE/5dDlw9Xvv87/zo4bbM/aT1RG4Fk0GIid4lNrzkuAwI0O+B
+BDc8QmVAoDwBN75YCXDdj+mxt3cCmHRFKAH8clQbJKL+XE62ciuB43fvBMkexzGxKqLnmMCQzMGg
+JgaMsTDunITg/u77n6usTXDizfFdqXcZ05In8FwRsH9Jw4j1oy8yfi3knnQAXhi+9AY2HD9OXd2t
+m5f9NPpWUIljokCRhHNMe740jrwDutc+K5vIZe/P/fZHD6cyd9Xa4Zm95ZQoLQw9JsGRL5fBmgIw
+WpXYYW1dEtoBuPlSexdk7Lgm+gsnlwv8Kx3C5tB83EM62jHpsCxCyKbb3BbVmPTdd/+EFfh8fTe4
+f/f/fGYpaR2kZ3NQyd1xGn2lge8JnR1G/4vGke/ZS57AJrhwx5Lb4esOD7TDweMy+j4Bk6Kv6Lu5
+Q6/GxGXjKJj2Y6uta+HWanTTbl/7VhbSaaMJYwzjHhzvfKfxV8NIPiGe4XPcdnv0Pa3dduCepcYx
+jjYokGp40lF67bO/9ZHDbZM4A4c28xjthxp26hluc1KM3OTiv96A+fPd8KTjcXe3/e+z4wmEu1+B
+QpfFfzbNBVUYJ3UMuJ/9738bShIZWNz3V35n8IY2Yvg0UBM9p+NAeKdH5dTtdlIbeF4vRS7aoN6P
+mNuRJEFcca+Hsf9c8l6p3knd56/zqPl2ajK3WrdGvwEN7g/d2XG4C1rf//VR9+UwDjRv9+Fe+0wg
+TaaHcBy1NLBwJfBQbJ9HzrFnr0EUnAExsPldJMC+DVYivazffV4JHtZ5gmc/q7ZdEwHu9/7Xr+1w
+Se5XOIyyHF/10YVwCPDg5PBYm/onlLmfbr/HPg7ouUAV7ywoOO/rTsOSpJCfd9lmHEnYYd2dF+Yu
+D2MMSODrO5L6uy5mOsKg1FZNMKxNIgCl7pXDWf3Mu6y/EIxNu65C96SbXGky7eYT8pmKNtGCY2RF
+HnOCAggFfE16OVMBZuLbEulVqsWPBbbP2mIZEbMNtLIJ9zhQeFwsgOjsep3O/5L3iG3clCaP7/Yc
+LyUy65fvzrvmWbo5sMsz8SoqRJUO5tchCbLagcJek6DOgsYMlrVMAmvZTp+ALLDHWJsUu5E6IfXJ
+SfKD0CDJBAZa//pHu3iRdhNo3486q7kwcPWozP3u//yXR72dDsM6Moq2oNV8efyOm69PVloY3WwB
+F7E3f426aFKPssVqvu3kaezPVg8LWZuadCLv6gNqpTN+pekxOG2DdejkoA42eldh6mIbN95zDJcn
+m5BGmkye3qaTzx7qikjc0CNkdCo5aoWBGMlhP2Kr50p5wgNKfRrYk4Mta+0Be4i17V7534+3vDbJ
+eCZPnMXw1WgcCxRzKcHtFck5XuOEm5Em08jRiDTu1nlKDN/ly+GMSk6ARV39SW7wptlbs7UGcdPb
+Zfk7tmYkNcuQB54a2GX99rZMnsfabEnr+gmTq7f9zKhlatKfS3n0hPK12hXC5VCAejUVjoH/3nsw
+MOTk0J0G0Y9HQRuFPiQOjrdxZhxsAVqb/Zy/1eXvnJPCdQb1sj3UYc4M2GVO9fq+S9FdWQuGae8C
+xmU+tXiNpsH9DpfogprE2pNtjcdR1vYkCdQZ4AQSsLClq5E24DUGxnYUNqQKRRjo5Q5GVP9IvDEg
+xyLN/c7/+BXjb3M2wI3DV7ctX05gB24fbJKXTPKkCdeoCfQqvlCZMdVtiDEYv8+xSJRE0avqgvP8
+9rkpL/g0xNoEG5rf19sROIjHOkS2ZiY89p7ad+xLogESZDLO+8aJBOlpvMkOXNoEOkE/OVZkydKY
+oJ7GAE7s7KXO2dl2DI2EIJfpjWQAJxFDUosKHZqXcZa+NAd4khrcgDwppZ3s/UQq7EvBScGAPcja
+IKSbF9jxYwruMfUl2SnKl1zQAVL8+EZI5qucbbbHnnkR30RQOQ3E1SaFHfrMrisgdTcE4DVJE/ON
+k8/ey+YZ4Mi/kaQYrwdy57+qxSVbR8DWcmSUtYktte0nSOS+9vR23+QgB3jxpb4+TrFDH9fcQOfK
+YeWU3mcaDUwta4ug8rERycZbtmDHejYTNPGsVRxJPTc/D5tWrjobpQdQTyAsnjbXg6mOLWvPSuuM
+aqJaJIdVqydo663wT5Q7UKitINMRXU4gCC6wCamur07G3+6xtuOSuJIk0ttUh0P1g0l+Qoy6bIEQ
+QqjL7JDS7kPZucDz31OEtrUbj9spSQZcWj6EowC4f80XH1VBIAfZJE4CalvlL3k9EcqCQ9Smwubf
++aJGBchtcSMG8GUB0ylwf3AjogiYjaR1uH62GNj7WduXJNa7j/S2Bxl1gjCnhNTJgCGkmdNU5u90
+YUZlrVVXy8Nm2DzqjQea+1tX//xJopuDVxmqg0rquABEse4G4s9IUvAQOPKDpIugAkx9caMa8KX2
+ylynUzIyxcqVZPS2veSW1ypA5jJGA1vtL9l93WbtUUnS09vUCcjIfA80ZAN6CRw/BsAgPsAtuzls
+GhlH+dSSN37mjtyiI4/VyPmiGASJnwhl6WSbPGlfHEkWIrYdJRPnC4DrILP616l61f0gTINjfc0m
+Q5grEgKbJLDL+/ITcIi1ByWJw24krhQ9vb2RI6DI6bKBofZetuUDX3acthNMtAn1GlRO20kUG1SS
+trJIXS4dFtjKBHrs3Q5uYgAlE8xIgKfGpJiyVU4W5BXoHPDqvgJoIsHW6zg8ngDyGFsCREsZIhpm
+bSCdric3wAbix4xc4vEv751gMu8nOrYpRTYgksvKNiaIMtUUBMJDrF2DyseUF7lHdva0BAkN6W6q
+ehmyHs6vwYqgygHDotMoz/IsQSaSVOgl2MyLjhLvqS8Aq+/X0jNU2ZGPc0D2WL6M4nbgJMCmNCYH
+JwUVghLYUo40AKZx1oZ2Yo9KEgkNfiL7enskmCRhEfpOiZSpXoDsJXBow7fbJ8AfI9u5FUxoVsJF
+5AejBJxcV6NhCASq/iix9WyFA8J2EjlzIXNCaGpfwrKy7hogFpNGA1x8FnKWq+BA7x1PMenL1n4Q
+eYBWGtsAW4FI+/eDrC2Pm75ca6DG12Jw9Da6DoYTTKpTyV1vgWTx2SqpSMXmVBM4FGW8YSSB5Lol
+pL7EBmLkO1UBDvUSPa8x0yxBZEzPQC5KWMvVAAP2BpFGr4xe934FNjLmRiwnxAR8OWjN4i3xHq3L
+gib49aQCOTXe28BO9bkJyIBa2oTjrL1+R2nMJSmefbcLKdbbqI4JgsSLB0YEcgUvcaJ0lDrK3LP/
++WC7de+xqamGJrU8v5tLE1YtzaQJNZ2G3FriNds+e0O+SsTyhAMcmDTBvMb6eljQHG5i5qwCenRF
+NGW1fhLJshsMAjuSI8ypGWbtbZdESxKjlYttp/V2cvQ2+BLGxmZ+1eSWU6KnELhB5IA0ecx3sEkJ
+z++20qTpctUowLN3CEK+FOdgTsYsB5xW0waRLFsWuUFrMqbOZFQAb8Dng8xJgLxJEQ70fuUMBJUx
+vhXKGJ2SkSI+sKPMLq9V2cPafUkiS4CTK0mi9kBR1Umeq9au8JS2gknHKSEKrd74OxmVJfwyw/QR
+8sskWpAjp3lqBfqNBnjSpbFNziuKE6U4G4gsmjb6WwOc6pqJhI1xETEAub5gjvaIUBDeMMDp3s1B
+YEdyRBmku1ibXJdkpB4F7Ilik8+h3tZ17qSbNYisU6KuYOhcTr0Gi80MZSn9RCSTpm6YlboKwcoN
+fp9k75wCV85JY/1InuTnCf3dAbhODW+A3MaO2E1YuFKEnKo5SuK+cWAnaa0SsRry27F2kySNoRPI
+OvZIkoArK9qJiIFfjrxnlaQ/jyV5JoJJCoPJU5wSVVuipAnxf4HVgbQKjfKFeYGlYO/8mmgu8iVl
+LuVJ+W4WMC95plaXLQBeGL0s6lTfEwOQy/gC3WoI6jK2yCyKg50aW4NMPo0Am7gUpNYEQVmWJSKh
+WfeyNhE49S78+9ySJMwpM/52sgV2OofRCT5tMEmdYHI3uMHROjyQQKaDrcbeZG8gpqEzYPNnTOjL
+E25DrhcX1ngACezakUyHQwTyetaY0q5ef6gOYGQwxUGtkhms4KsvRWTFJWmdbUCTVAZ3hLXjgn90
+XieSJF7rHoBNHlV454K2aICS2Tfq1ZTw2GMgoCSW8JBVe+AEjvzsSa2QybC31d6lElAGl/nwI8Fk
+qg4dtsQErZOm+dxcpggW1yCvQN8CdQBxXZzsgVqxNehsqqOxiQPbuCOpI0dUm9sGa8tA0q8arFfs
+AUkSEgI/sYW/rfW2znhGehtUSfEocyO4kW9L6ESBJQpmJ+VtInjp38yuJjs1g3JqLFhW482XZMwe
+NuUlsJuLUph9UkzsgBxYpkBfHHGk7NPOLfFA7bM1bACbdwslBUAwGUVTv3MSa8eSRH/OcUmiLctk
+LeZhve1Jm32J+MfEXF/Zn9detCZNYJS9WUtRqasmyPrakSfo629pBWINMkvqF8vvTKb4IMcWIIMC
++9aRIs8QJNFPqUFt2FoUjjENXk5sk8bPLgs59TihHDmNta0kAcaiLLu6Q5JYCzDS22lAb6vAdMft
+cau2KysL6MAys3e26Dz2JiCR0kZmPsfyhMxwnHQE71ROgOqySDWBWZrQ8rm0TFmbiwXIqQziQdbM
+MBl8D5QTSUALu88DtWVByCcqqUsxd0YksEEQybYcYQkjOoG1q4kgvSNi1YwwIEmoawGy91f+NpEq
+ZSaI/fQh5i5W4ESqJF7uxFrT8ciwN0EBW2pVtNhYuC0J7ckTGzis+rtcEUAmb1o8KIMNweIc5GCA
+vj45tfcdRDepevL2/gGoFVubCsCdwF6/+LRLjsixFiOs7UinMJAckCQ9C7Drb4Ort/d2hT6uQGG0
+v4e9V04sEmOPPOH6W6ZdE5bmMKbBl/cu2hvr7xGLVznN2FzWRCgAI25WqNlEiJ3rbUENIri0wE5K
+iiT2Sikf2/b9nCZHaJy1k5/G9wPJW0gSVdd+br3NMpTzkZhA5LND9p4c9uaVfVvyZAvgqxxZGZxr
+cGBVfVyHQwX8etVo+1DLcAFqep8oWN7OK3MFv+iEnDpjD9TguB8CoAFjkxdAUjsZtD7ncsQGkVKv
+72FtEgHvQCBpJIl2SWJJ0mxQcK4C+/W2CSjbB8GQvcsZPn8RS/0dFunBtZkjT44nT02P47qdDDA1
+wHEBeEm9r9dGrcOZxkaol+9Wy62LT0D49ojbPXpEcemlmCXogBqcqQHiSzfBIwd2UgFkav62kTk8
+RU1BEMm6hTQDR6y9K5D0JImuAuxLElGgRpbF9+htBu6idyZWP5IYC8sdxgxqqq5GYe2OPBGrnLQC
+I8wnAhmAZ1AvmcWpnj7VSVG+eQM5SrkCzO9mYRJn9bGbKt90Z7iQqiBU/aBChrDaE9JXQB/YtiLP
+BlpE3uVcgg858w6wdj+QlMybiCdu/CrAUUmi60l2a+7CksSKm5r2TqzcjrE3kx+xPCmBzdSuC5VI
+S1Vgq6DDEOAryBNOUofDFshBZVdR/C19we3KQDt436li7IAaBJO24yzT6p7lx1LxHZ2dMjOD8JcH
+gsjy+jTK2lvpdh5I6sRNkSR055JElrxCUuyNIkM21Whsquwy6+VYnnDfPAn7jRjAmwwp2ZmpA/AV
+0FO1xbZBXupKQNUFEsGOLKWvwT1ZEIOapHQAr1UsKY3dA7avs305sh1E7mNtL93us7YuGSARsCfX
+bTqHJBElr8SaCLRzYoPLtIB8W554+rtdBEpVH1SJwoNMAj4Qqw2uVCzeAXktMhLtZhSsKT4gTLyJ
+WkZXd0Bt2BrOAGzJzAT+97WyduoEkUky8h77j9SUWIwCSVU1CX7XzTkkiarnLsVNmWW1c+IFl648
+KVOepP7uAZxLFAlwWSDV6kk4i3dAriw+rFp5dCFuigupFKBhANQ+W/OGh5RfchvY7SqQgs54O5pZ
+sG03iNzD2v50A5+1ySSwgPyY5baSxIK71uKWs7e1fi2M2ZUnKT82iSCCarnqCMBJ2oTZRkHXa0Yl
+VTyQK6BXsOthvBbuobuq+xR5gZRJ0HugtmzdvuiWrPGKqgSwi/tBPkuLkRNEbpFS3/pTpbgb9p+U
+JOC7RiKQTEECDIyrdIokMeAG1tlerJsVxKx4KZQnPLnT2HvxrGfg4zbAVyQXH7ysIotMpkgWj0F+
+A6JFW5iA05Akoa40icc6joGap5sbW5uZJiGwGZjEMiaezg7cEUiyQSIMIpO5CvTtP9UcDeSydhRI
+eo0Jp67U8DhRqh3ocm5f8hM7rjzJBU2iJoQHmDAEcOSlrbVGJGJx8kFeVYYDdODlrirA3IQ5grvU
+nh7HMwJqwdaykIpEJ0+qDRkS2HzClQb2ts6WciS15FAYRJbXU+/Rsf9MQ/Mma5Pfmwmwl7Wvjz//
+vdSWXB+/t6sjTA68NYxKeptG5AlUwK/QWbtl1uCtAL8PcKjjGUBOmu2yuAV5S0kVNocamE6mQWFP
+UBkNa5ee9ziowdSMRP2UIILR1GFsEjUloGu2qRgAjhzRVYmBHCnARJFUiuy/fRlJMlcuOEVz/9Ev
+/dn/fLV83z/xgX8wI/0qsfFi9rIjB02CHtZeZ/utjyfFHtymSmaQZJIFVZRUoJSqvqwugrlUc1uJ
+6U1K4nf5Xxl5mezM7bxfert6Dx+jxiUCkfN5lAamoq2TyDpyfezWa28AW7OwN/CHfw4xWoItq0K6
+nzMIIokfvyxl+/Yfa8frsLYOJG+zeNTj8iY1zBqUJ8UFqQxf9TcPMKfaBznC4JVXlyuHMy+cij3I
+2ssQFJPzxIpn+dmAkmz7grdAYFB74plVfaaugaSuPSEnkUGSQCJgE6s9kVJHJmskcNnSKBQsnbIZ
+RCZTyNULJKO6bXLijVMDSQluaGcVVnehJ0+KPpxyAqfUTY8BHDLAsQadyOpFmkxpFiGfmXZTs55U
+Ss+w+dsYyg7s1InsdryD5I7sudwCtU7De2yZiJevQgfYOtOYulnIbTnSrizJvZp7ciSJ5/XsP68U
++JyszcCdaspk0dOVNKc6OarWbufqO6u/W/f5epXrARwzi7fAsSVZWjaTcrBLooAbs25E1YjMm4Ul
+0LdDRxwEcwxwEtH9OKhdts7Pl8DWbKs1thyx7AWQ5LFxnUPS5ErX0x4KIhNzbCTgQdi1d8faIv3e
+5AkpeZIYBCbh7WLue+QAr551CPB8ctTCrKkCoYB+tRIVi7sg5xV/yOaSWKBbaWK9kEiWoJE7INuD
+FKB54dc4qMGVITqlLu3CAWBDsllI3k0VuCNWjrAgEkaCSBAOS61NJ7WA1nlZuzolXHMf78Sr4wc9
+8PUb5WizbCtlkMrkCMkkTghwDt6JBRjryIamw9GyeBfkAHqqqxjAQ+VEUBrcHX5pzwF3tEPFsa6J
+kAmdYVC7bA2MYOh0YOsAcnEvErMtvWSNlSNVoZfAtltD4smRVF9D18KcibWrU1I9so//wD85gpuu
+iqOw7JjuwaMk3RERVacKcD78vbUqcRclqWKf5lYk7iJwt8R8ucxVYc5K4mtPKrdkdShu2I9yLLyf
+8ngqv6/Phfp6yXmd4iCoWo3A5eFuSVriCb2ddl3SCcDm4Gn6WwJbbacdoFsEkXSPDokjS7SPm3LQ
+d+RNlIVQLU3e2sdKo0DNRoYMfvz/nPGcRAVgY2sqk6V4sFkyl1wauUzOvA8xPAhUs6R0TDbbKJ3O
+HHc4Jnl1332mFql20nMBE4CzDn1bgsRxRVxgJ8OqntzxZqvUFSZcTzuJKbYRa4/72ufR2g64eaPv
+xIrmgaXeC5hLTcTEHJQY4GVQZetAx/XEqdIAhUzBUitGeqpUH+QrhjXQQYGd14nw1oUoZKShCkEN
+aADYALWWFwD+TG7tiBDLPMImsIW7YsZHyKtzzx2RnjYYT5+Eb/78WVuCe9HddNTd04FIzS7JgK4O
+B0yttLU28MYA58u1IbQyV63DUQG5sfgIyFubtgG6ATsYu5A2B/P47rdZKDaat8eYupYYOy1nNvWs
+67Zbw4GcS+gDmzOqkXahzk4m27ktR5yk0v2ytggmzRX5P33/b/6x4z9vrN72tDD2tEiH9d/GsGv3
+OdYumyn/Xdq8GhtPyLfB+lNS6WXbid2P/H1Y+py/vvxXujl615APPwHcYQF2GhbINp9BNObYrfQD
+V4K4y3+b1YqT2cbUpigpwt8nkczsCmDzkyPff1MzxOsqcYmaHFlf74YB/4a95k2VMYlpe/l+LX5K
+YqzF7tv/OwaTvxnIkmZcTZRMUd3qf0+i5LIUKKHL4NBsQmQ2IE0MWqnKklWm8PqRYhVilirgMvk6
+5gEEm2ugk1j5lSzoh6A9sha5BbSo8yYyrWqRBNHVdFhGPvA0PYBI0HD29oEdp/ZNtZ/R2amukGxO
+jJ4cIXJl111q7QDcrXMG+UHAxADemDQGONUWMtuRzqw5QrZOzbQWquWhxSBY3Ad5g6cGOqiOHGCv
+FQF2SJfEYA4AXSWI0dSwIUFYbyWptTdJp+YTO9Y9YFvLD8yissXP9nW2liM0IEfS3WcjjSQx4D7u
+7OJ3J6TDxOqAeWKlB/A2yBJrfXYd/s4zkUqHWxbPZbiAIcib58HZnAHdhImowD6SpaSuSolHf8Em
+S8vTizNXsl+8ZmvVIwlqgL3W4VLKKNmimhQasJOydjmwnRQ7+ZlIUYJLd8bawt+WtaD59okf+uXr
+43tdzb5uEjZPEkXuKYiyedRMwjdtUX7S3jLXiJREfUJyvOj1fW/Ya0r2Sfp5zOtOyfGmSXrYoReu
+fpJ5/KYOiRf6EvRnZ148nyfCs3+iAlJ1sC+P3dgqTVLViuy9kvGy278JZNdNS9ToxWO5zlYpdlEY
+lXKxnRdElhzK3TkkIXMDb9USxYATS9lyLa0ZfKozN0oHD9RgMqkuGhZU1qwkN+aQ+eJU9ThB09hC
+e4tptVy6gLrf09r7akvIXSXZkyoxS9th66S8az02WHfQAOhGYUANSN8V4SW9NjGkmyGolhu7OpvL
+Gp2JDK2/JKfb3o61XUkSgJuW+u7jmx9ujp/hEat2JTZaWAI8F0Kx+dt8VFodYs/88jJ6QXjdhKYJ
+oTyc2GOTWE8SmQDhtSVJwJbaEsBOcIgbooQ6oKdgXXQwnTt21WEAcCUIgF3QVbohGjAUNOW6wCZr
++RW5kZgzIk+WtKGzsztC++RIikofbilJjCyZb2988Fevcfa72SWEQMoFK1GUttNyhnRvX5LVYo5U
+qR3aLN3d0vw6VX/jXP5vRGqfAolQtvXS7+tr3IgyAbsNideJZcdNk1rO+vJy3Blvsripx1n611wG
+Nklnj7PWyDpJ4wO7NB+QsSB5p4+ns2N35L7kSMjclb1z69l6MGa/OjkMTsombA0JbSZJmfNXtud2
+oWZxyciayVE9npi1NwEPWPUak9bbtvJk5DD7aXgTOPJyToKYpdn0LCNBjBMysFgUDz7B0eMg63E4
+sG/yiecDW54cOo4SFX+iMIpvm84tR7qSpCs2/+P3/saS0FkhVxI6mGeasEROvs9N9GQg1pUNRAII
+RDKG/0w6UQMyYbM6MHxsGsqkDaKqGuEWIW7KkTF54vdM2oZWsllMPqaYPD1uJQg4l3TNjLaheAzY
+y5VwvnolDWyuxW/klUXo9Zs1yNUthqzYLqkr/xnkiJu42WRuUTuBrbhcMjgrT8WW6EEGOGLsW1YM
+rgMoSzDKtHgBaRpk8lo3ooC+fhmyhnsKVgwmpuv949BvViCKspSNwXGDpXmNPAEYthYd8e6k2GRn
+gDPXKhnHI9Xa8xvuyBhgxwVRbRtfZ/MA+L7lyDa4a2AJhwbw4/l7lBctyMS8CFNiZDgtOpGzeJMp
+hdVvmpvCFmGSwyu3QA4u0K00KYVado17GODw/qXTATXpaaYs7KSOa+KAemuFYc+/1uWtWl9jKT8u
+gaUrRZLS2EkBOrUAEvzEk2x2OLsc2ZQkmx7YN3/vrx+lCb5RajqQWh3JNBW5UuRHrkdZ7gNHpgCT
+JGylA157IqQKhHKlSA+ZdZR1JoAgHiMjT/bWljgMTn5xVFwGq1Y7g9JKB25jsJyJ0iy2otf9Ndib
+Bk+io0dlHsPgMQJ2UomaG5Fe1zrbqx05oxzZlCRd5uaVgoTToTS6TLnUMuV4cSLV9cLwImUKNLuQ
+afFWYpuEVPGYnKiBtPneDeiir9JZyzIKLk8BtwayBrMOOXWXDmdpcmflAfjrwScmaQIZ4qTggdgg
+Cz5i4iRgs7oRJ70eZiHPJ0c2WXvo2/3md//awt5FUsxAmirTHn+mhaPXIlgeaOYAstSYuCxeQT6x
+YqcC6ojJNaODy+hWbMiA8zY3Mguu2oSO7mbfZmnogto6IQB6/ANna/CsPpBzvInLmg6wQdyXRLCY
+yJtclWrXFU/o0D2y9jZzrwdwrfOm6VC6zlOt2ps///G3PH5KBJq5pgSpJGEcFoc2R602KCxv6TE5
+BzoJcFtGh44tCIzhTwF2UA0YuiYkAG0XgpKdOy6oDVt7VX1JMaYMHFOQeZR2H90JsOm8wB5i7eHr
+8je/+0uLLdi60zk7N4autiDrrim2n8/iENqGumwVMdLlyvITAxyQ2YJ2d/cyuO+ccGa2YNZ2YMzS
+MABq8LU12XQ7VhkCpp+Tp8hPBbYuzEoM3Heos4dZe5C5S3c8LN3xZfUFgiRS8WtgMS3rWU6Ug8TS
+juSweAN5kizO9Th3YRSblylZevUEUmDnKyiQlic7KrrJkSMYlM+Su6QIDLH0Fqi5DEmmfLSxdayv
+QfRg6gq/U4BNJBuz7xDYw6y9K6L6jd/9q2tSJ3fgtKaCFYxNh88Ltk75t0n0SLbkTXNUVhdkUtUA
+Kmmj3JViBSIr3BKQxV5hFA5ZgK7OHrECIeqv5IEl1JXhBEvny0Mf1BRoaxJuCLj6WmYdtcYmXee9
+A9hJtKa1vtB03gaEYdYeZu6mvWEe/3CAAswy04+mZaJqHZeWbuBmDjIXPxwNi5fvjGpRFCk97lUP
+cneFlcaUv4UjQ0qKEJMh0Ri18YWyYx/caRbmehytZShZOlgQlYPac0IEW0Pzrr3sJSWbQVQjKGA3
+Y6tmZzpp9PBZWXu3F/brz/5KZm/uhEysoWBiGre5KQhai6PS0JzJPU0u3RXN5hW4fKVgdaL4O3tK
+WNkbmOksWIQ2abHN0tABtUroZBAWkzHp2g9PhvAUummS2A/sJFrSzu6MnMTaO5mbaW/IWcsspJFW
+MFJuISNE5qbkamyhxbEtnecyudbk3F2RbF6A3haEUqAmvjIbOIHo3iZhT36gZWaBflLD6UFmdVWH
+zhCoHScEdIqcEpu7Ylc/k8CWMgWHge30fZ4f2LtZ+yTq+sZ7f7lpb0TgnfAg2sI0i69aHNl/cBKT
+czZn+pzRNQZ1JNYHZwmfoSOlMpJEHYWuRz5EgNYsDTtAvb5+UinytioD2SYDcAb7CDa/kQkaXS9i
+gJ1Ey1q6G2A/i2q2z8bcmYqXPstZe1MOBtd2fmLB3pRn0XEWxzxplEkVwl1Mbtm8AJ2vb8iaF9CO
+d7AMf1rm3V+uDzoDecYB7SdzFKgdtpaVgR0ZotaZbPr9wQF7vv3RKcA+Cdyf/vAXr7/x3l96lhe8
+PpTkTJMpGUYZ2EUHE7IES5UqoyBv6fg+0H2wF+NOlpXcIktJFISQ1JUxHqD5+jmkFoMaATV/Damt
+dX+rbEKWk6IAWnXfgwL2SXLkNhHVcvv6e79YEzs8iQMiYSOr+VriB6QEmTCUK4B2+4JNkeQRteGw
+Q1fjbei7A2RwNLQFdJlnLiw9kIPru6CuEgRUA2+w5J5o3pZN3eVESmrZP6Ak7EXdPX9HwD4piLyl
+LJHWICwLRZW6ZnRYHJtUKYN2eMC5weRtUVSSa0gqRl9jW9k1N4k68S1wj1iB2+WvEsgazAB65nlt
+p2sHQpQiDYE60NbRyAgOZjTDLIMiKDVi7R6AfSvWvhVzz7evvfcXnxz/eYqze1LT6JbFW3GUmkOC
+2GHyZv9JNteJGh5ETkJxYMDauJno2WZsC+IYzI2dtY5mQaZiab7S7xioydXWhq25DBGjjMlZOOq5
+AvvZqVr7LOCeb1999+eWqsHiaKwgnhpwt6SKA/L2waRkqYBVQPdcECx0LupTdGby9PIpMp42kyZq
+FV3ZlSNHrnFAQ03AqKByGNSkUui2c4ZUbyPULKKzprwZ/QBi/fo77Ka5lRw5gyypX/NSNXgM9A4t
+A0hMivSkig06y8g0LVlWTDfZIoGeA1hXZjCfm5rPLbKfuzU3eQsUSyBTW7mLuP1T0+ca0OBYf211
+5S1Q25XRtAyRbG2D2yRPEhY4iuo+gLvwsc8qR87G3PPtK+9++snxhZ5ClicTyuX0UDE5/1szOQdt
+xOYc6NzmE2AXo+dRuCS4W3P7ulsPpkdQY4wJKlPrLnkLaMvSwo0ZBnXUW8mvCD19LVfBeA7AvrUc
+OSu4F/397qeeHFn6CHA8AvwRA58FeSmUsiAHV7JIETEJpb08NjkghzZFHBx9va2w0axN6YSP4g5U
+qwtLx5tE8OgC2luJgfTg+m1QS1lyA3qZvASRDPG6d0obGcRrBz1AYJ8V3AuDf+fNteeSdd0YkLMe
+StTjGwbY3KplC/bG7JKZ0Tji2OVo3M4/ukBvQJbgFtJFsbJ4DfKW1R4HdWlpQ+GcgLPkH5kCK66v
+7yFwvDNgn0Vze/r7eESq/l67ZBjI69gFrclZACh0OShtXv4ugHWSOMQkruiIl7UldPL5zaBKXssZ
+2cpAfSKEgJYsDexUGAW1YWSlrc10V0+GlNT+3QP7VlnIewP3L/zp37z+8nd+9lk+MIc5gAlBXkKt
+KPAsLkcI9KJys7aurkwSqXvO7nydKgvuPcMwo9VydM221swqLW9a0xzdLGTMGKhFnbgoegIxsJL0
+2jf3q6/PHkDeqSwpty+/8+bif6+dO9yq68gV0IEmKK+8+d7g9kk68gOd+8jagvZQYAjo5nPLTS0L
+B6l508jggVZJCC89PwzqAbbWMuTu9fWdypE7Bfd8+9I7P9sSPGyGyBjIZYOCu+6NW9cdNwUbzY29
+3ceNjKSeTxKcCOS5LDp4JIjS9OVxBLng6j5QQ6Ct9fqi9ypD7hzYdwruFeCfXBkc8FC6cbZBDg6b
+c9YGC3bUmcqgrQzxTLtPzp8U2oZWmmwAGsmsjS5nn+wBtWZrNpmWLRl4j2x9L8C+c3BLgM8eeGs5
+0yBvXesem0MDumJtnUZv22jAR7t8y6lTHoiFNPGbhbcADQDK+fA0+Tio9cji58TW9wbsewH3CvBP
+CIB7IJ/K2jmKzSUbM9lBEWuDWzciAI79XZfjITaKpfT4NKPNPTDne5AcDc67Z5oXjWoc8n5Q0/PU
+1vcO7HsD9wrwnz4CvCR5ACKQW8kCDtAbYEmDXckPPGnS1N653bIZ1gKZg1ml5EGyKOiJUiRXloET
+QV0lyPNh63sH9r2Ce7598ds/cwQ4PT2+6wHVGIeWqCkgpQDoena3ZG6RkSS18KrD2HtnT4UjHkht
+4QJZBpR8fmAEaMvStwT1/bP1cwH2vYN7vr397Z/KLgoedKAo3RLoMDpPjusB93rX1IrvaslsHPa5
+FXCVL4iucyIlCQczgu+MiHcSIEzOYw8e1M8N2M8F3CvAP74AnBYNvpRaMcYGBXRgbglndAA+WFOA
+PW+AndR7L7CMRUl/MI8chCmBbINLMt3zFtAkTxDSRbAPGtTPFdjPDdzz7Qvf/hizCYvPgQrIEDJ6
+c0Z8sHugJlMdiAOHhWLPhGQAieAnb9AsJ8LBDC7wRYBK4NQWPmhQP3dgP1dwz7e3vrUCHJEOsowJ
+K5sLe8/T6AbsEpATcudjCnyRU8xA2y+J7lIiyMSEB2ZHchhAg+N3P1hQPwhgP3dwrwD/8cbgrBaE
+B4oxowdgF4D31tERBD4McxkIRodSNyd4YFbDfbqABjAjHurLP0hQz4C+ft7AfhDgXgH+YzPAZ/2d
+/53AAp0xusvWNpAEL6QMPO440UMbjA1sqlW8+JMNSyWL08ZKwxL87X0fCKgfDFs/OHBXkP/Oj+aC
+KzxIj9sHeg1GBWgjLT2+XAh//jZsaECf98HMtyGRpZRr6giWfjigfpDAfnDgnm+fzwCfnZRJWHe2
+u922G0SAB9g3jfsUHa4mtJI2/Ci4CgwA+uGx9IMH9oME93z73G9/dO7JnBsenjS7EJxqPw12dNSz
+HjavJAfuORS82k+yO3VY3Kw1rMGsNbQG9MMF9YPR1y8MuDnIIdek6Nl/Ptg9wOug8zaHggbu1ZNg
+9f2yHFazs/f3A7w9WLZ+YcA93z77Wx9pwSYWT9zWiUza/ghAb4E/clh6w+djYOuib4+ZNZj773Zh
+65cK3OX2mRXkeboVqOIoMFNdJV9HiL7t7sd13e6aiy8emF9IUL9w4GYAZ5ah2gn0Kkv6VI07D8TI
+1EAuJ8iheYIX6vZCSJAXHtxbIA93DHFzp7vjjc3I4g3B0tn+BQP1C8fWLzy494D8pJ3ugHssxHyh
+by88qF8KcN8W5JfbywnqlwrcF5BfQP3Sg/sC8guoX3pwOyCHC9AFoOFlBvUrAe4L0F89QL+S4H7F
+gP7KAvqVB/dLCvQLoC/gHgY6PGDAcyDDBdAXcL+IgPdAfAHyBdz3Dvg7AfcFxJfb5Xa5mdv/F2AA
+WhWWsKhQtpUAAAAASUVORK5CYII=" transform="matrix(0.24 0 0 0.24 0.4712 45.6514)">
+</image>
+<g>
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="24.3979" y1="55.9121" x2="24.3979" y2="78.8438">
+ <stop offset="0" style="stop-color:#819E3D"/>
+ <stop offset="0.0381" style="stop-color:#84A03D"/>
+ <stop offset="0.458" style="stop-color:#A8BC41"/>
+ <stop offset="0.7933" style="stop-color:#C0D145"/>
+ <stop offset="1" style="stop-color:#CADB46"/>
+ </linearGradient>
+ <path fill="url(#SVGID_7_)" d="M31.682,68.273c0.662-0.493,0.662-1.3,0-1.792L17.821,56.157c-0.662-0.492-1.203-0.221-1.203,0.604
+ v21.232c0,0.825,0.541,1.097,1.203,0.604L31.682,68.273z"/>
+ <path fill="#FFFFFF" d="M29.361,68.05c0.497-0.37,0.497-0.976,0-1.345l-10.396-7.742c-0.497-0.369-0.902-0.166-0.902,0.453V75.34
+ c0,0.619,0.405,0.822,0.902,0.453L29.361,68.05z"/>
+</g>
+<path fill="#ECF3D3" d="M25.081,37.567v-7.358c0-0.843,0.715-1.534,1.592-1.534h4.418l6.227-5.146l0.088-0.942
+ c0-0.591,0.307-0.957-0.594-0.572l-6.777,5.611h-4.524c-0.876,0-1.592,0.69-1.592,1.534v7.357c0,0.727,0.532,1.336,1.238,1.492
+ C25.112,37.869,25.081,37.723,25.081,37.567z"/>
+<polygon fill="#ECF3D3" points="43.758,25.239 46.42,22.738 45.067,21.315 42.588,23.633 "/>
+<polygon fill="#ECF3D3" points="48.28,20.879 50.941,18.378 49.587,16.956 47.109,19.273 "/>
+<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="22.8218" y1="34.4565" x2="25.6357" y2="37.2705">
+ <stop offset="0" style="stop-color:#ECF3D3"/>
+ <stop offset="0.1396" style="stop-color:#EAF0CF"/>
+ <stop offset="0.2804" style="stop-color:#E2E9C4"/>
+ <stop offset="0.4219" style="stop-color:#D6DEB2"/>
+ <stop offset="0.564" style="stop-color:#C7D19B"/>
+ <stop offset="0.7065" style="stop-color:#B3C180"/>
+ <stop offset="0.8493" style="stop-color:#9CB15F"/>
+ <stop offset="0.99" style="stop-color:#83A03E"/>
+ <stop offset="1" style="stop-color:#819F3D"/>
+</linearGradient>
+<path fill="url(#SVGID_8_)" d="M23.724,34.557v-0.884h-0.12v2.623c0,0.823,0.659,1.496,1.477,1.528v-1.752
+ C24.32,35.982,23.724,35.339,23.724,34.557z"/>
+<path fill="#8FAB3D" d="M36.571,42.126l-7.025-6.034h-4.287c-0.061,0-0.119-0.011-0.178-0.018v1.751
+ c0.02,0.001,0.037,0.006,0.058,0.006h4.288l7.023,6.034c0.447,0.385,0.814,0.217,0.814-0.375v-1.289
+ C37.122,42.389,36.864,42.379,36.571,42.126z"/>
+<polyline fill="#8FAB3D" points="43.551,39.965 46.077,42.276 44.792,43.55 42.262,41.147 43.551,39.965 "/>
+<polyline fill="#8FAB3D" points="47.796,44.372 50.323,46.683 49.037,47.957 46.507,45.555 47.796,44.372 "/>
+<path fill="none" stroke="#8E9A39" stroke-width="1.5" stroke-miterlimit="10" d="M36.45,21.794l-6.531,5.611h-4.78
+ c-0.845,0-1.534,0.69-1.534,1.534v7.357c0,0.844,0.689,1.534,1.534,1.534h4.288l7.023,6.034c0.447,0.385,0.814,0.217,0.814-0.375
+ V22.169C37.264,21.578,36.897,21.41,36.45,21.794z"/>
+<path fill="none" stroke="#8E9A39" stroke-width="1.2" stroke-miterlimit="10" d="M49.823,17.39
+ c-0.113-0.113-0.266-0.178-0.426-0.179c-0.188-0.009-0.312,0.062-0.426,0.174l-1.711,1.689c-0.236,0.233-0.238,0.614-0.006,0.851
+ c3.305,3.347,5.126,7.779,5.126,12.479c0,4.86-1.93,9.399-5.433,12.78c-0.239,0.23-0.246,0.611-0.016,0.85l1.67,1.73
+ c0.111,0.115,0.262,0.182,0.423,0.184c0.003,0,0.007,0,0.011,0c0.155,0,0.305-0.06,0.417-0.168
+ c4.214-4.066,6.535-9.527,6.535-15.376C55.988,26.748,53.797,21.416,49.823,17.39z"/>
+<path fill="none" stroke="#8E9A39" stroke-width="1.2" stroke-miterlimit="10" d="M45.473,21.685
+ c-0.112-0.114-0.266-0.178-0.425-0.179c-0.135-0.007-0.312,0.061-0.427,0.173l-1.711,1.69c-0.235,0.233-0.238,0.614-0.005,0.85
+ c2.167,2.196,3.36,5.103,3.36,8.185c0,3.188-1.265,6.165-3.562,8.383c-0.114,0.11-0.18,0.263-0.184,0.421
+ c-0.003,0.16,0.059,0.314,0.168,0.429l1.67,1.73c0.111,0.114,0.263,0.181,0.423,0.184c0.004,0,0.007,0,0.011,0
+ c0.156,0,0.305-0.061,0.418-0.169c3.008-2.903,4.666-6.801,4.666-10.978C49.875,28.366,48.312,24.559,45.473,21.685z"/>
+<circle fill="none" stroke="#788A38" stroke-width="1.5" stroke-miterlimit="10" cx="22.173" cy="67.354" r="21.423"/>
+</svg>
diff --git a/Sankore-3.1/resources/images/libpalette/BookmarkCategory.svg b/Sankore-3.1/resources/images/libpalette/BookmarkCategory.svg
new file mode 100644
index 0000000..64555c0
--- /dev/null
+++ b/Sankore-3.1/resources/images/libpalette/BookmarkCategory.svg
@@ -0,0 +1,427 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-0.389 -9.981 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g id="XMLID_1_">
+ <path fill="none" stroke="#010101" stroke-miterlimit="10" d="M0.75,63.903"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="38.2178" y1="69.7495" x2="38.2178" y2="0.7495">
+ <stop offset="0" style="stop-color:#B7B6B7"/>
+ <stop offset="1" style="stop-color:#D9D9DE"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M75.687,17.069v-5.114c0-1.247-1.021-2.268-2.268-2.268h-42.67V3.75c0-1.657-1.344-3-3-3H3.75
+ c-1.657,0-3,1.343-3,3v60c0,3.313,1.116,6,2.772,6c1.657,0,2.657-2.682,3.228-6l5.71-44.432c0.159-1.237,1.31-2.249,2.557-2.249
+ H75.687"/>
+ <path fill="none" stroke="#010101" stroke-miterlimit="10" d="M0.75,63.903"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="45.7812" y1="69.7837" x2="45.7812" y2="17.0342">
+ <stop offset="0" style="stop-color:#ECECED"/>
+ <stop offset="1" style="stop-color:#FFFFFF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M3.493,69.703c1.657,0.001,2.66-2.679,3.235-5.997l5.76-44.425c0.161-1.237,1.312-2.248,2.559-2.246
+ l71.136,0.08c1.246,0.001,2.079,1.006,1.851,2.232l-7.891,42.213c-0.229,1.226-0.789,3.18-1.244,4.341c0,0-1.522,3.886-3.18,3.884
+ l-71.45-0.08L3.493,69.703z"/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="47.1133" y1="69.7495" x2="47.1133" y2="19.7071">
+ <stop offset="0" style="stop-color:#C7C8CC"/>
+ <stop offset="0.0179" style="stop-color:#C9CACE"/>
+ <stop offset="0.1426" style="stop-color:#D5D5DA"/>
+ <stop offset="0.2577" style="stop-color:#D9D9DE"/>
+ <stop offset="1" style="stop-color:#E6E5E9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M6.184,69.75c1.605,0,2.574-2.547,3.126-5.699l5.53-42.207c0.154-1.175,1.268-2.136,2.476-2.136
+ h68.896c1.208,0,2.016,0.953,1.795,2.118l-7.596,40.108c-0.22,1.164-0.761,3.021-1.2,4.124c0,0-1.47,3.692-3.075,3.692H6.935H6.184
+ z"/>
+ <g>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="3.6626" y1="43.4028" x2="75.8658" y2="43.4028">
+ <stop offset="0" style="stop-color:#838584"/>
+ <stop offset="0.0097" style="stop-color:#898C8B"/>
+ <stop offset="0.0381" style="stop-color:#9A9B9C"/>
+ <stop offset="0.0717" style="stop-color:#A6A8A9"/>
+ <stop offset="0.115" style="stop-color:#AFB0B1"/>
+ <stop offset="0.2025" style="stop-color:#B1B3B4"/>
+ <stop offset="0.4903" style="stop-color:#AEB0B1"/>
+ <stop offset="0.6804" style="stop-color:#A5A6A7"/>
+ <stop offset="0.8418" style="stop-color:#969898"/>
+ <stop offset="0.987" style="stop-color:#848786"/>
+ <stop offset="1" style="stop-color:#838584"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M3.663,69.047c0.725-0.279,1.739-1.881,2.349-5.424l5.705-44.401
+ c0.209-1.628,1.659-2.903,3.3-2.903h60.849v1.5H15.017c-0.871,0-1.701,0.73-1.813,1.594l-5.71,44.433
+ c-0.735,4.274-1.954,6.455-3.722,6.642L3.663,69.047z"/>
+ </g>
+ <path fill="none" stroke="#838584" stroke-width="1.5" stroke-miterlimit="10" d="M75.687,17.069v-5.114
+ c0-1.247-1.021-2.268-2.268-2.268h-42.67V3.75c0-1.657-1.344-3-3-3H3.75c-1.657,0-3,1.343-3,3v60c0,3.313,1.116,6,2.772,6"/>
+ <path fill="none" stroke="#838584" stroke-width="1.5" stroke-miterlimit="10" d="M75.819,17.069h10.333
+ c1.247,0,2.081,1.003,1.853,2.229l-7.842,42.223c-0.228,1.226-0.785,3.18-1.239,4.342c0,0-1.519,3.887-3.175,3.887H3.522"/>
+</g>
+<g>
+
+ <image width="158" height="158" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACjCAYAAADmbK6AAAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAANTFJREFUeNrsfU2zbMtxVWb11fC+
+ocNBMGGA3nt4QMiACBP+nGN+BowgICQ9ge0QwpJwyEjggBH/gynIlnDIAXiInp8mTDwgGD7PpLsr
+2bsqM2tlVe3d3ef2+br3tNTvntNfp3vv1WtlrszKOtHL5eXyRC6nl0PwcnkB48vl5dJdXr0cgnr5
+5e/++PX6z8fbz8JEzNu/TKwHieG6/XfR+xILZf15/bFdWB86Xj7/8b/48qcvR3y88Pv2gb/0B3+6
+ge6j7ZNveFHAcbmN6F8SKxjL3Q2MRP6M9eYVjBVtvIFxew0CMPIxGD9NzP+2B+h//+d/79MXML4H
+l7+9AnD9oB8pSDbQfZ0KpKiBEWlvvS21GKY8bgZAB18HvDQ7uvXP7R3wT9d7vwPE+vmP/tn7B853
+Eoy/9J0fvV5P7kesgFn/3YD49SK9jooGQmTCBsLtcfXRef3vEQCTHckecDwe7KMDLnot4CT6jgHz
+h+8JMN8ZMP7St3/0WlR+Vxn8cGO/pCDjirMKLZPUDVc7IKT6WGdBp0wEIDfGQwQa4MTVesKY58Ho
+v2/AXN/Xt7ef8zsOTH4XQKjx3ocruD7ZMHRS8KVGVQBLkGQF0qsehFyf2LOgMWB5Gg8HkBP8Lp7U
+SGDNgLbZmSj3r09a/80ei9Yn5SLn/O31989/8A6Ckp85CD9UIH6iGfAKCAAit2CtgAPYcLsVE5Py
+JADhwIL6csyN+Qx8DryCJOZ0RpvLm+hZkTuU5glbikjJ3EU+Xf/MtzfMrr9//if/9O9++gLGR7j8
+zW//8PV6sj98RbyB8GvUmI5PNaarxAWyvMOGnphYTAgJ9MCCYO1AzNmBzx4gMWpkvvxgi+Mu3lTA
+2gO0gnOLLwtb/rdnzpbPBox/4/d/uCUlH75ar+vJ/+QEBkphROYQH9Yf42MCG1Yobj4hY0w4AyFK
+sL12GsHHCLpejbf7TmeO9/acRUYh5xGkYuAEYP5EVMKfKyj5OYBwk2Perkxf+4LGhDMgJudAQ98o
+y/Zz1lwGJTlNQFiNbWDBCQARLDVEILZ4jwRe6AhlCEqJMWRa/4MgtachMCU3UG5xpTxDUPLTBeGf
+aExYMuOvbSBYWZFfnQGiG9lstk1lsVcQG6aQRx+DMBEFmWfhAEB9voOvs3Xqmw2A3D/kYuiKD3MY
+ioFzfdwCDzNgypbpGFtWUH7yX59RPPnkwPjXv/nHKscFhF81NjoVRqyJyREQiTnEh2rZDLLcsyGj
+JHcgZPJX3gcgN7z1xRejtBOfl+ksPRYdXHZjecQeMLOxZU3INyB+a/MqnwMo+akBcf3nH61n9Kuv
+NL3ogWhZ8+kMEDd4vaqJyEZmhSFRltOYnNS40JLqDoR0AMCkt8xAxzPnhkcUcgfckMwoSBmoUmgE
+phEjgjJXtt2A+LWnDkh+GiA0SZYvbgdtO/sr2FbAvR0QMT5MkLZ0bOjBXyLymDAJDyDsGdB+GcDX
+1WGcdeXgqEOcKEJBmQnlu2NQZEyRyJYGyk2+15jy0/UDfmtF65NlSX4iQPztKsnVjDmVuG6NDztp
+Fk1eErl9swtEy2DOyHIBaYIYE2PCmgA1EDIYOqTZcQc+lPuBHtnc8N2zIc3RkY4lEaDNBHfGlBZc
+VrYEpiSIKQsonyhLPioY/9oKxPUN/DYrENPGYAqvjRW/oCa2hWFJQYSGNiGQDoA4k2VkQ7bKC1kL
+mf+FVrtRlsRkhDtLx19fKhtvr5XVt7ykHJgdl+B9K0gFqDEDMKUlMeIFHK5MqU8USHQ26X6SLPko
+YPzFf/3HGwi/uJ7FzbL5amUhYYwTx8y53v42QBySFK+4NCC6JJ8DoadEIOsKvpNjZgsR6uNOBwe9
+jxMXS5KUKA2k5nsXhpNo78xAqQFleSwmOgWQ9b4nxZL8GECkyoZfSU5ULs8OxFnmbED0ygqb5cL8
+BXde0hEQy+vicy02NDbkYIlzACGD3PMEgFJsJf0b6HaPB50nrCgzw1EAjKli0IG5oGabB47PkZpV
+q/8jGVgyP0HZflAw/uI3fvB6PTlbfPgV9fFKm9aOPMcyn7KZIGRq+ltO/hdUWYXpIiAasCyxEWBD
++//JY8AIQosrpwBsqc3oKvIFOj1nS09WemAu9gBlSwRlhkRHQeosmV3BVbafACAfDIy/sAJx/WP/
+cGNEBvBt8nxSeT5N5DnVTFiZsKUsEkt85fXoAIiYqGB8OJPlhBVFAySAMB0AcOxlbECWC0+IB37w
+JDkA5oZDBGWWKN85suTGhqNsV0B+a2tT+8EjgZIfCogEQCwxlAquseIse+7jRG/uUsY0ILL6iOoT
+ToFor+UsB7Ls0UJkw5ZV0wSEPQN24JNOpvn42MuUICWUXqTXc8hPHJRZH5mtDU2RiyxpsWSWVvZR
+QFajXORrj1FK5AcFooPCuqgpJC1ad+7kud7Xx4mesBhltkYwOqULgGhg4302LIa7hEDSzccUC36t
+7BLXIAwR466xI3PDG5PoBk4JJUIBMhVpyc1yxJJHgBT5yfrrJw8NSH4IIBIAEVnxKGnZlWe9EROW
+EmBCZSUltgyW+xhxF4idvWOPOcFt2hHebG8ODmPAWtc2Fh3wM7XpgE0ZOsBFkDEh4xa4L4N0A0vG
+WFIh+VQAyQ8GxIEV2ROTPmnps+denhPI8yxOTHwHIPoXpWbJwi054h0QEnjt4Ekq5pjGqsw8RJwl
+MdKBVKD0J8iTzeNBG6iAslhEWg8MLImy/YQAyfcNRAIgzlixT1pE5TlxzJ47edaMYz9OPJlJfhkj
+BlkmzcpfDUkM11gwFHxGAI5lw6jPRz4jWjqt+oz9jC0r7kHJSo3GktliyayZ9x0BuTB/8hDd5Pwg
+QNxhxXNJi6HrUJ4ncWKtbROHdTCpJStTIPayPGHDIcMGEA4AjGXEq461xJSFQJYF1XkApT0uR5Ys
+0qyybcnNHiDj7fVx688/WXH8yX2vu0n3CUTqAqXJys1aabBKP3tpLoZWmIxYGW/zWcTbuShYOJaA
+aEnOkpOrgWjmJrc7kr/H+lVxu4jb72vMan+Ta7nRHIMLr1vSJmR/i5O+YXsv7BWk8f1UN55NJPRz
+1MeezKxvC3r8+OAaoOTH0b/gf2v99ffumxnTvQPRABflWUHob6AmLZCgjutXuJrM2oUz+In2epVx
+3ROk5iNeDESGMIAgZuQdEPYAdLAkpsTNprzoQg5A/x4MwEztHRoooTxp5r8HDpcC0j55RkdBl1is
+P37wG//pf3385GV6D4izWFFZwq0cjxVTtXnMyulqz5q0cDlQ6UCeX/UJC7ck6NQlK3tAxNQaQDg2
+T3hnhb9uI/Ihfjzu85Y+r+4XvTQJLUBziRaBmmCTVosbqy57GfGsZC9Vsof4canx573KdbpPRgRW
+9OTzxHQRK9LIim1hFcgzdfLclr90PYvNwA7Sfg0QXeq3L1NiX+CKDJhMyy1GbuYUjddGpRBq6BdS
+L5UiW4iQ6jt1ttRMj9tSCTDrqcn2hCET/F30R5mi4vgS3irXf/jr//F/fvxUZfqLe9LM4VexsUkV
+BK09bIgV+3UkqYHUTp6b2fbYIM8YJ+phRqvnpFnzhUBs+umW0whC1WsK4FOgqOQCwHhyY7vZbk+h
+AmTOvToNCsptaW6yqgEHQPI5QK6ALscBY/ETh3ZlLySktiT34/sCZLoBK35xPwho0qQA9A/HgRXp
+LCti0oKFYB79xNpDCB5kixP1wEqziy4A4siGrZ93BKEBsEHMshsPUdTS0uuAS62ht4yoAXMEJSdn
++vL+FHQtpj0CpBcH+hp+bRwhXGbBVtsvl4/5HhKadF/yHCW6LvNEVozJsi6+p31WzLDqD1kxyDP1
+8gzDIjAz4Zg17wEx4ePsttRANQMhAjAVv1Na8mFA6/6XCLNpwsdzYgh0J6B0NvXk39LjywC5PSiM
+LwC10YQPFcifuyU0t2bHdF9xIne9e3xg5zBqAlZ6z7Ai6WKr1BpkO3m2pQExTpTOvtkDInVADGyI
+fAwgjAA0V8gNU/9fQ1r8H8C5AyczghIyZ3aWBEDyASCD7aMxDsaPLtfR2Gdnx+pqbOx4U7lOt4wT
+ZxLdJy6jRGNXC5s8OCuWKbGXsKIevMwN/r08W5x4im+zfdsBdITMCTYTQ7dEYabUg7ChipraBplO
+CUR8/RnCRDTQHZzbMYKqlIUG/tgASHaV4T2GjMsq6nADix9xpaTLNbV5QuhFco0fv/trNwJkunmc
+OJdomkq0fRsprk0R8BXrM+k8K3ZJS2PouTzbTdJcpD5GbAu/kpuL7QHJ76KTZk2t5tgAyAq2Exji
+zN01JTS9VXdHYCaVTWPdwJIg25xcJeaSrT7kGbkO6tYlMz7wimqG/bsPDsZL40SmaY/AKNHSbhNj
+xe75KtEzJjtkxZP7jHN5RvaDWNNlKqEFExs2qEkylM0hjXYAJgheE1nnB8e4UPMf7wzR91gByvZa
+jZXYJq1VHPoPrTzuNfkYQ1pzcXzgTK4xzDnDjmaI34Id083leT+LHiWaL0tcsNpSTaI24PMcK1r2
+nDp5pt7CYJCoIUbU10oe1NUYNrBhA2Fqs/PKU07FjK/Xk99Wr/hzuT+1OHHGsAaGNvqvITPB/KkQ
+Q2LyAckINmiyKZG0PoGYzNw/O6Zby3NvdB9n0VDO6CQ6Wf8gDjMEVuQ2hqHw5h4rmtUTkxYm/LIw
+LvrD2JDMOgk2enlPiRgyGa8TBxAa+E4cvG5K8FuYxqK1bLd9kse9AZSWinjNG8qX3BqOAyANqRCV
+kC/LBbkWzVASkAeyY+76kFLrwfzgV//o7dgx3ZwVO6N7AGmXRdOuRDMPdk5gVw6AuzMrUkwXh6w5
+SHMDIgaIqdFqAGGrE0NlGsw6DwwhoRGIFZkaKFu7hjUPwxg/ACTGkCGpaQlNkOvAjtV92GXHeHoo
+zDOyZOZX/8P/+PhewXhN0tJPU0B/as/oph2J7hOXmUR7WKD4QFakY1aE8d5YAqOYNcPCLwSiYeiU
+WsdLoghCComv+U7zmNEQkvqWCgBl8D39Rc8Dsq4QgvJrPCc8Y0eZsGP9u6hQQaq3Gz9+G7lON2fF
+HUtnBG6MF2dZdP+6vURzlH1Mc+qHk1qD3WFFAlbEBdndt8i6eyRKOchyYEPo3o0/e6FmaBlrVZeW
+YGNfmn35XgWW9Oc26eWWjNSPJf4ZUa4hu24nCtjRrB6CzNqbOSQML4hSXR/7wV3ZMd0yVhzjxfYV
+7C0dHJDNI0t6Fn0o0TFxQQJ14LqUTlgRmAflvlmEyZ7LsNogAtG6yltTV++HE5b4FF8SrpoMmaOD
+s3/Ai3Kw1L83AWRqRRYoQzV27I81Mm9gR2rNLH2f+nDaolRb7fp374sZr40VoSnKvptdvAi4w3gR
+lNqN7iOJxsSFJ4kLc7dYr2NFAqZzVoTCcyhaUDDCfWsOBCIHGzLkN9yqemNjI6xuJARm17hL4D0O
+gPSkhqBI3/ay2Swi6pMZJpqyo/uOE6k2JGbvSR2keru8/pU7sGO6ZQbN8z7JQaWTxDukb9nv40V4
+s5hFQyPgING1esixvNiz74wVQb6bPIfSoE6fkAGI0VTvplDw2AyRUiKQ7eZ1B3zA9m+QWPn4vhoR
+e9ODPSr1U6nqsePJbJV5Zn1Gqvvnp7iy8U7smO6DFWdJDCYvip4gr/mCeHHIortgkbsIQBAR/bxE
+LLhOWDEOqwfHuX5LOBEPjJgQk+y1XOvM6QHp/Y/QRcbF7E6tBSx1LAkRSjPvO15ipD3GCk1qq2sT
+h+1pBtLQRGYm1eGceqIY/LLtl9e/8u+vY8d0q1hxkrzQbvLSyXKKH7TFixRlomUqYHRzi0n7/rSj
+xCXGjiMrwqpZrDioPHNYNxJ1vDmSCUAIDasUitEJHB+KyxqSG5IUQgBi9pOPSVOK7RAhmUF2xMx6
+V6qN5WZZNfXHjIdzpVbP79yKGe8YK46e9inGbeHT9F9L0e1zBdcnU4wXTS7Q6O6zaLSHphKN+2iM
+G7XgyoGmfcqKpzCIPmz5AUAceh6hu6yvTWucCTINFiSuy45lzLZ+RWETFiUGimSBzJobO+5J9dbt
+tJdVY9yILCn9ygqmD/7+FbFjuhkrjpWXEFq06arHycswIQncbBY5G5PaN1Tmq036tSpxzwzM0j1F
+oTZnR0c3IwUy0EMHRFjZFwBovRHscoxdZjoRow3GwiUOEqon3E6igzSyY9hkswXCEt2JPan2GeXH
+0dh4DtpvW5vZ77wtM74tK04rL3xZqDlNXoagcOcu44g8iRf3mjimEs1ILhyaLsZWTR5Ynzl6mNwW
+tpCvW0nNzoEpBH0XOtlz3JnQBApjwhQzM7d6iOdSPSQw83iqGuDdY2VCGH0SMzF/rwfjXVlxtHWu
+jwuYzgWYsIGks2Wbzc7NAurpkvvZDtyVhWgEWYgzxSOjkRXjfB4eeiIVdHXoQEIWxJbuypa4GCh6
+0SjXEmw+IezDbPVuHMOCUt19ys6GmMeNzDMV3NnOONLt6y9//zKpTvcVK+7ia2LrHFZe0ICF555m
+Mam0+uqpeweDlvfxYuiplMkHkthd1MI4MvlMk+Zc7v5N4EOm1NZtYezIQ98aWUwZdmfYQCmDmSq2
+ejYeu+4zT+LGMVGE41jr1dPzEsgijaf7Yqm+6USJS0Fqtg5+8+IHlP0DNOxIyvE1DnYTYN6ZAtZX
+jIii600ziW6xovTxQ8BMtH5S8gy7eoVJF/vbctMOkLhMAGm8259zkGoUha7/ZPZ5w3EZzodY91Vn
+fodzxLtslEiul+m3SVz4jvelnUnDPPmmpJ5g+2fyPIbc7cmQmW82sYT1tEsn0WEUD0OChMDnGSCp
+NFhsTQfeLAF1Y4bxDikmsVY9CREMjDILRZTD75zsnhveOzf9g3FU3+y14PfX/+B7f/bxtcx408Rl
+9jGP5hPu4VY6wnNb59IXODjg3LMGfOnbfuXcOQJIjNLZm2ANYv4AuytEk7v57SnsDsJh7zeONgpz
+i1lGqW4y3Fk8+0nMFV5yeFZ/HoSnyeIGxH/14DLNt3jsbAO+i7P26xl6eqRnzEKTMmYEYAQPGvFE
+Xfs4lPvQ9baHphbFCneTwwMjye7x5FjzooO5uWeP6+nugLj4bz5kzPhQGL+cFi9+ceG9x0ofjvUx
+E5rfMeDEnkd/Xuqk2GvyvH9I+OD9jlaL7H9Z+V7P1wdfPiPV6baWzntxuRu78OTXrvbzlmDgR/+W
+H5t9H52T6vRg8eITush9ve7ORuaycx+1KbNnHyvyvI7FXS7pXQOZXHqf3O2E4KYEzZOU4bUGlBHu
+pMG2H7ROoGWcQOuoFJm9PxlixfFh+3UPucOxuwNoZeeJr7/0vT/76BCMt5RouZ8Xufhl863gLDj1
+kONc7cm/uAMBbudnm0nmNk9R7ygztOv/MmyZISRhT0B4GzL92zw/SN3oZTB/rj558nbHFTeKPcyq
+04NKdLfXST5CGUJBA2+5Ieqt8hPekgEF/0Snjzzs/dwcy7AFL7BiwViumMvrh85Zobfdlre7fPC7
+TfoU3HODYY/zdg8DziQeH9zUsn1bwocR5rdX/smm7WdeVe5dpq+idxlER1jGe2eyIcFqkHOvO4H3
+wds6eHI90Q1vbNNiJzqKO0Y7CeYG+qxs2UAZVRnYVHB/c7tDUPIduH0Uevl5koNjMz1IEq2krsP7
+rdg03ZD0LruvdmDLnnMvkw/lt3FErs0SDo0R3JKC/lS5nMoVCYhvbdGeluNzyj3ZdqeiwHD+5A2Q
+TohUfm1XqcwpDk4lV4FdDcJbkPAfGXFCnZBIoEmRQa2EJLyyb98B30DuSDb8bd4H5TLtOHj4BGbY
+gUx2mIj9w/HQiyg0ti3h8cwSAbPoFb/BewwtnYS17c9kkLzcOoRiflJbhaRT+zZDO2tImHW/FdVl
+qTJt8aL/p/2MrDhKNBwneD81OeIWufaJkUgXRsyUpwFJwxl4ygJHLHc7eeVdWdJjl+WDX/7ujz96
+KDDKXbPd5eyrNcAsE5KzTRy5O6Ay2WdPuuxAZAp+3PCnnXCN0QhAU9gxIztqTOiZjGKqgdBAKQ7K
+TMiMhkaNJ9t2Q3afJ1n1TzV9p34T9I4cCXbdwmPRx/XS8nJkQSsaSHfAOOw3J7Jzfnf9xlf3Y3Yz
+vu2ztsHkmaC8ImFpWob+Oiguo1TXdifxCW96hrjPJMu50ySG9bjrAQ0LusUwXiS2Lg6U1qFP0LK1
+AWxrgKj7H2wbjee6qpYNw22TrTGpEwkJUA/EnhW7L5dMJVogltj+6EbTzGNsKV3so/ZR0l0Q6JzS
+HJxjvtAmTbfMpHvQMSSFGfJOaRnyRMb1CzrpEBmaI2QeCuT9SBxT5YgBYMg9qbZcUTyJ6dmRTIYD
+Q6IE5/aDBov6qwaUOTshToDYsqImt/hBuGyx1km0BFAO+7x1ycu4vzXGyOGRQ6zPe+2rl/kgN5fp
+3m/TWAuNYsGvMVolvuZi/S5ylj4YCvYJZtQRIIOsCNrA6Am2DSJlSEV7qcYgLqP15zcfAtIyZ/MU
+DWQCqGt2Y5PdAYj1uc5sIgQbm7eIIPiVYV+Y7nMLxpUS1ipJDpZN2Fk4ZNIy7rvpB3F7TOrtsgcB
+YzyZssj8DaB/l8fkROYxDyQ5HIHaAaTuRt8xpOcCXT6JUu2PzYLe9MiOvs9ejQkxg54B0t5bBhbE
+K1z0yxt+H4EI8a4DccaKLab01L73FxGkGfyqupeRHZt27LIgOVMAM2OyN0tg5ZgdX90ya+GDnwPl
+sB+U1p9dlgpK3Y6t7yHTg5ILa25ngMvGlouFj9CUmKl2JmuHcQ04dUWch5/tTdnQCQsK7T8cGXfD
+wHrPera3tSrbH92+aGXJqqGPnfN1N5pKJkuW2gSmgyYltidiqNgcAZEuBuyAaElLl0E3Y7LzB+DL
+Q21qsAPEgIXqgfFi30RbzkWXFYnFltJ7jez2vCnXnv/46qbESNMuEP+cmCjMHm8Z16vh7ooiixsT
+pjXihVpri68OQvxCCFsIWz3OEq5qjlG+GMVGYyY/XxvNpLKkQLJOkDCi4QpBXtZ/y6L2epp5BkiH
+QxZNiSpCvE1MdjY9ByeGRiD6bqhOetRkOhNm41QNwqwEkKNEZ7C9uSmVK8tRvCh9vDhsA9twv9D5
+DqHbx4zUvDAM4PCDS4wZpTeY+yTmKG5McDJwM/CZVGNdQwRyV/FvO0Za9aS3WKHJpT9Pyl57oKP+
+2hnjRKhwGhG5TEMRBpwkleqsdzLGrT0Qm1OOIEaPKIAWcjWJKcueRFMw4sV94YkTJL1FxmPdYbvt
+9Zf+4E8/ehDTO5bJZJrEYAbLEnf4riDL5maHqirGjYIGLIR17jfWAHpWtpNZImPZZz3ejP5kYRuH
+as67gIwAiKCsicfcf7f7BxBCJm7SjEDsKz+NFTEJE7dz+sSld8ZRolmG5oxC7/oll5j8SG98iyUv
+E8rfgPj1e5XpWSltPVHbBueT5L7Gh2Ckum9XT34334SqsIa4kaNUi8pz0lAxa0zA4CWySVqV5CrO
+oi8ev811HJRKsMu1CvqGgrJ+pZ5ak+yKoEbq5XnohDAJzQAJlRyy59AAHpIMO6nmLk6M8iz6o/3E
+FDkfE8QWUaL7s0CwmWcSDfGidEzUxYsC8eK4lu4+mLGLw4dgI6O9wA4gin6MqFOvr8aBPdxvnEq1
+Zpfk8Q56fd4/GAph2W7PlhlLkGuP0aTFY4bVCUPSG9BazIopsON4zY0FgzFpbLhIBGK3v68D0R+E
+lhMmOGdY0V5cuqoLxqco0RYvyqSKxXr8l4nzmO87gemzDsgn6hHhGjeeFIXSpkLUIgVzqL5sUr3S
+EdmoRXbaEt3QvH7j+6wa6sc1kenYkfqEQ4dGFFRUruOSsNtGsFLD81xn7QSGLBpcB0LYKSosKbag
+X6GZx66r6eFD3zWHzFj5RUYmy4RxoQTrSToryp7erLA9VoxxfJ9FWw6QQ6YVJXq75U0fL8q+Mry6
+J3lWQLAHb1KcERLYk0605OvfLLN4TK2OpDqVDJVcqsWV18t69W+uP2xTQzZi8sV57WuitXuRsmIU
+5Loc9URtIarYvjQ1yQ6A3DYT3x6e/K2sTCb1FYna3oMgGnzQdiXomYp/mde3lAldnwkQCTvICf1A
+aCLKjbxDXCiBFRv5ZggFQslRuh6gHYkGO0d2Stf3GzOKoUPjxtMkbpRKWf5IHTpfnruUPe3Eepes
+wkwW7nFlMQJPRkTdPfEbMY50JpayClStm2rMbI+ROkFtk+tUbMytCCTJzpfVmsuXoQFSJ4ywBXHS
+Bps2pqxmZ/j4CcOP3doBW2fuGALNgJhjWJKtExPluQFU4zjxKs6iX7gpK4ZSVDS68zyLbpZOZZ3m
+plSWlYeRaTXxYqsEu/+XzIibSLWodIoS2Gki1WiACyQy59jRkxGbnCQ4FgXkeg3gCiC1zyECMld1
+1rnsuguCJBtSbMEZgLJL5MtfXKZCxRJaugCE2DieoZcC6oY0ADHEjd5IJFj6y2CL8+Ws6MDMXfuY
+qESLxf7i4ZFLtDyE6d0nLGIDp02qtX3F4saZVLNJdWVHxRlPDXAs/zk7Fld8O4gVvElhtqT6mIQ9
+RRZU6fdmWZnlVGfenAGkoLlegLhotNmDMttcHDXZ+ajFTnJYrYAenTTHpmveRe/0CIgUMm+2BEuP
+6GK+Yiv/NFaUgRVjaVUia0szuocsGqy0h5PpPanessJk6JpINXBpa50T6/nhmkRUei0/D+zo/NJA
+pPhsnUKJWCuKUa4xfpwAchPmNTB0YmFV5ax/dXu9pZo50uYyQcAODcRjm9XY35IJ2hfRyoN1CYLp
+zB4QwVkgifJsEr7ZYW9C13hzFYaq0A4rHiUu1Em0ZHk4ZtyV6i0+05T2pAjYkWpSg9X7CznYxAfs
+CLPZzHcsiQ8kMwnlut6grmKJH6eALG81i81mD7Ktn0tsWJPZcTjzWhiNhh01kVYqgO71VhqRIQaU
+uNx1BCLUgVrGDQybY9uuJzHRTxxZcWbnBYM8tgti1ethrJ2zUr1JGmbVNe6up9X2LSksVI/uorXo
+VHtS+Bw7li1qtZZLyo4u15W5HLQw+obADK9fmAkgrba8hQCpJaKaUwVQelTmwOSxB3C3OXUAIIUO
+b2GC1kbp1mGPQERFhzjRu3QW4O9srWNQ5eHw2o0V7fcMjMvKsEsLg1r2bgxdmPiBwcg7Um0H5JJE
+ZgPSjB3FOxwqIOusmMqAiz4zJbNuLCtm+7u0eLlnZWjIlI8AKYUhKw+7bHNYqspcOiIs/Y/APKoy
+xHU+gqXUhgQDYW6rBHPwEVvVxlrRCIHo3nuxnqTFiWD/YNKCrQ/oK+7Hihex4k5Dzb3HjEXKDACt
+RhoN8DGROc+OfWYNvqNowlDYklP96CjX5gttL77UiexyUjcCAal5iiTbbGVjSCqjZstLVGepcHUA
+pXVLRWCW98H5khoWdmbDFG0EYWNDsHcAJBluGoFYqzktTgS/HEkE5bn3FbsMesKKhKyIicv6+p+v
+//zFg4KxB2WtVlXTY6nHucgnq8+3neSyo8A17FgAp75jq5IEud5eybPrLn7cAshFE5gekKw8Zw6m
+7mBGPUvKPiixmb2CM2QtPK7OY+6iMQF97EA4YUNkNkMZUw/EmrAsXZyYsa8pyrM3BjO1td9nWDHY
+OZkCQ3/2v3/v1/7woRslDhOZK9hxjWt0z5OeHcmluW2K08s1tWYGtHverI97tQPIcuRSLEKqMW4s
+WbzGypLa9mETOLWhtgfmIE+zwQMgjA7A8h7sbUUQUlg2KkBoLWu2GBGBmKERYvuiL5BZT+TZy5kZ
+8pnOV9yNFTtW3LW27p0ZzyUyaPMcsGOfWRf6Sla1g2RmJte5jjwsNLmooVRYTmpCc5oBUuuEpdTC
+DGuwnCXrx8piNb/ClPVuIlsRaAGZ/wod03v997aCUKME6iWY+kYFiMmm9s05IMYMXeRAnjFpkYmv
+OIsVO1YkoQesTc/YUSsf5aatbntSMKDNc8SOlGt8x95AkWyGMaNcS5TrFj9Wu8cTGq7+Y2XeniF1
+KzzzIYvrrvucCbBkDR916akyJenyAoYVn9wvWoJx0jKZgdf1yfaPE/QCJS6AEupkubad1UINqzQv
+FBMbXLfTx4njpAxsBIV125amWZPSDitqa9rjMOMt2NFbbrQqU3YJ2JFr7ZBhYyWMH3Pm+qJmL1EL
+D9+o5ZMU9K/aUpuZbJP+MQelV1d8cYilz21/Bt5riZ41TXRzmsJ0EoogxIwbZdlKh4uC5A1FC8ca
+g8lblqitrRFor4sNydInLUtXbbG69zWs+KBgHG2eY3bMWpSx5S3szWNUYsG0L9eUCfcm0pSUqVZS
+rN1mveGNAjKxxbD1byZdPbpR69LJtrIk9aBs7T4ATOv+8cLzFTlf7ENua6BlTBaQDQn6D73Jlk1W
+J9JMLkfWS+rMpu1hBj6aybPGkTg3rXX3g6+IrHi0IOuv1utP6Z5HKIPNU7LYnh37zPpETabr5msp
+yDX50oRRrsvGI9qTaPfMAEn6t0sMqTZhZpumwHUNgLaF6SaabAzSg9LtnA6Yik5c0nOh6S2DZ0c7
+IJQdNkx91UQpasFKj8dFHRAnceJMnhdt+ghJSzelzUu/aqgvec6O6f/9/m9tQPz+g0k1tNAvubUf
+4YIttljFFutJazp1udYDlSRLCOD1zGAzKR7g8mVoLdtCFtzDaqvtcYv7Fr62uRjFGQ3ljSlxUT6U
+brO4BRIWX3VXGm6zRVpt4AQ2JPgKf24d6LhAy55YHmrxIUw0c4k11uyBOOvBkLgUdVeeqfmLvTw7
+K64/bOT32aPJ9Og3tmAtazfL9m0p++e1Yox/aTMz7cm1N3eLePxIkNBktQ2TSb8yJFeG3EK68sTs
+Rnrlty3uLF6kbuxcVhisjHxq3USBKTVTYa+SjJtIkVwxkVfAxWMIQo1u8tg1E2RaZIwPpbNvqJNm
+gS/sHhCx1Lh08izBr5d+fl+p+Kyv/xf/5xu//u8eH4yaWee2d3R1pbVj5o0W+E4mzprMsK+RinK9
+lUaU6YruWtJjgFzBVkqCM0Cyrowy24fd9iljU4Js2wQp1hLalhW9spNR9zzkkASoMVk6L7hXYNhb
+MuYow/66KbYyhmW36gjY+ph6XDmsABhkmfsMHOJB8yj3gBhBLB4nsojg+m5fKIaVn/X5b0jCCtFH
+B2OXzEBVJusqkgK3lsxUiSsxYNlwVAEpY/y4Ai2XnBkS5gGQ4utalPHgjbRWW40jgSUrJUv1ERGU
+pBm2grLf4sxohCetYmHn0klqvTM01TtzrJyXycez4JrukQ0J128F+ybGiDtAxNlCi7JcW3gre9mz
+ybPXnvIFYHyQJCb4jmMyU6smO3Jt2XXyTIF97eaiPfwloVnhUGE5AlIwqSFRp0ZLgFJ7HGtDOc1Y
+svqICspF34vPbdr2A6S2nhi3T0uTvoCjecdxSFNbCG+xKEGGnDsQwgwgZc9WLuSxalPjVroAiGPC
+MvS94YrMiTxLW1E8v5T+hYdKYga5mSUzVJd7LriYB6YZWO6RsWSV67e1xjXZFwBhUpNzOFEa9Ldv
+c27emIdBVodtj/XEohz0N3rLUi0cebP9rMnKAsO5MUFZymcbr/iYNomsJE0lXl3qa8JEifr3c7cE
+JjefMLAhNQ/xrkAUBWIoGWaSfvCVZ13b3zJ51qTv8zdZPnsyMn2QzLhca3RYDpPGj5JroCc2eynI
+de0c5pUhy5cv1Z4U7hkSbR9qQbit/dMuHNHWr1XSkxVX2DZf4Wqku/jWLhwdpYKMaRWQNOyvXVx+
+DrVqscEDUaLNCxoYkEJJR2QyrRZbxLXhIcSHsEI1jm68AIjQ27YXJ1rJ0UdPa7L62V9+8ze/9/TA
+OCQzvqzV5ZpUwz1+3CRTqzPcx49XAnKpdexaWAHZ9npPrdjUn3dAyXEr9wBMS0AWTVVwI0jOPho2
+TP5qDagNZcOKyg6ACCawALvpokQzNmRoAXsrIO7EiSbP4IPTpQnMg8WNKNfGIrpSYJOjbS/m3fgR
+E5oLAUl9UmNeUdZxJNk7c8RykjoQQLvBtTPMUuUCSh9sugPMxnDi82lm38hl59j0c25mAMxhGpiE
+6RAc2sqaf4jAyRLm6/dAFIgRD4GYBaPWMU4socwFg5S98fih48Y+kLchD0P8mGP8SNg86lSQ4/0x
+hoRZxu3gVSMa46W2OVAOsSH5uNpcg01/MdYTup2sNxBbWty3CE4radu4HFz9ccvMIG+NsQLGdfmj
+uQveFlgRmGEkMx4L0S6KDD4iBueXMWJo0yjH6+cS4kQD4ufr+f3sSVk7l2TXJX7MdSXelon+XCvH
+J+tvJHEP8AKGpKS2Tm3AZR8QOrAk1ebb7OtadOmpFclx8z9Nu6mNbi9LAHon25gzdIgdlQI75qNJ
+D6T4qnoYH01hvAhWoFzuY2ITy4jQTBvsm3NAFPhDlrAsAMTcVmn/9C+/+RvfuwaMDy7VLtdd/FgD
+3kw7CQ1dAkiqgCxPPHnSUpOm1GI/H2/L2hOpABCdRe2gbCWgkOhUaWdq+35I0+p8VX9EL9XSEpkA
+orCFXdfRQ3EccxsdE2JDom6UCk6XaD4ijrmK0kwwsFzlf5KwuJ0vF2x4EdYHPZZUo92T2/i1sFvZ
+JtfWFOrGrm/+M0o2wxGxGmqzfrzEK9i5rIVnPy3+PJWaZr1UCV9MwsULzXUbtjDyJqj0Jf9rY8hU
+kl2Cc9i5yKU4S7CG6mIrz57bppkZ2BA7u+3tbS1mP4+G9jlGJABied7SJSyaxf/Vlklfk8A8+sUW
+0OvYnJLh9gmNpd0hww4jTIAhreCxeYA6KeJUpXh7luggxMKSohUXFu8Bs5YYXoApfemgftN7xuzm
+wtVVCMxna9GBESlsCDlsy9Y6r8N+lz5uCAZ7D5JMgQ1DVcVrzRwKy3MgaqEgADFDb+TStnPafv/s
+//6b3/z+XcD4KFI9tJrpElK5AJDaRzxKNtkKGK1lb5UVjyOzLoey5dvBtmmT6TtQJp+gsg9MCwwz
+wdKDK+PohcZ9bI4AyNLG0/UgpC5eZGkDPDPIcjfpPhQBM/ZLRmk+BOJmdO916cy+hMPlF77xg7+z
+/vOfH4shkxZvk/YQ2mC6UxnlUIu6p2r50Mm6BS0BSSXmtNt0PUryZYW1kK2vQbWEV8GT/H5bXeod
+2tymODEct8qoCkwoNsP78WkSR8d7v7F2HEE8BWDX94i9h5igGEQSSDWyITTyCoy2Hu2bHSDmHoj1
+rf75yor/+JLzvifTj8qOXULjGbYx5HbmtxjyVWTIIsqbD7m1s6Q2MIpCt08znZ0lyZcxJLf4GMrL
+Jt8GOB17YUzkjCkITrGu2tCNsztCWHYbbdvr4j4r2DnjLAid2UT9pkpqpOocHIEkxQCm8yfb5uyh
+yycAsdhtFwBxvr7ikgTmKSQyIaFp/lrwIGWe1Ph84Oz15y6x2QqO2K+cfXml1Np0Ju9MheZYODEi
+4FHm3LzBpTmavqurQKKxV4fWkzg8xnzPpZUCNZkCzzJrE69t9Rb6DskTLRhdX17jDSQpcdF/HjJm
+PSJuJSEQl9FLDEBcr5/nSmr0Nsz4NBKaMwwpypCnypCbZHsg1yc2jUMaS9pXenvOm6rSW4JTG9F0
+OZftiJd9lUFjy6CpyJpKf0vsqnVCXA7FmcyqHygT2W/W42gsmGwUH8itrY2mzrLp2dBr4eDcwI6y
+1vgQFnLtAHG79acrsX3/FmB8VKm+BJBJAUnKkDnVdi9MbHSUSpVtG2xbXUupi1nVtqwNdwMo297S
+sIGqmfU87LkewNkFirN9Hncx2e1sPIAPYsnQ3W1SzHQZCLlLUnpZnmXMAi74ARANP5f7qkd3PnYi
+s5fUcCOguo56zVpsmsSQ2KhtkzQrSdTyHd/Ban1Gsp4FtpG09c6TxZRwsHLdL6t259gUM8tWZjbN
+W/iuk0DSTe5UZLcyYILt27wtrwNhq3fHBKX1SkY2tPfRAxEqK3tA3C5/vrLiP7nmM5+T6SfBjj1D
+sibEOjea87ZjZKqAAtneGJJMtnuWDDsdrK+a64SorUFnYEryXVw92aHImDaegCTziEjZAeqBtzPd
+viS55PLAgG8QgBMm1GMoYfPiAzbsZXkGRGn2jXRdRlez4kVWw1NiR2TI8rPPBG3Wj915liXJBjtw
+ZLVqA7XuLrBzJLX1pzPGNJZt67PEM0Q3o3nfXGQvfFts6X9PaiebUL8/ywyAxp48AeFUki9gw534
+MDS6wJfnala8NIF5MuyIDGnGeG09q10MGEeWXsKsTYozliRdLyW2uYatncrQ/lBjSv89u00zY0x9
+/ewA4q7O3CR+0ixCQty5ILjcgJT9CDaGnAEQG9lCTDgBITrcR2y4Ex/uAfFOrHipCfvk2NFZsjGk
+m+MQR/rak44l/TEUJ0BEphxNc4Lt5AYD3FgTD+xp5zhf4jMOoBvBNzAgsiDGhAT2UA9CqOYM3uHZ
++JCma3nuxIrXWDtPih37WnbW3m+28SjbN1sXRdsiLoslrXx3IpvitMOUvl1vZEsHpsCYyPpmhkrL
+m7YR9vWdOxIZlbrBtviHEIDU1Z/lPAi9+WTGhhnY0MB+AMQ7s+LFzKjsuAHxm08NkEdxJLKk7XlZ
+f2+x3glJEpjSgsYZW3opUFlTf2eaJy7X1QKDtM/vl0kMSTMWZKzQXApC8iakjg33ZPkmrLhbgXmq
+VZmjONIyuuydYN77sjXqkhYsqvStv9YO8rK4XBYce6juxJagWyVn6VbdSei2tlpPFTRdeWh/Syfa
+tt3fz13xseG1BHrR9dVzrLTUalTbvaA8NLeJ877s4I2ubCwbb2YSYEMhaIitXOuyLGj/HKjnnS/X
+VmCepFwH2a7g9H4ITG6KLoN0L2qWp2RbJilTCu5sJYYR26M3MCZuectWO+E4/W4/RmTinW04Jqv6
+ZbKof8qAPiEWtqC3mBCZsL1OSFCuZUPDxX+5ptryVjL9HOR6L7kxCyZKd7WBEhwI3YiSMNEJB4l9
+OULbwpUaOKnzGPnKgy0Ht4XBWd0ORj0Au+eJjaGTC0EI20jvxYY3leerZfo5yHXPkoSTvjrpLou+
+ct2n1Gdeg3z/jAQlvHW+QDt2fY0m57WxoV4zaQOELsbP0ECRu2u4XRfulyvB61mXuS046ySYBae5
+FXtGfl6vtakB5Nj3f8nBN3RJzthsfh6Iby3Pd5XpZyHXoaSGGXeVbsKsW+W7bHsl1vKYWyKwseVS
+zWuTcbMAg5cobTYodyVA4W7KU1+jlkn/GA5lzK2s6IyYaNxlYKGwmD9aNGR16xpXIhNilkxEl7Lh
+zeT5zjL93OR6Jt0m3+y4kCDJrNl36g5USi2Tbl4in/cRrz3Kcv4mA1+MHylM+hKKrXgR/28FwpvK
+851l+rnJ9Uy6qclhkG89nyX7Ngn3hU0q49v1552c/0yz007WcZLDddeYYIvJrknvz0B+/b2ADC/k
+44ulfI4wxaTJ8QJbA+fLJPle5PltZfpZyfVMuo0pUb6hru0SbhtgmIxbQm3ZuL3uAuwJ0/zlrt/2
+YSRex3oD+9l+4kK0x4KYmNyRCe9Fnt9app+zXB+Z5piBMxFaLxwlO4Lz2lYxa2HLcl11JkMSbeBb
+hok8zTrqAXiBTfMoQLwJGN8VQM5AOQIzRG9DnHhK3O8n3eLQCw92HuNDaQsUB+B1AJwz4I1AeK9A
+vBkY3yVAXgpMomnZmY8O9CkdH+4DsE1zGayG3yMA7y1huVkC8y4kNOcYyrw9THp8AZUmP7kkA6wj
+PPaLf6U1a1sAVq80udZhoDtFQmlXyn6l9l4g/xAJvuStLjdPWG6dwDz7hObqpMepriU/E/YMbiJf
+ZN4cPiBswzKhVBG6S2vQ05Dnm8v0uyrXV8kLM9/7H7t/4D0KEO8FjO8rIC+Og44AOxml/MiXBwPi
+vYHxBZDvxOVBgXjTBGYnofnmfQe9L5d3A4j3CsYXQL4A8cnI9ESyv7JeX7/I9gsQHxWML3HkswDh
+pl4/fSwgPjgYXwD5woaPFjO+xJEvQHzSzPgSR74A8cmB8UW23+/48EmC8QWQ7zcbPjkwvsj2+8uG
+TxKML6B8P9nwSYPxRbrfLzZ8FmB8Ycn3B4TPAowvoHw/QPiswPgCyncbhM8SjC+gfDdB+KzBOAEl
+vSfAxEVR7wwI3wkwvkfAfOdY8J0G4zsIzHeaBd8bMD5TYPbrkt8LAL5XYDwAJj0iQGcL4t878L3X
+YLwCoG8L1nPTF9574L2A8X7A+gK2l8vL5V27/H8BBgDgfdIbsqwnogAAAABJRU5ErkJggg==" transform="matrix(0.24 0 0 0.24 26.5088 25.7793)">
+ </image>
+ <g>
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="42.7695" y1="48.229" x2="37.5361" y2="57.6215">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M43.986,53.023c-0.88-0.377-2.303-1.005-2.93-1.8c-0.461-0.545-0.419-0.545-1.131-0.796
+ c-0.587-0.167-0.963-0.502-1.633-0.585c-0.502-0.043-2.51-0.545-2.386,0.166l-0.042-0.166c-0.25,0.795-0.628,1.464-1.046,2.218
+ c-0.294,0.544-0.209,0.712-0.042,1.298c0.293,1.088,0.419,1.172,1.298,1.632c2.511,1.381-0.292,5.4,1.801,6.571
+ c0.333,0.21,0.752,0.336,1.087,0.461c0.419-0.586,0.628-0.963,1.214-1.339c0.377-0.21,0.629-0.293,0.88-0.671
+ c0.333-0.417,0.209-0.837,0.418-1.255c0.293-0.586,1.088-0.42,1.549-0.838c0.586-0.544,0.627-1.256,0.879-1.883
+ c0.293-0.67,1.172-1.004,1.423-1.634C45.619,53.567,44.613,53.274,43.986,53.023z"/>
+ <path fill="#FFFFFF" d="M52.106,36.908c0,0.418-0.503,0.67-0.293,1.046c0.419-0.503,0.712-0.754,1.382-0.837
+ c-0.168-0.502-0.712-0.837-0.837-1.339c-0.126-0.377,0-0.88-0.545-0.754l0.125,0.125c-0.627-0.125-0.335,0.671-0.21,0.964
+ C51.813,36.322,52.106,36.74,52.106,36.908z"/>
+ <path fill="#FFFFFF" d="M51.102,36.07c0.032,0.048,0.063,0.11,0.095,0.181c0.024-0.057,0.049-0.116,0.073-0.181H51.102z"/>
+ <path fill="#FFFFFF" d="M51.196,36.25c-0.161,0.354-0.357,0.595-0.429,0.992C51.497,37.608,51.399,36.73,51.196,36.25z"/>
+ <path fill="#FFFFFF" d="M48.758,32.261l0.083-0.126c-0.167,0.042-0.46,0.042-0.669,0.084c-0.294,0.921,0.669,1.047,1.214,0.628
+ C50.307,32.135,49.345,31.8,48.758,32.261z"/>
+ <path fill="#FFFFFF" d="M50.432,44.525c-0.078-0.039-0.084-0.042-0.156-0.077c-0.003,0.011-0.053,0.035-0.053,0.035
+ c0.116,0.033,0.195,0.078,0.243,0.134c0.003-0.004,0.006-0.005,0.009-0.007L50.432,44.525z"/>
+ <path fill="#FFFFFF" d="M54.708,28.046c-0.065-0.071-0.138-0.145-0.216-0.222C54.56,27.907,54.633,27.978,54.708,28.046z"/>
+ <path fill="#FFFFFF" d="M56.794,33.182c0.006-0.029,0.011-0.061,0.017-0.09c-0.047,0.003-0.094,0.007-0.142,0.007L56.794,33.182z"
+ />
+ <path fill="#FFFFFF" d="M50.264,44.441c0.005,0.003,0.008,0.005,0.012,0.007C50.277,44.445,50.273,44.441,50.264,44.441z"/>
+ <path fill="#FFFFFF" d="M50.426,44.652c0.021,0,0.045,0,0.066,0c-0.006-0.013-0.017-0.024-0.026-0.035
+ C50.44,44.632,50.377,44.658,50.426,44.652z"/>
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="37.5674" y1="35.9604" x2="28.103" y2="46.9596">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_6_)" d="M35.029,49.883l0.167,0.167c0.125-0.125-0.629-0.502-0.796-0.711
+ c-0.335-0.503-0.041-0.879,0.042-1.548C34.065,47.832,33.688,48,33.269,48c0.128-0.251,0.797-1.004,0.546-1.298
+ c-0.335-0.292-1.214,0.796-1.592,0.796c-0.209-0.712-0.418-1.926,0.127-2.512c0.335-0.376,1.13-0.628,1.591-0.461
+ c0.627,0.21,0.585,0.629,0.711,1.173c0.545-0.586,0.293-1.507,0.628-2.136c0.209-0.418,0.755-0.459,0.796-0.962l-0.085,0.084
+ c0.671-0.67,1.258-1.381,2.01-1.967c0.628-0.503,1.506-1.006,1.926-1.676c-0.544-0.083-1.048-0.041-0.587-0.711
+ c0.419-0.67,1.467-0.21,1.591-0.837c0.127-0.586-0.836-1.256-1.004-1.759c-0.168-0.418-0.335-0.962-0.42-1.423
+ c-0.208,0.21-0.334,0.502-0.543,0.712c-0.335-0.586-0.085-0.837-0.795-0.712c-0.419,0.042-0.837,0.335-0.963,0.753
+ c-0.166,0.503,0.167,1.048,0,1.55c-0.125,0.418-0.587,1.046-0.963,1.214c-0.125-0.46,0.251-0.921,0.126-1.381
+ c-0.712,0.041-0.921-0.335-1.466-0.67l0.168-0.084c-0.251,0.167-0.628-0.419-0.921-0.587c0.502-0.669,1.214-1.171,1.758-1.8
+ c0.419,0.796,1.089-1.13,1.424-1.465c0.25-0.293,1.173-0.585,1.424-0.167c0.291,0.502-0.419,1.046-0.67,1.382
+ c0.459,0,0.961,0.083,1.338,0.334c0.378-0.292,0.879-0.753,1.089-1.214c-0.335-0.208-0.629-0.418-0.879-0.712
+ c0.25-0.501,0.194-1.154-0.325-1.045c0.084-0.051,0.162-0.108,0.242-0.168c-0.964-0.293-1.298,0.335-1.09-0.837
+ c0.084-0.544,0.21-0.879,0.67-1.381l-0.125-0.042c0.251-0.251,0.46-0.586,0.628-0.879c-0.042,0-0.168,0-0.21,0
+ c0.042-0.183,0.003-0.333-0.098-0.456c-7.169,2.409-12.423,8.983-12.896,16.845c1.2-0.378,1.926,1.715,2.32,2.697
+ c-0.127-0.46-0.209-0.962-0.419-1.381c0.586,0.671,1.256,1.047,1.34,1.968c0.085,0.586-0.167,0.545,0.502,0.795
+ c0.503,0.168,1.047,0.125,1.507,0.336C32.601,48.251,34.023,50.092,35.029,49.883z"/>
+ <path fill="#FFFFFF" d="M47.753,29.331c0.083-0.167,0.754-0.292,0.964-0.335c-0.043-0.668-0.336-1.381-0.127-1.967
+ c0.101-0.301,0.337-0.69,0.607-0.974c-0.321-0.066-0.644-0.123-0.971-0.172l-0.351,0.044l0.33-0.047
+ c-0.922-0.138-1.866-0.21-2.828-0.21c-1.273,0-2.517,0.126-3.719,0.365c-0.143,0.358-0.353,0.826-0.353,0.826l0.112-0.017
+ c-0.407,0.688-1.621,0.729-1.661,1.565c0.629,0.083,1.299-0.168,1.926-0.042c0.503,0.795,0.711,1.423,0.252,2.302
+ c0.292,0.335,0.668,0.043,1.005,0.084c-0.086,0.711-0.754,1.255-0.461,2.051c0.083,0.294,0.292,0.962,0.418,1.213
+ c0.251,0.378,0.378,0.294,0.838,0.461c0.46-0.879,0.375-2.008,1.339-2.51c0.629-0.293,1.382-0.335,1.925-0.671
+ c0.377-0.25,1.047-0.752,1.047-1.255C48.046,29.75,47.627,29.666,47.753,29.331z"/>
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="55.1768" y1="40.2554" x2="59.9225" y2="54.7655">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_7_)" d="M55.146,28.374c0.021,0.026,0.04,0.052,0.058,0.078c-0.067-0.057-0.138-0.111-0.203-0.165
+ c-0.052-0.03-0.104-0.062-0.154-0.092c0.442,0.503,0.608,0.906,0.608,1.721c-0.251-0.084-0.459-0.167-0.668-0.292
+ c-0.253,0.879-0.378,1.548,0.082,2.385c-0.123,0.409-0.482,0.937-0.383,1.39c-0.238,0.474-0.488,1.237-0.369,1.707
+ c1.004-0.837,0.92,0.042,1.59,0.587c0.208-0.377,0.376-0.796,0.628-1.172c0.125-0.168,0.377-0.043,0.419-0.419
+ c0-0.293-0.378-0.336-0.419-0.544c-0.083-0.419,0.21-2.177,0.712-2.302c-0.08,0.598-0.124,1.233-0.235,1.835
+ c0.152-0.013,0.305-0.041,0.455-0.071c0.003,0.258-0.189,0.646,0.062,0.923c0.441,0.484,1.11-0.09,1.565,0.366
+ c-0.224,0.368-0.342,0.184-0.666,0.252c-0.36,0.075-0.4,0.235-0.543,0.619c-0.158-0.378-0.533-0.796-0.807-0.243
+ c-0.194,0.394,0.052,1.049-0.344,1.332c-0.335,0.239-1.232,0.334-1.489-0.034c-0.243-0.35-0.028-0.884-0.334-1.209
+ c-0.063,0.342-0.269,0.657-0.228,1.001c0.036,0.318,0.303,0.562,0.17,0.874c-0.272,0-0.617,0.02-0.819,0.185
+ c-0.167,0.135-0.171,0.392-0.428,0.493c-0.227,0.09-0.582-0.045-0.767,0.163c-0.091,0.101-0.11,0.48-0.162,0.622
+ c-0.233,0.029-0.521,0.057-0.729,0.144c0.095,0.507,0.824,0.659,0.777,1.246c-0.028,0.358-0.169,0.348-0.504,0.295
+ c-0.361-0.059-0.765-0.082-1.122-0.154c-0.013,0.745,0.426,1.229,0.041,1.982c0.132,0.062,0.247-0.038,0.361,0.011
+ c0.088,0.037,0.162,0.146,0.218,0.169c0.228,0.09,0.404,0.137,0.67,0.092c0.28-0.048,0.396-0.13,0.547-0.342
+ c0.054-0.076-0.016-0.215,0.068-0.308c0.08-0.086,0.214-0.074,0.307-0.148c0.365-0.281,0.346-0.969,0.719-1.213
+ c0.062-0.038,0.465-0.024,0.62-0.082c0.221-0.082,0.337-0.053,0.495-0.214c0.124,0.476,0.399,0.861,0.76,1.21
+ c0.359,0.349,0.818,0.714,0.046,0.845c0.247,0.33,0.323,0.448,0.614,0.067c0.215-0.283,0.339-0.564,0.602-0.788
+ c-0.479-0.45-0.898-1.005-1.243-1.582c0.501-0.493,1.635,1.117,1.656,1.541c0.024,0.464-0.232,0.661,0.241,0.878
+ c0.641,0.292,0.413-0.452,0.436-0.918c0.384,0.213,0.77-0.176,1.125-0.046c0.182,0.065,0.213,0.283,0.334,0.411
+ c0.192,0.206,0.123,0.16,0.333,0.22c0.425,0.122,0.624,0.003,0.756,0.543c0.08,0.329,0.191,0.762,0.053,1.088
+ c-0.206,0.483-0.866,1.12-1.344,1.29c-0.493,0.177-0.941-0.228-1.384-0.413c-0.709-0.296-1.421-0.555-2.112-0.93
+ c-0.679-0.366-0.541-0.109-1.042,0.146c-0.53,0.271-1.057,0.683-1.624,0.87c-0.762,0.254-1.834,0.379-2.659,0.377
+ c0.192,0.31-0.392,0.864-0.562,1.171c-0.672,1.047-1.047,1.633-0.713,2.889c0.168,0.628,0.378,1.172,0.713,1.716
+ c0.167,0.251,0.292,0.628,0.585,0.796c0.376,0.293,0.336,0.125,0.838-0.043c0.544-0.167,1.465-0.292,2.051-0.125
+ c0.208,0.043,0.293,0.251,0.501,0.293c0.085,0.042,0.671,0.084,0.712,0.125c0,0,0,0,0.043,0c0.126,0.545-0.168,0.963-0.168,1.466
+ c-0.042,0.545,0.084,0.46,0.294,0.963c0.376,0.879,0.082,1.968-0.21,2.805c-0.336,0.963-0.084,1.631,0,2.637
+ c0.047,0.563,0.345,1.089,0.53,1.611c2.281-1.364,4.252-3.192,5.782-5.357c-0.259-0.639-0.451-1.269-0.16-1.779
+ c0.628-1.13,2.009-1.632,2.302-2.972c0.085-0.461,0.043-0.921,0.21-1.339c0.11-0.369,0.351-0.551,0.654-0.668
+ c0.304-1.347,0.465-2.748,0.465-4.187C64.359,37.743,60.666,31.694,55.146,28.374z M57.213,32.847
+ c0.023,0.025,0.037,0.057,0.045,0.09L57.213,32.847z"/>
+ </g>
+ <circle fill="none" stroke="#1996CE" stroke-width="1.5" stroke-miterlimit="10" cx="45.377" cy="44.648" r="19.373"/>
+</g>
+<g>
+ <g>
+ <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="89.5537" y1="80.9458" x2="56.0727" y2="42.314">
+ <stop offset="0" style="stop-color:#E6BA21"/>
+ <stop offset="0.546" style="stop-color:#E6BA21"/>
+ <stop offset="0.5592" style="stop-color:#E8BF38"/>
+ <stop offset="0.5886" style="stop-color:#EBC964"/>
+ <stop offset="0.6206" style="stop-color:#EED287"/>
+ <stop offset="0.6545" style="stop-color:#F0DBA3"/>
+ <stop offset="0.6907" style="stop-color:#F2E3BC"/>
+ <stop offset="0.73" style="stop-color:#F3E9D0"/>
+ <stop offset="0.7735" style="stop-color:#F4EEE0"/>
+ <stop offset="0.8237" style="stop-color:#F4F2EC"/>
+ <stop offset="0.8862" style="stop-color:#F5F4F3"/>
+ <stop offset="1" style="stop-color:#F5F5F5"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_8_)" points="95.078,47.589 77.031,44.967 68.961,28.615 60.89,44.967 42.844,47.589 55.901,60.319
+ 52.82,78.293 68.961,69.806 85.102,78.293 82.02,60.319 "/>
+ <linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="73.2637" y1="73.4585" x2="66.5271" y2="35.2534">
+ <stop offset="0" style="stop-color:#E6BA21"/>
+ <stop offset="0.362" style="stop-color:#F7D709"/>
+ <stop offset="0.8834" style="stop-color:#FCEE35"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_9_)" points="88.548,49.055 75.014,47.089 68.961,34.825 62.907,47.089 49.374,49.055 59.167,58.603
+ 56.855,72.083 68.961,65.718 81.066,72.083 78.755,58.603 "/>
+ </g>
+ <path fill="none" stroke="#9B7F2E" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M59.487,45.171c0.771-0.111,1.685-0.775,2.029-1.475l6.816-13.811c0.345-0.699,0.909-0.699,1.255,0l6.815,13.811
+ c0.346,0.699,1.259,1.363,2.03,1.475l15.242,2.215c0.771,0.112,0.945,0.649,0.388,1.192L83.034,59.33
+ c-0.559,0.544-0.907,1.617-0.775,2.386l2.604,15.181c0.131,0.769-0.325,1.101-1.016,0.737l-13.632-7.167
+ c-0.689-0.363-1.818-0.363-2.509,0l-13.631,7.167c-0.69,0.363-1.146,0.031-1.016-0.737l2.604-15.181
+ c0.131-0.769-0.218-1.842-0.775-2.386L43.858,48.579c-0.558-0.543-0.383-1.08,0.388-1.192L59.487,45.171z"/>
+</g>
+</svg>
diff --git a/Sankore-3.1/resources/images/libpalette/bookmarkIcon.svg b/Sankore-3.1/resources/images/libpalette/bookmarkIcon.svg
new file mode 100644
index 0000000..a836c00
--- /dev/null
+++ b/Sankore-3.1/resources/images/libpalette/bookmarkIcon.svg
@@ -0,0 +1,400 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-17.302 -5.289 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g id="XMLID_2_">
+ <g>
+ <path fill="#FFFFFF" d="M40.245,0.75c-3.26,0-39.495,0-39.495,0v79h60c0,0,0-57.821,0-60.688c0-1.682-0.81-3.904-1.754-5.062
+ c-1.58-1.936-10.316-9.098-12.142-10.773C45.666,2.138,41.152,0.75,40.245,0.75z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="30.75" y1="4.7002" x2="30.75" y2="75.7998">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M39.296,4.7c-2.934,0-35.546,0-35.546,0v71.1h54c0,0,0-52.039,0-54.619
+ c0-1.514-0.729-3.514-1.578-4.555c-1.423-1.743-9.285-8.188-10.928-9.696C44.175,5.949,40.112,4.7,39.296,4.7z"/>
+ </g>
+ <radialGradient id="SVGID_2_" cx="49.4316" cy="10.2793" r="16.1285" gradientUnits="userSpaceOnUse">
+ <stop offset="0" style="stop-color:#D3D3D3"/>
+ <stop offset="1" style="stop-color:#FAFDFD;stop-opacity:0"/>
+ </radialGradient>
+ <path fill="url(#SVGID_2_)" d="M35.175,4.628c0,0-9.017,6.213-2.155,14.081c6.862,7.869,11.963,10.418,17.65,9.242
+ c5.687-1.177,5.529-1.826,6.314-3.395s0.932-5.307,0.353-8.13c-0.533-2.598-7.11-7.148-10.026-9.238
+ C43.011,4.106,40.686,4.562,35.175,4.628z"/>
+ <path fill="#FFFFFF" d="M43.665,16.395c1.835,0,10.509-0.217,12.083,0.438c1.573,0.655,3.984,4.525,3.984,6.492v-8.531
+ L39.931,1.287c0,0,2.41,2.174,3.067,4.797C43.653,8.706,43.665,16.395,43.665,16.395z"/>
+ <path fill="none" stroke="#A1A9AD" stroke-width="1.5" stroke-linejoin="round" stroke-miterlimit="10" d="M41.531,0.75
+ c-3.26,0-40.781,0-40.781,0v79h60c0,0,0-57.383,0-60.25c0-0.764-0.073-3.548-1.018-4.706c-1.58-1.936-11.759-10.74-13.584-12.415
+ C44.96,1.29,42.438,0.75,41.531,0.75z"/>
+</g>
+<g>
+
+ <image width="158" height="158" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACjCAYAAADmbK6AAAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAANTFJREFUeNrsfU2zbclxVWadp+Hr
+ocNBMGGAuhsPCBkQYcKfc8zPgBEEhKQW2A4hLAmHjAQOGPE/mIJsCYccgIeo3Zow8YBg2J5Jb1ey
+d1Vm1sqq2vucc9+5X+/dK51+957vs/c6a2WuzMoievl5+Xn5efl5+Xn5efl5oj/8cgjqzy9/98ev
+138+3n6X9agwb/9yOUCv9ECxHzCmRW9LLJT19/VXPLJ7x/bzH/+LL3/6csRfwEhf+oM/3UD30fbJ
+N7wo4LhcR/QviRWM5eYGRiJ/xHr1CsaKNt7AuD0HARj5GIyfJuZ/2wP0v//zv/fpCxjfg5+/vQJw
+/aAfKUg20H2dCqSogRFpb70urb+c9BiVmyYAdPB1wEuzo1tfbu+Af7re+h0g1s9/9M/eP3C+k2D8
+pe/86PV6cj9iBcz67wbErxfpdVQ0ECITNhBu96v3zut/jwCY7Ej2gOPxYB8dcNFLASfRdwyYP3xP
+gPnOgPGXvv2j16Lyu8rghxv7JQUZV5xVaJmkbrjaASHV+zoLOmUiALkxHiLQACeu1hPGPA9G/3sD
+5vq+vr39nt9xYPK7AEKN9z5cwfXJhqGTgi81qgJYgiQrkF71IOT6wJ4FjQHLw3g4gJzgb/GkRgJr
+BrTNzkS5fX3Q+m/2WLQ+KBc552+vf3/+g3cQlPzMQfihAvETzYBXQAAQuQVrBRzAhtu1mJiUBwEI
+BxbUp2NuzGfgc+AVJDGnM9pc3kTPityhNE/YUkRK5i7y6foy394wu/79+Z/807/76QsYH+Hnb377
+h6/Xk/3hK+INhF+jxnR8qjFdJS6Q5R029MTEYkJIoAcWBGsHYs4OfHYHiVEj8+UHWxx38aoC1h6g
+FZxbfFnY8r89c7Z8NmD8G7//wy0p+fDVellP/icnMFAKIzKH+LD+Gu8T2LBCcfMJGWPCGQhRgu25
+0wg+RtD1arzddjpzvLfHLDIKOY8gFQMnAPMnohL+XEHJzwGEmxzzdmH62hc0JpwBMTkHGvpGWbbf
+s+YyKMlpAsJqbAMLTgCIYKkhArHFeyTwREcoQ1BKjCHT+h8EqT0MgSm5gXKLK+UZgpKfLgj/RGPC
+khl/bQPByor86gwQ3chms20qi72C2DCFPPoYhIkoyDwLBwDq4x18na1T32wA5P4hF0NXvJvDUAyc
+6/0WuJsBU7ZMx9iygvKT//qM4sknB8a//s0/VjkuIPyqsdGpMGJNTI6ASMwhPlTLZpDlng0ZJbkD
+IZM/8z4AueGtL74YpZ34vExn6bHo4LIryz32gJmNLWtCvgHxW5tX+RxAyU8NiOs//2g9o199pelF
+D0TLmk9ngLjB61VNRDYyKwyJspzG5KTGhZZUdyCkAwAmvWYGOp45NzyikDvghmRGQcpAlUIjMI0Y
+EZS5su0GxK89dUDy0wChSbJ8cTto29lfwbYC7u2AiPFhgrSlY0MP/hKRx4RJeABhz4D2xwC+rg7j
+rCsHRx3iRBEKykwo3x2DImOKRLY0UG7yvcaUn64f8FsrWp8sS/ITAeJvV0muZsypxHVrfNhJs2jy
+ksjtm10gWgZzRpYLSBPEmBgT1gSogZDB0CHNjjvwodwP9Mjmhu+eDWmOjnQsiQBtJrgzprTgsrIl
+MCVBTFlA+URZ8lHB+NdWIK5v4LdZgZg2BlN4baz4BTWxLQxLCiI0tAmBdADEmSwjG7JVXshayPwV
+Wu1GWRKTEe4sHX9+qWy8PVdW3/KScmB2XIL3rSAVoMYMwJSWxIgXcLgypT5QINHZpPtJsuSjgPEX
+//UfbyD84noWN8vmq5WFhDFOHDPnev3bAHFIUrzi0oDoknwOhJ4Sgawr+E6OmS1EqPc7HRz0Pk5c
+LElSojSQmu9dGE6ivTMDpQaU5b6Y6BRA1tueFEvyYwCRKht+JTlRuTw7EGeZswHRKytslgvzF9x5
+SUdALM+Lj7XY0NiQgyXOAYQMcs8TAEqxlfQ10O0eDzpPWFFmhqMAGFPFoANzQc02DxwfIzWrVv9H
+MrBkfoKy/aBg/MVv/OD1enK2+PAr6uOVNq0deY5lPmUzQcjU9Lec/C+osgrTRUA0YFliI8CG9v+T
+x4ARhBZXTgHYUpvRVeQLdHrOlp6s9MBc7A7KlgjKDImOgtRZMruCq2w/AUA+GBh/YQXi+mL/cGNE
+BvBt8nxSeT5N5DnVTFiZsKUsEkt85fnoAIiYqGB8OJPlhBVFAySAMB0AcOxlbECWC0+IB37wIDkA
+5oZDBGWWKN85suTGhqNsV0B+a2tT+8EjgZIfCogEQCwxlAquseIse+7jRG/uUsY0ILL6iOoTToFo
+z+UsB7Ls0UJkw5ZV0wSEPQN24JNOpvn42MuUICWUXqTXc8hPHJRZ75mtDU2RiyxpsWSWVvZRQFaj
+XORrj1FK5AcFooPCuqgpJC1ad+7kud7Wx4mesBhltkYwOqULgGhg4302LIa7hEDSzccUC36t7BLX
+IAwR466xI3PDG5PoBk4JJUIBMhVpyc1yxJJHgBT5yfrnJw8NSH4IIBIAEVnxKGnZlWe9EhOWEmBC
+ZSUltgyW+xhxF4idvWP3OcF12hHebG8ODmPAWtc2Fh3wM7XpgE0ZOsBFkDEh4xa4LYN0A0vGWFIh
++VQAyQ8GxIEV2ROTPmnps+denhPI8yxOTHwHIPoXpWbJwi054h0QEnjt4Ekq5pjGqsw8RJwlMdKB
+VKD0J8iTzeNBG6iAslhEWg8MLImy/YQAyfcNRAIgzlixT1pE5TlxzJ47edaMYz9OPJlJfhkjBlkm
+zcpfDUkM11gwFHxGAI5lw6jPRz4jWjqt+oz9jC0r7kHJSo3GktliyayZ9x0BuTB/8hDd5PwgQNxh
+xXNJi6HrUJ4ncWKtbROHdTCpJStTIPayPGHDIcMGEA4AjGXEq461xJSFQJYF1XkApd0vR5Ys0qyy
+bcnNHiDj9fV+6+8/WXH8yX2vu0n3CUTqAqXJys1aabBKP3tpLoZWmIxYGW/zWcTbuShYOJaAaEnO
+kpOrgWjmJrcbkr/H+lVxu4jb32vMaq/JtdxojsGFly1pE7LX4qRv2N4LewVpfD/VjWcTCf0c9b4n
+M+vbgh4/PrgGKPlx9C/431r//L37ZsZ070A0wEV5VhD6G6hJCySo4/oVriazduEMfqI9X2Vc9wSp
++YgXA5EhDCCIGXkHhD0AHSyJKXGzKS/6IQegfw8GYKb2Dg2UUJ40898Dh0sBaZ88o6OgSyzWXz/4
+jf/0vz5+8jK9B8RZrKgs4VaOx4qp2jxm5XS1Z01auByodCDPr/qEhVsSdOqSlT0gYmoNIBybJ7yz
+wp+3EfkQPx73eUufV/eLXpqEFqC5RItATbBJq8WNVZe9jHhWspcq2UP8uNT4817lmh+CEbHa8gqq
+LTGDnseKVvL7wp65naoF5H5i6uJEWGDwCjJsI5drgOh2o7IvgpCHHrLOxJkGjjGZlt2SoIS2HY/x
+EJS5hZmXArLEheRJTXnQG6mrF2bxowL0JyuQP7mPYQK3kOkv7gGRw59iY5PqSrnWHjbEiv06ktSk
+2yjRwWf3DfKMcaKmEmj1nDRrvhCITT/dclKJRBlWhHNzRk1bTXLZQrn6R39lu9quT6ECZM69Og1J
+nQKpcSlI9yDbHkd2kr3KfzkOGIufOLQreyEhtSW5m1T/4a//x//58ZMCo7LiF/d5t0mTAtA/HIdY
+kUKsSGOsGJIWLATz6CfWHkLwIFucqAdWml10ARCdq1MKNg9NQWgAbBCz7MZDFLW09DLgUmvoLSNq
+wBxByYl9TU5KDroW0x4B0osDfQ2/No4QLrNgq+2Xn4/5HhKadB/y3Mm0Cs6Go8aKMVnWxfe0z4oZ
+Vv0hKyY/uAB0Dn44cWisbchtickciAnvZ9elBqoZCBGAqfid0pIPA1r3v0SYTRPenxNDoDsBpbOp
+J/+WHl8GyO1OYXwBqI0mfKhA/tgtobk1O6b7ACKCqmulmto5jJqAld4zrEi62Cq1BtlOnm1pAAcL
+SDr7Zg+I1AExsCHyMYAwAtBcIQ+C/X8NafF/AOcOnMwISsic2VkSAMkHgAy2j8Y4icEiM7mOxj47
+O1ZXY2PHm8p1umWcOJNoy4tP3E9/He2c2u/Nw6q75RJW1IOXWwIxyLPFiaf4Ntu3HUBHyJxgMzF0
+SxRmSj0IG6qoqW2Q6ZRAxNffIUxEA93BuR0jqEpZaOD3DYBkVxneY8i4rKION7D4EVdKulxTmyeE
+XiTX+PG7v3YjQKabx4lziaapRNu3keLaFAFfsT6SzrNil7Q0hp7Ls10lzUXqY8S28Cu5uYjpuN1E
+J82aWs2xAZAVbCcwxJm7S0poeqvujsBMKpvGuoElQbY5uUrMJVt9yDNyHdStS2Z84BVVQ/x3HxyM
+l8aJTNMegVGipV0nxord41WiZ0x2yIon9xnn8ozsB7Gmy1STrLCOuslcYUMom0Ma7QBMELwmss4P
+jnGh5j/eGaLvsQKU7bnAVrJJaxWH/ksrj3tNPsaQ1lwc7ziTawxzzrCjGeK3YMd0c3nez6JHiebL
+EhestlSTqA34PMeKlj2nTp6ptzAYJGqIEfW5kgd1NYYNbNhAmNrsvPKQUzHj6+Xk19UL/l5uTy1O
+nDGsgaGN/mvITOBvhhgSkw9IRrBBk02JpPUJxGTm/tkx3Vqeo0TTmSwayhmdRCfrH8RhhsCK3MYw
+FN7cY0WzemLSwoRfFsZFfxgbklknIHD6nhIxZDJeJw4gNPCdoEzox8bbhziM26uxp16Sx70BlJaK
+eM0bypfcGo4DIA2pEJWQL8sFuRbNUBKQB7Jj7vqQUuvB/OBX/+jt2DHdnBU7o3sAaZdF065EMw92
+TmBXDoC7MytSTBeHrDlIcwMiBoip0WoAYasTQ2UazDoPDCGhEYgVmRooW7uGNQ/DGD8AJMaQIalp
+CU2Q68CO1X3YZcd4eijMM7Jk5lf/w//4+F7BeE3S0k9TQH9qz+imHYnuE5eZRHtYoPhAVqRjVoTx
+3iDPIZHhMNsRgWgYOqXW8ZIogpBC4mu+0zxmNISkvqUCQBl8T3/S84CsRVRoSonnhGfsKBN2rK+L
+ChWkervy47eR63RzVtyxdEbgxnhxlkX3z9tLNEfZxzSnfjipXSo7rEjAirggu/sWWXePRCkHWQ5s
+CN278Xcv1AwtY63q0hJs7EuzL9+rwJL+2Ca93JKR+rHEPyPKNWTX7UQBO5rVQ5BZQ+0chxdEqa73
+/eCu7JhuGSuO8WL7CvaWDg7I5pElPYs+lOiYuCCBOnBdSiesCMyDct8swmSPZVhtEIFoXeWtqav3
+wwlLfIovCRdNhszRwdk/4EU5WOrrTQCZWpEFylCNHftjjcwb2NFDKhr61IfTFqXaate/e1/MeG2s
+CD0n9t3s4kXAHcaLoNRudB9JNCYuPElcmLvFeh0rEjCdsyIUnkPRgoIR7ltzIBA52JAhv+FW1Rsb
+G2F1IyEwu8ZdAu9xAKQnNQRF+raXTWln6pMZJpqyo/uOE6k2JGbvSR2kevt5/St3YMd0ywya561p
+g0oniTdI37Lfx4vwZjGLhj6rQaJr9ZBjebFn3xkrgnw3eQ6lQZ0+IQMQo6neTaHgsRkipUQg283r
+DviA7d8gsfLxfTUi9qYHu1fqp1LVY8eT2SrzzPqMVPePT3Fl453YMd0HK86SGExeFD1BXvMF8eKQ
+RXfBIncRgCAi+nmJWHCdsGIcVg+Oc/2WcCIeGDEhJtlrudaZ0wPSumuwi4yL2Z1aC1jqWBIilGbe
+d7zESHuMFZrUVtcmDtvTjK2WNZGZSXU4p54oBr9s++P1r/z769gx3SpWnCQvtJu8dLKc4gdt8SJF
+mWiZChjd3GLSvj/tKHGJsePIirBqFisOKs8c1o1EHW+OZAIQtmy9GYSIxBRHTFrpMOz0AeUeP/mY
+NKXYDhGSGWRHzKx3pdpYbpZVU3/MeDhXavX8zq2Y8Y6x4uhpn2LcFj5N/7UU3T5XcH0yxXjR5AKN
+7j6LRntoKtG4j8a4UQuuHGjap6x4CoPow5YfAMSh5xG6y/ratMaZINNgQeK67FjGbOtXFDZhUWKg
+SBbIrLmx455Ub91Oe1k1xo3IktKvrGD64O9fETumm7HiWHkJoUWbrnqcvAwTksDNZpGzMal9Q2W+
+oqJfqxL3zMAs3VMUanN2dHQzUiADPXRAhJV9AYDWG8Eux9hlphMx2lINaOr11uOoFlhrj+wYNtls
+gbBEd2JPqn1G+XE0Np6D9tfWZvY7b8uMb8uK08oLXxZqTpOXISjcuck4Ik/ixb0mjqlEM5ILh6aL
+sVWTB9Znjh4mWw+jsV2d3+J2Dkwh6LvQyR7jzoQmUBgTppiZudVDPJfqIYGZx1PVAO/uKxPC6JOY
+ifl7PRjvyoqjrXN9XMB0LsCEDSSdLdtsdm4WUE+X3M924K4sRCPIQpwpHhmNrBjn8/DQE6mgq6vP
+ErIgtnRXtsTFQNGLRrmWYPMJYR9mq3fjGBaU6u5TdjbEPG5knqngznbGkW5ff/n7l0l1uq9YcRdf
+E1vnsPKCBiw89jSLSaXVV0/dOxi0vI8XQ0+lTD6QxO6iFsaRyWeaNOdy928CHzKltm4LY0ce+tbI
+YsqwCnEDpQxmqtjq2Xjsus88iRvHRBGOY61XT89LIIs0nu6LpfqmEyUuBanZOvjNix9Q9g/QsCMp
+x+c42E2AeWcKGA8LSKPrTTOJbrGi9PFDwEy0flLyDLt6hUkX+yswe0DiMgGk8W5/zkGqURS6/pPZ
+5w3HZTgfYt1XnfkdzhHvslEiuV6m3yZx4TvelnYmDfPkm5J6gu0fyfMYcrcnQ2a+2cQS1tMunUSH
+UTwMCRICn2eApNJgUdZ4G0tC3ZhhvEOKSaxVT0IEA6uvQxHl8Dsnu+eG985Nf2cc1Td7Lvj79T/4
+3p99fC0z3jRxmX3Mo/mEe7iVjvDc1rn0CQ4OOPesAV/6tl85d44AEqN09iZYg5g/wO4K0eRufnsK
+u4Nw2PuNo43C3GKWUaqbDHcWz34Sc4WXHB7VnwfhabK4AfFfPbhM8y3uO9uA7+Ks/XqGnh7pGbPQ
+pIwZARjBg0Y8Udc+DuU+dL3trqlFscLd5PDASLJ7PDnWvOhgbu7Z43q6OyAufs2HjBkfCuOX0+LF
+Ty68d1/pw7E+ZkLzOwac2PPoj0udFHtNnvcPCR+839Fqkf0vK9/r+frgy2ekOt3W0nkvfu7GLjz5
+s6v9vCUY+NG/5cdm30fnpDo9WLz4hH7kvp53ZyNz2bmN2pTZs/cVeV7H4i4/6V0DmVx6m9zthOCm
+BM2TlOG5BpQR7qTBth+0TqBlnEDrqBSZvT8ZYsXxbvt1D7nDsbsDaGXnga+/9L0/++gQjLeUaLmf
+J7n4afOt4Cw49ZDjXO3Jv7gDAW7nZ5tJ5jZPUW8oU+zq/zJsmSEkYU9AeBsyfW2eH6Ru9DKYP1ef
+PHm744obxR5m1elBJbrb6yQfoQyhoIG33BD1VvmRbgwiDneXiT7ysPdzcyzDFrzAigVjuWIurx86
+Z4Xedl3eboozEn1fA+8skX4rjnatvkY4PripZfu2hA8jzG+v/JNN2888q9y7TF9F7zKIjrCMt85k
+Q4LVIOeedwLvg7d18OB6ohve2KbFTnQUd4x2EswN9FnZsoEyqjKwqeD+5naDoOQ7cPso9PLzJAfH
+ZnqQJFpJXYf3W7FpuiHpXXZb7cCWPedeJh/Kr+OIXBuvGhojuCUF/alyOZUrEhDf2qI9LMfHlFuy
+7U5FgeH8wRsgnRCp/NkuUplTHJxKrgK7GoS3IOE/MuKEOiGRQJMig1oJSXhm374DvoHckWx4bd4H
+5TLtOHj4BGbYgUx2mIj9w/HQiyg0GTEMv2eJgFn0gt/gPYaWTsLa9mcySF5uHUIxP6mtQtKpfRtZ
+nDUkzLrfiuqyVJm2eNH/035HVhwlGo4TvJ+aHHGLXPvESKQLI2bK04Ck4Qw8ZIEjlrudvPKuLOmx
+y/LBL3/3xx89FBjlrtnucvbZGmCWCcnZJo7cHVCZ7LMnXXYgMgU/bvjTTrjGaASgKeyYkR01JvRM
+RjHVQGigFAdlJmRGQ6PGk227IbvNk6z6Uk3fqd8EvSNHgl238Fj0cb20vBxZ0IoG0h0wDvvNieyc
+312/8dX9mN2Mb/usbTB5JCivSFialqG/DorLKNW13Ul8wpueIe4zyXLuNIlhPe56QMOCbjGMF4mt
+iwOldegTtGxtANsaIOro+W2j8VxX1bJhuG2yNSZ1IiEB6oHYs2L35ZKpRAvEEtuLbjTNPMaW0sU+
+ah8lHTBP55Tm4BzzhTZpumUm3YOOISnMkHdKy5AnMq5f0EmHyNAcIfNQIO9H4pgqRwwAQ+5JteWK
+4klMz45kMhwYEiU4t180WNQ/NaDM2QlxAsSWFTW5xQ/CZYu1TqIlgHLY561LXsb9rTFGDvccYn3e
+a1+9zAe5uUz3fpvGWmgUC36N0SrxNRfrd5Gz9MFQsE8wo44AGWRF0AZGT7BtEClDKtpLNQZxGa0/
+v/oQkJY5m6doIBNAXbMbm+wOQKyPdWYTIdjYvEUEwa8M23B0n1swrpSwVklysGzCzsIhk5Zx300/
+iNt9Um+XPQgY48mUReZvAP27PCYnMo95IMnhCNQOIHU3+o4hPRfo8kmUar9vFvSmR3b0fVJqTIgZ
+9AyQ9t4ysCBe4IfaPi4HQIR414E4Y8UWU3pq3/uLCNIMflXdOsaOTTt2WZCcKYCZMdmbJbByzI6v
+bpm18MHvgXLYD0rrzy5LBaVux9b3kOlByYU1tzPAZWPLxcJHaErMVDuTtcO4Bpy6Is7Dz/ambOiE
+BYX2H46Mu2FgvWU929tale1Fty9aWbJq6GPnfN2NppLJkqU2gemgSZnsWCRgJ4JdFQzLAERLWroM
+uhmTnT8AXx5qU4MdIAYsVA+MF/sm2nIuuqxILLaU3mtkt+dNufb8x1c3JUaadoH458REYXZ/y7he
+DTdXFFncmDCtES/UWlt8dRDiF0LYQtjqcZZwVXOM8sUoNhoz+fnaaCaVJQWSdYKEEQ1XCPKy/lsW
+tdfTzDNAOhyyaEpUEeJtYrKz6Tk4MTQC0XdDddKjJtOZMBunahBmJYAcJTqD7c1NqVxZjuJF6ePF
+YRvYhvuFzncI3T5mpOaFYQCHH1xizCi9wdwnMUdxY4KTgZuBz6Qa6xoikLuKf9sx0qonvcUKTS79
+cVL22gMd9efOGCdChdOIyGUaijDgJKlUZ72RMW7tgdiccgQxekQBtJCrSUxZ9iSaghEv7gtPnCDp
+LTIe6w7bda+/9Ad/+tGDmN6xTCbTJAYzWJa4w3cFWTY3O1RVMW4UNGAhrHO/sQbQs7KdzBIZyz7r
+8Wb0JwvbOFRz3gVkBEAEZU085v673T6AEDJxk2YEYl/5aayISZi4ndMnLr0zjhLNMjRnFHrXL7nE
+5Ed641sseZlQ/gbEr9+rTM9KaeuJ2jY4nyT3NT4EI9V9u3ryu/kmVIU1xI0cpVpUnpOGilljAgYv
+kU3SqiRXcRZ98vhtruOgVIJdrlXQNxSU9Su6paRKdkVQI/XyOHRCmIRmgIRKDtljaAAPSYadVHMX
+J0Z5Fv3VfmOKnI8JouBeme7+LBBs5plEQ7woHRN18aJAvDiupbsPZuzi8CHYyGgvsAOIoh8j6tTr
+s3FgD/cbp1Kt2SV5vINen/cPhkJYtuuzZcYS5NpjNGnxmGF1wpBlV1JDB2bFFNhxvOTGgsGYNDZc
+JAKx29/Xgeh3QssJE5wzrGhPLl3VBeNTlGiLF2VSxWI9/svEecz3ncD0WQfkE/WIcI0bT4pCaVMh
+apGCOVRfNqle6Yhs1CI7bYluaF6/8X1WDfXjmsh07Eh9wqFDIwoqKtdxSdhtI1ip4Xmus3YCQxYN
+rgMh7BQVlhRb0K/QzGPX1fTwoe+aQ2as/CIjk2XCuFCC9SSdFWUPb1bYHivGOL7Poi0HyCHTihK9
+XfOmjxdlXxle3ZM8KyDYgzcpzggJ7EknWvL1b5ZZPKZWR1KdSoZKLtXiyutlvfqa6y/b1JCNmHxx
+XvuaaO1epKwYBbkuRz1RW4gqti9NTbIDILfNxLe7J38rK5NJfUaitvcgiAYftF0JeqbiX+b1LWVC
+12cCRMIOckI/EJqIciPvEBdKYMVGvhlCgVBylK4HaEeiwc6RndL1/caMYujQuPE0iRulUpbfU4fO
+l8cuZU87sd4lqzCThXtcWYzAkxFRd0/8SowjnYmlrAJV66YaM9t9pE5Q2+Q6FRtzKwJJsvNlteby
+ZWiA1AkjbEGctMGmjSmr2Rk+fsLwY7d2wNaZO4ZAMyDmGJZk68REeW4A1ThOvIqz6BduyoqhFBWN
+7jzPopulU1mnuSmVZeVhZFpNvNgqwe7/JTPiJlItKp2iBHaaSDUa4AKJzDl29GTEJicJjkUBuV4D
+uAJI7XOIgMxVnXUuu+6CIMmGFFtwBqDsEvnyistUqFhCSxeAEBvHM/RSQN2QBiCGuNEbiQRLfxls
+cb6cFR2YuWsfE5VosdhfPDxyiZaHML37hEVs4LRJtbavWNw4k2o2qa7sqDjjqQGO5T9nx+KKbwex
+gjcpzJZU75Owp8iCKv3eLCuznOrMmzOAFDTXCxAXjTZ7UGabi6MmOx+12EkOqxXQo5Pm2HTNu+id
+HgGRQubNlmDpEV3MV2zln8aKMrBiLK1KZG1pRveQRYOV9nAyvSfVW1aYDF0TqQYuba1zYj0/XJOI
+Sq/l94EdnV8aiBSfrVMoEWtFMco1xo8TQG7CvAaGTiysqpz1VbfnW6qZI20uEwTs0EA8tlmN/S2Z
+oH0RrTxYlyCYzuwBEZwFkijPJuGbHfYmdI03V2GoCu2w4lHiQp1ES5aHY8Zdqd7iM01pT4qAHakm
+NVi9v5CDTXzAjjCbzXzHkvhAMpNQrusV6iqW+HEKyPJWs9hs9iDb+rnEhjWZHYczr4XRaNhRE2ml
+Auheb6URGWJAictdRyBCHahl3MCwObbtehIT/cSRFWd2XjDIY7sgVr0exto5K9WbpGFWXePuelpt
+35LCQvXoLlqLTrUnhc+xY9miVmu5pOzocl2Zy0ELo28IzPD6hZkA0mrLWwiQWiKqOVUApUdlDkwe
+ewB3m1MHAFLo8BYmaG2Ubh32CERUdIgTvUtnAf7O1joGVR4Oz91Y0f7OwLisDLu0MKhl78bQhYkf
+GIy8I9V2QC5JZDYgzdhRvMOhArLOiqkMuOgjUzLrxrJittelxcs9K0NDpnwESCkMWXnYZZvDUlXm
+0hFh6X8E5lGVIa7zESylNiQYCHNbJZiDj9iqNtaKRghE996L9SQtTgT7B5MWbH1AX3E/VryIFXca
+au49ZixSZgBoNdJogI+JzHl27DNr8B1FE4bClpzqR0e5Nl9oe/KlTmSXk7oRCEjNUyTZZisbQ1IZ
+NVueojpLhasDKK1bKgKzvA/Ol9SwsDMbpmgjCBsbgr0DIMlw1QjEWs1pcSL45UgiKM+9r9hl0BNW
+JGRFTFzW5/98/ecvHhSMPShrtaqaHks9zkU+WX2+7SSXHQWuYccCOPUdW5UkyPX2TJ5dd/HjFkAu
+msD0gGTlOXMwdQcz6llS9kGJzewVnCFr4XF1HnMXjQnoYwfCCRsisxnKmHog1oRl6eLEjH1NUZ69
+MZiprf0+w4rBzskUGPqz//17v/aHD90ocZjIXMGOa1yje5707EguzW1TnF6uqTUzoN3zZr3fqx1A
+liOXYhFSjXFjyeI1VpbUtg+bwKkNtT0wB3maDR4AYXQAlvdgbyuCkMKyUQFCa1mzxYgIxAyNENsX
+fYHMeiLPXs7MkM90vuJurNix4q61de/MeC6RQZvngB37zLrQV7KqHSQzM7nOdeRhoclFDaXCclIT
+mtMMkFonLKUWZliD5SxZP1YWq/kVpqw3E9mKQAvI/E/omN7rv7cVhBolUC/B1DcqQEw2tW/OATFm
+6CIH8oxJi0x8xVms2LEiCT1gbXrGjlr5KFdtdduTggFtniN2pFzjO/YGimQzjBnlWqJct/ix2j2e
+0HD1Hyvz9gypW+GZD1lcd93nTIAla/ioS0+VKUmXFzCs+OR+0RKMk5bJDLyuT7a/n6AXKHEBlFAn
+y7XtrBZqWKV5oZjY4LqdPk4cJ2VgIyis27Y0zZqUdlhRW9MehxlvwY7ecqNVmbJLwI5ca4cMGyth
+/Jgz1yc1e4laePhGLZ+koH/VltrMZJv0xRyUXl3xxSGWPrf9GXivJXrWNNHNaQrTSSiCEDNulGUr
+HS4KkjcULRxrDCZvWaK2tkagvS42JEuftCxdtcXq3tew4oOCcbR5jtkxa1HGlrewN49RiQXTvlxT
+JtybSFNSplpJsXab9Yo3CsjEFsPW10y6enSj1qWTbWVJ6kHZ2n0AmNb944XnK3K+2Ifc1kDLmCwg
+GxL0H3qTLZusTqSZXI6sl9SZTdvDDHw0k2eNI3FuWuvuB18RWfFoQdZfrZef0j2PUAabp2SxPTv2
+mfWJmkzXzddSkGvypQmjXJeNR7Qn0W6ZAZL0tUsMqTZhZpumwHUNgLaF6SaabAzSg9LtnA6Yik5c
+0nOh6S2DZ0c7IJQdNkx91UQpasFKj8dFHRAnceJMnhdt+ghJSzelzUu/aqgvec6O6f/9/m9tQPz+
+g0k1tNAvubUf4YIttljFFutJazp1udYDlSRLCOD1zGAzKR7g8mVoLdtCFtzDaqvtfov7Fr62uRjF
+GQ3ljSlxUT6UbrO4BRIWX3UXGq6zRVpt4AQ2JPgKf24d6LhAyx5Y7mrxIUw0c4k11uyBOOvBkLgU
+dVeeqfmLvTw7K66/bOT32aPJ9Og3tmAtazfL9m0p++e1Yox/aTMz7cm1N3eLePxIkNBktQ2TSb8y
+JFeG3EK68sDsRnrlty3uLF6kbuxcVhisjHxq3USBKTVTYa+SjJtIkVwxkVfAxWMIQo1u8tg1E2Ra
+ZIwPpbNvqJNmgS/sHhCx1Lh08izBr5d+fl+p+KzP/xf/5xu//u8eH4yaWee2d3R1pbVj5o0W+E4m
+zprMsK+RinK9lUaU6YruWtJjgFzBVkqCM0Cyrowy24fd9iljU4Js2wQp1hLalhW9spNR9zzkkASo
+MVk6L7hXYNhbMuYow/66KbYyhmW36gjY+ph6XDmsABhkmfsMHOJB8yj3gBhBLB4nsojg+m5fKIaV
+n/Xxb0jCCtFHB2OXzEBVJusqkgK3lsxUiSsxYNlwVAEpY/y4Ai2XnBkS5gGQ4utalPHgjbRWW40j
+gSUrJUv1ERGUpBm2grLf4sxohCetYmHn0klqvTM01TtzrJyXycez4JrukQ0J128F+ybGiDtAxNlC
+i7JcW3gre9mzybPXnvIFYHyQJCb4jmMyU6smO3Jt2XXyTIF97eaiPfwloVnhUGE5AlIwqSFRp0ZL
+gFJ7HGtDOc1YsvqICspF34vPbdr2A6S2nhi3T0uTvoCjecdxSFNbCG+xKEGGnDsQwgwgZc9WLuSx
+alPjVroAiGPCMvS94YrMiTxLW1E8/yn9Cw+VxAxyM0tmqC73XHAxD0wzsNwjY8kq129rjWuyLwDC
+pCbncKI06G/f5ty8MQ+DrA7b7uuJRTnob/SapVo48mb7XZOVBYZzY4KylM82XvA+bRJZSZpKvLrU
+54SJEvX1c7cEJjefMLAhNQ/xrkAUBWIoGWaSfvCVZ13ba5k8a9L3+Zssnz0ZmT5IZlyuNTosh0nj
+R8k10BObvRTkunYO88qQ5cuXak8K9wyJtg+1INzW/mkXjmjr1yrpyYorbJuvcDXSXXxrF46OUkHG
+tApIGvbXLi4/h1q12OCBKNHmBQ0MSKGkIzKZVost4trwEOJDWKEaRzdeAETobduLE63k6KOnNVn9
+7C+/+Zvfe3pgHJIZX9bqck2q4R4/bpKp1Rnu48crAbnUOnYtrIBse72nVmzq7zug5LiVewCmJSCL
+piq4ESRnHw0bJn+1BtSGsmFFZQdABBNYgN10UaIZGzK0gL0VEHfiRJNn8MHp0gTmweJGlGtjEV0p
+sMnRthfzbvyICc2FgKQ+qTGvKOs4kuydOWI5SR0IoN3g2hlmqXIBpQ823QFmYzjx+TSzb+Syc2z6
+OTczAOYwDUzCdAgObWXNP0TgZAnz9XsgCsSIh0DMglHrGCeWUOaCQcreePzQcWMfyNuQhyF+zDF+
+JGwedSrI8fYYQ8Is43bwqhGN8VLbHCiH2JB8XG2uwaY/GesJ3U7WG4gtLe5bBKeVtG1cDi5+v2Vm
+kLfGWAHjurxo7oK3BVYEZhjJjMdCtIsig4+IwflljBjaNMrx+rmEONGA+Pl6fj97UtbOJdl1iR9z
+XYm3ZaI/18rxyfobSdwDvIAhKamtUxtw2QeEDixJtfk2+7oWXXpqRXLc/E/Tbmqj28sSgN7JNuYM
+HWJHpcCO+WjSAym+qh7GR1MYL4IVKJf7mNjEMiI00wb75hwQBV7IEpYFgJjbKu2f/uU3f+N714Dx
+waXa5bqLH2vAm2knoaFLAEkVkOWBJ09aatKUWuzn421ZeyIVAKKzqB2UrQQUEp0q7Uxt3w9pWp2v
+6o/opVpaIhNAFLaw6zp6KI5jbqNjQmxI1I1SwekSzUfEMVdRmgkGlqv8TxIWt/Plgg0vwvqgx5Jq
+tHtyG78Wdivb5NqaQt3Y9c1/RslmOCJWQ23Wj5d4BTuXtfDsp8Ufp1LTrJcq4YtJuHihuW7DFkbe
+BJW+5H9tDJlKsktwDjsXuRRnCdZQXWzl2XPbNDMDG2Jnt729rcXs59HQPseIBEAsj1u6hEWz+L/a
+MulrEphH/7EF9Do2p2S4fUJjaXfIsMMIE2BIK3hsHqBOijhVKd4eJToIsbCkaMWFxXvArCWGF2BK
+Xzqo3/SeMbu5cHUVAvPZWnRgRAobQg7bsrXO67DfpY8bgsHegyRTYMNQVfFaM4fC8hyIWigIQMzQ
+G7m07Zy2vz/7v//mN79/FzA+ilQPrWa6hFQuAKT2EY+STbYCRmvZW2XF48isy6Fs+Xawbdpk+g6U
+ySeo7APTAsNMsPTgyjh6oXEfmyMAsrTxdD0IqYsXWdoAzwyy3E26D0XAjP2SUZoPgbgZ3XtdOrMv
+4fDzC9/4wd9Z//nPj8WQSYu3SXsIbTDdqYxyqEXdU7V86GTdgpaApBJz2nW6HiX5ssJayNbnoFrC
+q+BJfrutLvUObW5TnBiOW2VUBSYUm+H9+DSJo+O931g7jiCeArDre8TeQ0xQDCIJpBrZEBp5BUZb
+j/bNDhBzD8T6Vv98ZcV/fMl535PpR2XHLqHxDNsYcjvzWwz5KjJkEeXNh9zaWVIbGEWh26eZzs6S
+5MsYklt8DOVlk28DnI69MCZyxhQEp1hXbejG2R0hLLuNtu15cZ8V7JxxFoTObKJ+UyU1UnUOjkCS
+YgDT+ZNtc/bQ5ROAWOy2C4A4X19xSQLzFBKZkNA0fy14kDJPanw+cPb6c5fYbAVH7FfOvrxSam06
+k3emQnMsnBgR8Chzbt7g0hxN39VVINHYq0PrSRzuY77n0kqBmkyBZ5m1ide2egt9h+SJFoyuL8/x
+BpKUuOg/DxmzHhG3khCIy+glBiCul89zJTV6G2Z8GgnNGYYUZchTZchNsj2Q6xObxiGNJe0rvT3m
+TVXpLcGpjWi6nMt2xMu+yqCxZdBUZE2lvyV21TohLofiTGbVD5SJ7DfrcTQWTDaKD+TW1kZTZ9n0
+bOi1cHBuYEdZa3wIC7l2gLhd+9OV2L5/CzA+qlRfAsikgCRlyJxquxcmNjpKpcq2DbatrqXUxaxq
+W9aGuwGUbW9p2EDVzHoe9lwP4OwCxdk+j7uY7HY2HsAHsWTo7jYpZroMhNwlKb0szzJmARf8AIiG
+n8t91aMbHzuR2UtquBFQXUe9Zi02TWJIbNS2SZqVJGr5ju9gtT4iWc8C20jaeuPJYko4WLnul1W7
+c2yKmWUrM5vmLXzXSSDpJncqslsZMMH2bd6W14Gw1btjgtJ6JSMb2vvogQiVlT0gbj9/vrLiP7nm
+M5+T6SfBjj1DsibEOjea87ZjZKqAAtneGJJMtnuWDDsdrM+a64SorUFnYEryXVw92aHImDaegCTz
+iEjZAeqBtzPdviS55PLAgG8QgBMm1GMoYfPiAzbsZXkGRGn2jXRdRlez4kVWw1NiR2TI8rvPBG3W
+j914liXJBjtwZLVqA7XuLrBzJLX1pzPGNJZt67PEM0Q3o3nfXGQvfFts6a8ntZNNqN+fZQZAY0+e
+gHAqyRew4U58GBpd4MtzNStemsA8GXZEhjRjvLae1S4GjCNLL2HWJsUZS5KulxLbXMPWTmVof6gx
+pf+d3aaZMaY+f3YAcVdnbhI/aRYhIe5cEFxuQMp+BBtDzgCIjWwhJpyAEB3uIzbciQ/3gHgnVrzU
+hH1y7Ogs2RjSzXGII33tSceSfh+KEyAiU46mOcF2coMBbqyJB/a0c5wv8RkH0I3gGxgQWRBjQgJ7
+qAchVHMG7/BsfEjTtTx3YsVrrJ0nxY59LTtr7zfbeJTtm62Lom0Rl8WSVr47kU1x2mFK3643sqUD
+U2BMZH0zQ6XlTdsI+/rOHYmMSt1gW3whBCB19Wc5D0JvPpmxYQY2NLAfAPHOrHgxMyo7bkD85lMD
+5FEciSxpe17Wv1usd0KSBKa0oHHGll4KVNbUv5nmict1tcAg7fPbZRJD0owFGSs0l4KQvAmpY8M9
+Wb4JK+5WYJ5qVeYojrSMLnsnmPe+bI26pAWLKn3rn7WDvCwulwXHHqo7sSXoVslZulV3ErqtrdZT
+BU1XHtpr6UTbtvv7uQveNzyXQC+6PnuOlZZajWq7F5S75jZx3pcdvNGVjWXjzUwCbCgEDbGVa12W
+Be2fA/W888+1FZgnKddBtis4vR8Ck5uiyyDdi5rlKdmWScqUgjtbiWHE9ugNjIlb3rLVTjhOv9uP
+EZl4ZxuOyap+mSzqnzKgT4iFLegtJkQmbM8TEpRr2dBw8V+uqba8lUw/B7neS27MgonSXW2gBAdC
+N6IkTHTCQWJfjtC2cKUGTuo8Rr7yYMvBdWFwVreDUQ/A7nFiY+jkQhDCNtJ7seFN5flqmX4Oct2z
+JOGkr066y6KvXPcp9ZnXIN8/I0EJb50v0I5dn6PJeW1sqJdM2gChi/EzNFDk7hKu14X75ULwfNZl
+bgvOOglmwWluxZ6Rn9dLbWoAOfb9X3LwDV2SMzabnwfiW8vzXWX6Wch1KKlhxl2lmzDrVvku216J
+tTzmlghsbLlU89pk3CzA4CVKmw3KXQlQuJvy1NeoZdI/hkMZcysrOiMmGncZWCgs5o8WDVndusaV
+yISYJRPRpWx4M3m+s0w/N7meSbfJNzsuJEgya/adugOVUsukm5fI533Ea4+ynL/KwBfjRwqTvoRi
+K17E/1uB8KbyfGeZfm5yPZNuanIY5FvPZ8m+TcJ9YZPK+Hb5eSfnP9PstJN1nORw3SUm2GKya9L7
+M5Bffy8gwwv5+GIpnyNMMWlyvMDWwPkySb4XeX5bmX5Wcj2TbmNKlG+oa7uE2wYYJuOWUFs2bs+7
+AHvCNH+567d9GInXsd7AfrafuBDtsSAmJndkwnuR57eW6ecs10emOWbgTITWC0fJjuC8tlXMWtiy
+XFedyZBEG/iWYSJPs456AF5g0zwKEG8CxncFkDNQjsAM0dsQJ54S9/tJtzj0woOdx/hQ2gLFAXgd
+AOcMeCMQ3isQbwbGdwmQlwKTaFp25qMDfUrHh/sAbNNcBqvh9wjAe0tYbpbAvAsJzTmGMm8Pkx5f
+QKXJTy7JAOsIj/3iX2nN2haA1QtNLnUY6E6RUNqFsl+ovRfIP0SCL3mrn5snLLdOYJ59QnN10uNU
+15KfCXsGN5EvMm8O7xC2YZlQqgjdpTXoacjzzWX6XZXrq+SFme/9xe4feI8CxHsB4/sKyIvjoCPA
+TkYpP/LPgwHx3sD4Ash34udBgXivYHwB5AsQnxQYXwD5AsQnBUYA5FfWy+sXUL4A8VHB+MKSzwKE
+myX308cC4oOD8QWQL2z4pMD4AsgXID4pML7EkS9AfFJgfGHJ9zs+fJJgfAHk+82GTw6ML7L9/rLh
+kwTjCyjfTzZ80mB8ke73iw2fBRhfWPL9AeGzAOMLKN8PED4rML6A8t0G4bME4wso300QPmswTkBJ
+7wkwcVHUOwPCdwKM7xEw3zkWfKfB+A4C851mwfcGjM8UmP265PcCgO8VGA+ASY8I0NmC+PcOfO81
+GK8A6NuC9dz0hfceeC9gvB+wvoDt5efl5137+f8CDAAycB8YwjzIIQAAAABJRU5ErkJggg==" transform="matrix(0.24 0 0 0.24 12.5957 18.4722)">
+ </image>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="28.8564" y1="40.9219" x2="23.623" y2="50.3143">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M30.073,45.716c-0.88-0.377-2.303-1.005-2.93-1.8c-0.461-0.545-0.419-0.545-1.131-0.796
+ c-0.587-0.167-0.963-0.502-1.633-0.585c-0.502-0.043-2.51-0.545-2.386,0.166l-0.042-0.166c-0.25,0.795-0.628,1.464-1.046,2.218
+ c-0.294,0.544-0.209,0.712-0.042,1.298c0.293,1.088,0.419,1.172,1.298,1.632c2.511,1.381-0.292,5.4,1.801,6.571
+ c0.333,0.21,0.752,0.336,1.087,0.461c0.419-0.586,0.628-0.963,1.214-1.339c0.377-0.21,0.629-0.293,0.88-0.671
+ c0.333-0.417,0.209-0.837,0.418-1.255c0.293-0.586,1.088-0.42,1.549-0.838c0.586-0.544,0.627-1.256,0.879-1.883
+ c0.293-0.67,1.172-1.004,1.423-1.634C31.706,46.26,30.7,45.967,30.073,45.716z"/>
+ <path fill="#FFFFFF" d="M38.193,29.6c0,0.418-0.503,0.67-0.293,1.047c0.419-0.503,0.712-0.754,1.382-0.837
+ c-0.168-0.502-0.712-0.837-0.837-1.339c-0.126-0.377,0-0.88-0.545-0.754l0.125,0.125c-0.627-0.125-0.335,0.671-0.21,0.963
+ C37.9,29.015,38.193,29.433,38.193,29.6z"/>
+ <path fill="#FFFFFF" d="M37.188,28.763c0.032,0.048,0.063,0.11,0.095,0.181c0.024-0.057,0.049-0.116,0.073-0.181H37.188z"/>
+ <path fill="#FFFFFF" d="M37.283,28.943c-0.161,0.353-0.357,0.595-0.429,0.992C37.584,30.301,37.486,29.423,37.283,28.943z"/>
+ <path fill="#FFFFFF" d="M34.845,24.954l0.083-0.126c-0.167,0.042-0.46,0.042-0.669,0.084c-0.294,0.921,0.669,1.046,1.214,0.628
+ C36.394,24.828,35.432,24.493,34.845,24.954z"/>
+ <path fill="#FFFFFF" d="M36.519,37.218c-0.078-0.04-0.084-0.042-0.156-0.078c-0.003,0.011-0.053,0.036-0.053,0.036
+ c0.116,0.033,0.195,0.078,0.243,0.133c0.003-0.003,0.006-0.005,0.009-0.007L36.519,37.218z"/>
+ <path fill="#FFFFFF" d="M40.795,20.739c-0.065-0.071-0.138-0.145-0.216-0.222C40.646,20.6,40.72,20.671,40.795,20.739z"/>
+ <path fill="#FFFFFF" d="M42.881,25.875c0.006-0.03,0.011-0.06,0.017-0.09c-0.047,0.003-0.094,0.006-0.142,0.006L42.881,25.875z"/>
+ <path fill="#FFFFFF" d="M36.351,37.134c0.005,0.002,0.008,0.004,0.012,0.006C36.364,37.138,36.36,37.134,36.351,37.134z"/>
+ <path fill="#FFFFFF" d="M36.513,37.345c0.021,0,0.045,0,0.066,0c-0.006-0.013-0.017-0.024-0.026-0.036
+ C36.527,37.325,36.464,37.351,36.513,37.345z"/>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="23.6543" y1="28.6533" x2="14.1899" y2="39.6524">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M21.116,42.576l0.167,0.167c0.125-0.125-0.629-0.502-0.796-0.711
+ c-0.335-0.503-0.041-0.879,0.042-1.548c-0.377,0.04-0.754,0.208-1.174,0.208c0.128-0.251,0.797-1.004,0.546-1.298
+ c-0.335-0.292-1.214,0.796-1.592,0.796c-0.209-0.712-0.418-1.926,0.127-2.512c0.335-0.376,1.13-0.628,1.591-0.46
+ c0.627,0.209,0.585,0.628,0.711,1.172c0.545-0.586,0.293-1.507,0.628-2.135c0.209-0.418,0.755-0.46,0.796-0.962l-0.085,0.084
+ c0.671-0.67,1.258-1.381,2.01-1.967c0.628-0.502,1.506-1.005,1.926-1.675c-0.544-0.083-1.048-0.042-0.587-0.711
+ c0.419-0.67,1.467-0.209,1.591-0.837c0.127-0.586-0.836-1.256-1.004-1.759c-0.168-0.417-0.335-0.962-0.42-1.423
+ c-0.208,0.21-0.334,0.502-0.543,0.712c-0.335-0.585-0.085-0.837-0.795-0.712c-0.419,0.042-0.837,0.335-0.963,0.753
+ c-0.166,0.503,0.167,1.047,0,1.55c-0.125,0.418-0.587,1.045-0.963,1.213c-0.125-0.459,0.251-0.921,0.126-1.381
+ c-0.712,0.042-0.921-0.335-1.466-0.669l0.168-0.084c-0.251,0.167-0.628-0.418-0.921-0.586c0.502-0.669,1.214-1.172,1.758-1.8
+ c0.419,0.795,1.089-1.13,1.424-1.465c0.25-0.293,1.173-0.585,1.424-0.167c0.291,0.502-0.419,1.046-0.67,1.382
+ c0.459,0,0.961,0.083,1.338,0.334c0.378-0.292,0.879-0.753,1.089-1.214c-0.335-0.208-0.629-0.418-0.879-0.712
+ c0.25-0.501,0.194-1.154-0.325-1.045c0.084-0.051,0.162-0.108,0.242-0.168c-0.964-0.293-1.298,0.335-1.09-0.837
+ c0.084-0.544,0.21-0.879,0.67-1.381l-0.125-0.042c0.251-0.251,0.46-0.586,0.628-0.879c-0.042,0-0.168,0-0.21,0
+ c0.042-0.183,0.003-0.333-0.098-0.456c-7.169,2.409-12.423,8.983-12.896,16.845c1.2-0.378,1.926,1.715,2.32,2.697
+ c-0.127-0.46-0.209-0.962-0.419-1.38c0.586,0.67,1.256,1.046,1.34,1.967c0.085,0.586-0.167,0.545,0.502,0.795
+ c0.503,0.168,1.047,0.125,1.507,0.336C18.688,40.944,20.11,42.785,21.116,42.576z"/>
+ <path fill="#FFFFFF" d="M33.84,22.024c0.083-0.167,0.754-0.292,0.964-0.335c-0.043-0.668-0.336-1.381-0.127-1.967
+ c0.101-0.301,0.337-0.69,0.607-0.974c-0.321-0.066-0.644-0.123-0.971-0.172l-0.351,0.044l0.33-0.047
+ c-0.922-0.138-1.866-0.21-2.828-0.21c-1.273,0-2.517,0.126-3.719,0.365c-0.143,0.358-0.353,0.826-0.353,0.826l0.112-0.017
+ c-0.407,0.688-1.621,0.729-1.661,1.565c0.629,0.083,1.299-0.168,1.926-0.042c0.503,0.795,0.711,1.423,0.252,2.302
+ c0.292,0.335,0.668,0.043,1.005,0.084c-0.086,0.711-0.754,1.255-0.461,2.051c0.083,0.293,0.292,0.962,0.418,1.213
+ c0.251,0.377,0.378,0.293,0.838,0.461c0.46-0.879,0.375-2.008,1.339-2.511c0.629-0.293,1.382-0.335,1.925-0.671
+ c0.377-0.25,1.047-0.752,1.047-1.255C34.133,22.443,33.714,22.359,33.84,22.024z"/>
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="41.2637" y1="32.9487" x2="46.0094" y2="47.4588">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" d="M41.232,21.067c0.021,0.026,0.04,0.052,0.058,0.078c-0.067-0.057-0.138-0.111-0.203-0.165
+ c-0.052-0.03-0.104-0.062-0.154-0.092c0.442,0.503,0.608,0.906,0.608,1.721c-0.251-0.084-0.459-0.167-0.668-0.292
+ c-0.253,0.879-0.378,1.548,0.082,2.385c-0.123,0.409-0.482,0.938-0.383,1.39c-0.238,0.473-0.488,1.238-0.369,1.708
+ c1.004-0.837,0.92,0.042,1.59,0.586c0.208-0.376,0.376-0.795,0.628-1.171c0.125-0.168,0.377-0.042,0.419-0.419
+ c0-0.292-0.378-0.335-0.419-0.543c-0.083-0.419,0.21-2.177,0.712-2.302c-0.08,0.598-0.124,1.233-0.235,1.835
+ c0.152-0.013,0.305-0.041,0.455-0.071c0.003,0.257-0.189,0.646,0.062,0.923c0.441,0.484,1.11-0.089,1.565,0.366
+ c-0.224,0.369-0.342,0.184-0.666,0.251c-0.36,0.075-0.4,0.236-0.543,0.62c-0.158-0.378-0.533-0.796-0.807-0.243
+ c-0.194,0.394,0.052,1.048-0.344,1.332c-0.335,0.239-1.232,0.334-1.489-0.034c-0.243-0.35-0.028-0.883-0.334-1.209
+ c-0.063,0.342-0.269,0.658-0.228,1.001c0.036,0.318,0.303,0.561,0.17,0.874c-0.272,0-0.617,0.02-0.819,0.186
+ c-0.167,0.135-0.171,0.391-0.428,0.493c-0.227,0.089-0.582-0.045-0.767,0.163c-0.091,0.101-0.11,0.48-0.162,0.622
+ c-0.233,0.029-0.521,0.057-0.729,0.144c0.095,0.507,0.824,0.659,0.777,1.246c-0.028,0.359-0.169,0.348-0.504,0.295
+ c-0.361-0.058-0.765-0.082-1.122-0.154c-0.013,0.745,0.426,1.229,0.041,1.983c0.132,0.061,0.247-0.039,0.361,0.01
+ c0.088,0.037,0.162,0.147,0.218,0.169c0.228,0.09,0.404,0.137,0.67,0.092c0.28-0.048,0.396-0.13,0.547-0.342
+ c0.054-0.077-0.016-0.214,0.068-0.307c0.08-0.086,0.214-0.075,0.307-0.148c0.365-0.282,0.346-0.97,0.719-1.213
+ c0.062-0.039,0.465-0.025,0.62-0.083c0.221-0.082,0.337-0.053,0.495-0.214c0.124,0.476,0.399,0.861,0.76,1.21
+ c0.359,0.349,0.818,0.713,0.046,0.845c0.247,0.33,0.323,0.449,0.614,0.067c0.215-0.283,0.339-0.564,0.602-0.788
+ c-0.479-0.45-0.898-1.005-1.243-1.582c0.501-0.494,1.635,1.117,1.656,1.541c0.024,0.464-0.232,0.661,0.241,0.877
+ c0.641,0.293,0.413-0.452,0.436-0.917c0.384,0.212,0.77-0.176,1.125-0.046c0.182,0.065,0.213,0.283,0.334,0.411
+ c0.192,0.206,0.123,0.16,0.333,0.22c0.425,0.122,0.624,0.003,0.756,0.543c0.08,0.329,0.191,0.762,0.053,1.088
+ c-0.206,0.483-0.866,1.12-1.344,1.29c-0.493,0.176-0.941-0.228-1.384-0.413c-0.709-0.296-1.421-0.555-2.112-0.93
+ c-0.679-0.366-0.541-0.11-1.042,0.146c-0.53,0.271-1.057,0.682-1.624,0.87c-0.762,0.254-1.834,0.379-2.659,0.377
+ c0.192,0.31-0.392,0.864-0.562,1.171c-0.672,1.047-1.047,1.633-0.713,2.889c0.168,0.628,0.378,1.172,0.713,1.716
+ c0.167,0.251,0.292,0.628,0.585,0.796c0.376,0.293,0.336,0.125,0.838-0.043c0.544-0.167,1.465-0.292,2.051-0.125
+ c0.208,0.043,0.293,0.251,0.501,0.293c0.085,0.042,0.671,0.084,0.712,0.125c0,0,0,0,0.043,0c0.126,0.545-0.168,0.963-0.168,1.466
+ c-0.042,0.545,0.084,0.46,0.294,0.963c0.376,0.879,0.082,1.968-0.21,2.805c-0.336,0.963-0.084,1.631,0,2.637
+ c0.047,0.563,0.345,1.089,0.53,1.611c2.281-1.364,4.252-3.192,5.782-5.357c-0.259-0.639-0.451-1.269-0.16-1.779
+ c0.628-1.13,2.009-1.632,2.302-2.972c0.085-0.461,0.043-0.921,0.21-1.339c0.11-0.369,0.351-0.551,0.654-0.668
+ c0.304-1.347,0.465-2.748,0.465-4.187C50.446,30.435,46.753,24.387,41.232,21.067z M43.3,25.54
+ c0.023,0.025,0.037,0.056,0.045,0.089L43.3,25.54z"/>
+ </g>
+ <circle fill="none" stroke="#1996CE" stroke-width="1.5" stroke-miterlimit="10" cx="31.464" cy="37.341" r="19.373"/>
+</g>
+<g>
+ <g>
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="70.3066" y1="90.6387" x2="36.8256" y2="52.0069">
+ <stop offset="0" style="stop-color:#E6BA21"/>
+ <stop offset="0.546" style="stop-color:#E6BA21"/>
+ <stop offset="0.5592" style="stop-color:#E8BF38"/>
+ <stop offset="0.5886" style="stop-color:#EBC964"/>
+ <stop offset="0.6206" style="stop-color:#EED287"/>
+ <stop offset="0.6545" style="stop-color:#F0DBA3"/>
+ <stop offset="0.6907" style="stop-color:#F2E3BC"/>
+ <stop offset="0.73" style="stop-color:#F3E9D0"/>
+ <stop offset="0.7735" style="stop-color:#F4EEE0"/>
+ <stop offset="0.8237" style="stop-color:#F4F2EC"/>
+ <stop offset="0.8862" style="stop-color:#F5F4F3"/>
+ <stop offset="1" style="stop-color:#F5F5F5"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_6_)" points="75.831,57.282 57.784,54.66 49.714,38.308 41.643,54.66 23.597,57.282 36.654,70.012
+ 33.573,87.986 49.714,79.499 65.854,87.986 62.772,70.012 "/>
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="54.0166" y1="83.1514" x2="47.28" y2="44.9463">
+ <stop offset="0" style="stop-color:#E6BA21"/>
+ <stop offset="0.362" style="stop-color:#F7D709"/>
+ <stop offset="0.8834" style="stop-color:#FCEE35"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_7_)" points="69.301,58.748 55.767,56.782 49.714,44.518 43.66,56.782 30.127,58.748 39.92,68.296
+ 37.608,81.775 49.714,75.411 61.819,81.775 59.508,68.296 "/>
+ </g>
+ <path fill="none" stroke="#9B7F2E" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M40.24,54.864c0.771-0.111,1.685-0.775,2.029-1.475l6.816-13.812c0.345-0.699,0.909-0.699,1.255,0l6.815,13.812
+ c0.346,0.699,1.259,1.363,2.03,1.475l15.242,2.215c0.771,0.112,0.945,0.649,0.388,1.192L63.787,69.022
+ c-0.559,0.544-0.907,1.617-0.775,2.386l2.604,15.181c0.131,0.769-0.325,1.101-1.016,0.737l-13.632-7.167
+ c-0.689-0.363-1.818-0.363-2.509,0l-13.631,7.167c-0.69,0.363-1.146,0.031-1.016-0.737l2.604-15.181
+ c0.131-0.769-0.218-1.842-0.775-2.386L24.611,58.271c-0.558-0.543-0.383-1.08,0.388-1.192L40.24,54.864z"/>
+</g>
+</svg>
diff --git a/Sankore-3.1/resources/images/roundeRrectangle.svg b/Sankore-3.1/resources/images/roundeRrectangle.svg
new file mode 100644
index 0000000..bea8c42
--- /dev/null
+++ b/Sankore-3.1/resources/images/roundeRrectangle.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="26px" height="26px" viewBox="0 0 26 26" style="enable-background:new 0 0 26 26;" xml:space="preserve">
+
+<circle style="fill:#CCCCCC;" cx="13" cy="13" r="13"/>
+<circle style="fill:#999999;" cx="13" cy="13" r="11"/>
+<rect rx="2" ry="2" x="4" y="9" style="fill:#FFFFFF;" width="18" height="8"/>
+</svg>
diff --git a/Sankore-3.1/resources/images/teacher_close.png b/Sankore-3.1/resources/images/teacher_close.png
index bee2ea0..4f2baea 100644
Binary files a/Sankore-3.1/resources/images/teacher_close.png and b/Sankore-3.1/resources/images/teacher_close.png differ
diff --git a/Sankore-3.1/resources/images/teacher_close_disabled.png b/Sankore-3.1/resources/images/teacher_close_disabled.png
deleted file mode 100644
index 8f3c988..0000000
Binary files a/Sankore-3.1/resources/images/teacher_close_disabled.png and /dev/null differ
diff --git a/Sankore-3.1/resources/images/teacher_open.png b/Sankore-3.1/resources/images/teacher_open.png
index 17469cc..4f2baea 100644
Binary files a/Sankore-3.1/resources/images/teacher_open.png and b/Sankore-3.1/resources/images/teacher_open.png differ
diff --git a/Sankore-3.1/resources/images/teacher_open_disabled.png b/Sankore-3.1/resources/images/teacher_open_disabled.png
deleted file mode 100644
index 99e78cd..0000000
Binary files a/Sankore-3.1/resources/images/teacher_open_disabled.png and /dev/null differ
diff --git a/Sankore-3.1/resources/images/toolbar/bookmark.png b/Sankore-3.1/resources/images/toolbar/bookmark.png
new file mode 100644
index 0000000..ffb920f
Binary files /dev/null and b/Sankore-3.1/resources/images/toolbar/bookmark.png differ
diff --git a/Sankore-3.1/resources/images/toolbar/bookmark.svg b/Sankore-3.1/resources/images/toolbar/bookmark.svg
new file mode 100644
index 0000000..a53f1b6
--- /dev/null
+++ b/Sankore-3.1/resources/images/toolbar/bookmark.svg
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-20.294 -11.062 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g>
+
+ <image width="158" height="158" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKMAAACjCAYAAADmbK6AAAAACXBIWXMAAC4jAAAuIwF4pT92AAAA
+GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAANV5JREFUeNrsfU2zbclxVWadp+Hr
+ocNBMGGAuhsPCBkQYcJfzDE/A0YQEJJagB1CWJIdMhJ2wIj/wRRkSzjkADxE7daEiQcEw/ZMeruS
+vasys1ZW1d7nnPvO/XrvXun0u/d8n73XWStzZVYW0cvPy8/Lz8vPy8/Lz8vPE/3hl0NQf375uz9+
+vf7z8fa7rEeFefuXywF6pQeK/YAxLXpbYqGsv6+/4pHdO7af//hffvnTlyP+Akb60u//6Qa6j7ZP
+vuFFAcflOqJ/RaxgLDc3MBL5I9arVzBWtPEGxu05CMDIx2D8NDH/Xg/Q//4v/t6nL2B8D37+9grA
+9YN+pCDZQPd1KpCiBkakvfW6tP5y0mNUbpoA0MHXAS/Njm59ub0D/ul663eAWD//0T9//8D5ToLx
+l77zo9fryf2IFTDrvxsQv16k11HRQIhM2EC43a/eO6//PQJgsiPZA47Hg310wEUvBZxE3zFg/vA9
+AeY7A8Zf+vaPXovK7yqDH27slxRkXHFWoWWSuuFqB4RU7+ss6JSJAOTGeIhAA5y4Wk8Y8zwY/e8N
+mOv7+vb2e37HgcnvAgg13vtwBdcnG4ZOCr7UqApgCZKsQHrVg5DrA3sWNAYsD+PhAHKCv8WTGgms
+GdA2OxPl9vVB67/ZY9H6oFzknL+9/v35D95BUPIzB+GHCsRPNANeAQFA5BasFXAAG27XYmJSHgQg
+HFhQn465MZ+Bz4FXkMSczmhzeRM9K3KH0jxhSxEpmbvIp+vLfHvD7Pr353/yz/7upy9gfISfv/nt
+H75eT/aHr4g3EH6NGtPxqcZ0lbhAlnfY0BMTiwkhgR5YEKwdiDk78NkdJEaNzJcfbHHcxasKWHuA
+VnBu8WVhy//2zNny2YDxb/zuD7ek5MNX62U9+Z+cwEApjMgc4sP6a7xPYMMKxc0nZIwJZyBECbbn
+TiP4GEHXq/F22+nM8d4es8go5DyCVAycAMyfiEr4cwUlPwcQbnLM24Xpa1/QmHAGxOQcaOgbZdl+
+z5rLoCSnCQirsQ0sOAEggqWGCMQW75HAEx2hDEEpMYZM638QpPYwBKbkBsotrpRnCEp+uiD8E40J
+S2b8tQ0EKyvyqzNAdCObzbapLPYKYsMU8uhjECaiIPMsHACoj3fwdbZOfbMBkPuHXAxd8W4OQzFw
+rvdb4G4GTNkyHWPLCspP/usziiefHBj/+jf/WOW4gPCrxkanwog1MTkCIjGH+FAtm0GWezZklOQO
+hEz+zPsA5Ia3vvhilHbi8zKdpceig8uuLPfYA2Y2tqwJ+QbEb21e5XMAJT81IK7//OP1jH71laYX
+PRAtaz6dAeIGr1c1EdnIrDAkynIak5MaF1pS3YGQDgCY9JoZ6Hjm3PCIQu6AG5IZBSkDVQqNwDRi
+RFDmyrYbEL/21AHJTwOEJsnyxe2gbWd/BdsKuLcDIsaHCdKWjg09+EtEHhMm4QGEPQPaHwP4ujqM
+s64cHHWIE0UoKDOhfHcMiowpEtnSQLnJ9xpTfrp+wG+taH2yLMlPBIi/VSW5mjGnEtet8WEnzaLJ
+SyK3b3aBaBnMGVkuIE0QY2JMWBOgBkIGQ4c0O+7Ah3I/0CObG757NqQ5OtKxJAK0meDOmNKCy8qW
+wJQEMWUB5RNlyUcF419bgbi+gd9iBWLaGEzhtbHiF9TEtjAsKYjQ0CYE0gEQZ7KMbMhWeSFrIfNX
+aLUbZUlMRrizdPz5pbLx9lxZfctLyoHZcQnet4JUgBozAFNaEiNewOHKlPpAgURnk+4nyZKPAsZf
+/Ld/vIHwi+tZ3Cybr1YWEsY4ccyc6/VvA8QhSfGKSwOiS/I5EHpKBLKu4Ds5ZrYQod7vdHDQ+zhx
+sSRJidJAar53YTiJ9s4MlBpQlvtiolMAWW97UizJjwFEqmz4leRE5fLsQJxlzgZEr6ywWS7MX3Dn
+JR0BsTwvPtZiQ2NDDpY4BxAyyD1PACjFVtLXQLd7POg8YUWZGY4CYEwVgw7MBTXbPHB8jNSsWv0f
+ycCS+QnK9oOC8Re/8YPX68nZ4sOvqI9X2rR25DmW+ZTNBCFT099y8r+gyipMFwHRgGWJjQAb2v9P
+HgNGEFpcOQVgS21GV5Ev0Ok5W3qy0gNzsTsoWyIoMyQ6ClJnyewKrrL9BAD5YGD8hRWI64v9o40R
+GcC3yfNJ5fk0kedUM2FlwpaySCzxleejAyBiooLx4UyWE1YUDZAAwnQAwLGXsQFZLjwhHvjBg+QA
+mBsOEZRZonznyJIbG46yXQH5ra1N7QePBEp+KCASALHEUCq4xoqz7LmPE725SxnTgMjqI6pPOAWi
+PZezHMiyRwuRDVtWTRMQ9gzYgU86mebjYy9TgpRQepFezyE/cVBmvWe2NjRFLrKkxZJZWtlHAVmN
+cpGvPUYpkR8UiA4K66KmkLRo3bmT53pbHyd6wmKU2RrB6JQuAKKBjffZsBjuEgJJNx9TLPi1sktc
+gzBEjLvGjswNb0yiGzgllAgFyFSkJTfLEUseAVLkJ+ufnzw0IPkhgEgARGTFo6RlV571SkxYSoAJ
+lZWU2DJY7mPEXSB29o7d5wTXaUd4s705OIwBa13bWHTAz9SmAzZl6AAXQcaEjFvgtgzSDSwZY0mF
+5FMBJD8YEAdWZE9M+qSlz557eU4gz7M4MfEdgOhflJolC7fkiHdASOC1gyepmGMaqzLzEHGWxEgH
+UoHSnyBPNo8HbaACymIRaT0wsCTK9hMCJN83EAmAOGPFPmkRlefEMXvu5Fkzjv048WQm+WWMGGSZ
+NCt/NSQxXGPBUPAZATiWDaM+H/mMaOm06jP2M7asuAclKzUaS2aLJbNm3ncE5ML8yUN0k/ODAHGH
+Fc8lLYauQ3mexIm1tk0c1sGklqxMgdjL8oQNhwwbQDgAMJYRrzrWElMWAlkWVOcBlHa/HFmySLPK
+tiU3e4CM19f7rb//ZMXxJ/e97ibdJxCpC5QmKzdrpcEq/eyluRhaYTJiZbzNZxFv56Jg4VgCoiU5
+S06uBqKZm9xuSP4e61fF7SJuf68xq70m13KjOQYXXrakTchei5O+YXsv7BWk8f1UN55NJPRz1Pue
+zKxvC3r8+OAaoOTH0b/gf2v983fumxnTvQPRABflWUHob6AmLZCgjutXuJrM2oUz+In2fJVx3ROk
+5iNeDESGMIAgZuQdEPYAdLAkpsTNprzohxyA/j0YgJnaOzRQQnnSzH8PHC4FpH3yjI6CLrFYf/3g
+N/7T//r4ycv0HhBnsaKyhFs5HiumavOYldPVnjVp4XKg0oE8v+oTFm5J0KlLVvaAiKk1gHBsnvDO
+Cn/eRuRD/Hjc5y19Xt0vemkSWoDmEi0CNcEmrRY3Vl32MuJZyV6qZA/x41Ljz3uVa34IRsRqyyuo
+tsQMeh4rWsnvC3vmdqoWkPuJqYsTYYHBK8iwjVyuAaLbjcq+CEIeesg6E2caOMZkWnZLghLadjzG
+Q1DmFmZeCsgSF5InNeVBb6SuXpjFjwrQn6xA/uQ+hgncQqa/uAdEDn+KjU2qK+Vae9gQK/brSFKT
+bqNEB5/dN8gzxomaSqDVc9Ks+UIgNv10y0klEmVYEc7NGTVtNcllC+XqH/2V7Wq7PoUKkDn36jQk
+dQqkxqUg3YNsexzZSfYq/+U4YCx+4tCu7IWE1JbkblL9B7/+H//nx08KjMqKX9zn3SZNCkD/cBxi
+RQqxIo2xYkhasBDMo59YewjBg2xxoh5YaXbRBUB0rk4p2Dw0BaEBsEHMshsPUdTS0suAS62ht4yo
+AXMEJSf2NTkpOehaTHsESC8O9DX82jhCuMyCrbZffj7me0ho0n3IcyfTKjgbjhorxmRZF9/TPitm
+WPWHrJj84ALQOfjhxKGxtiG3JSZzICa8n12XGqhmIEQApuJ3Sks+DGjd/xJhNk14f04Mge4ElM6m
+nvxbenwZILc7hfEFoDaa8KEC+WO3hObW7Mj3AUT0Fi9NXIZqC8SKs44c/VaHpMVOonTZc+rixGKc
+g31jfWU9EKkDYmBDnCDlf27PIdD53f8yiEYoAXYZjTc1SCu0eGZTV1pJbWET0TiwuoUYR5r53Rpu
+1zeoLTx1aICVDbfYsMWPWZ/Pq9hZ2840mVlq7Pmp3DB+TLeME6dHm8jjtDj9dbRzar83D6vulktY
+UU94bgnEIM8WJ57i22zfdgAdIXOCzYRALMxUKRJY0GxJjRq8tN4YNSUQ8fV3CBPRQLenKbE1VKUs
+NPD7WiyR7LVEI5gdhozLKupwA4sfcaWkyzW1eULoRXKNH7/7azdiyHTzOHEu0TSVaC3BtSARhjWo
+r1gfSUOsSLoENdmygS5paQw9l2e7Shq79TFiW/iV3FzEdNxuopNmTa3m2ADICrYTGOLM3SUlNL1V
+d0dgJpVNY3sva1F7fy180IFVM0CqD3lGrnFhWZ/M+MArqob4bz84GC+NE5mmPQJjxUXadWKs2D1e
+E5cZkx2y4sl9xlahkUmc6IzX1JpcmnlYR92ymcKGUDaHNNoBmCB4TWSxCMe4UPMf7wzR91gByvZc
+YCvZpLWKQ/+llce9Jh9jSGsujnfEdrhk9hqoyRl2NEP8FuyYbi7P+1n0KNF8WeKCsWI1idqAz3Os
+aNlz6uSZeguDQaKGGFGfK3nqUDP7wIYNhKnNzisPOZW4tl5Ofl294O/l9tRi3xnDGhja6L+GzAT+
+ZgLfP2HywRjScpDrokTS+gRiMnP/7JhuLc9RoulMFg3ljE6ik/UP4jBDYEVuYxgKb+6xolk9EmrO
+TPhlYVz0h7EhmXUCAqfvKVFDSosHIwgNfCcoE/qx8fYhDuP2auypl+RxbwCl5cZe84byJRMkZFiI
+SqEW5ATQy7VohSIBeSA75q4PKbUE7INf/aO3Y8d0c1bsjO4BpGB0t0FdM4lmHuycwK4cAHdnVqSQ
+uYxZc5DmBkQMEFOj1QDCVieGyjSYdR4YQkIjECsyNVC2dg1zEmCMHwASY8iQ1LSEJsh1YMfakLzL
+jvH0UJhnZMnMr/7h//j4XsF4TdLST1NAf2rP6KYdie4Tl5lEe1ig+EBWpGNWBHMG5DkkMhxmOyIQ
+DUOn1DpeEkUQUkh8NfPYiRkNIalvqQBQBt/Tn/Q8IFntptSdmpBdd+woE3asr4sKFaR6u/Ljt5Hr
+dHNW3LF0RuDGeHGWRffP20s0R9nHNKd+OKldKjusSMCKuCC7+xZZd49EKQdZDmwI3bvxdy/UDC1j
+rerSEmzsS7Mv36vAkv7YJr3ckpH6saTZqIRhhwO7nShgR7N6CDJrqJ3j8IIo1fW+H9yVHdMtY8Ux
+Xmxfwd7SwQHZPLKkZ9GHEh0TFyRQB65L6YQVgXlQ7ptFmOyxDKsNIhCtq7w1dUFregfAlnFLuGgy
+ZI4Ozv4BL8rBUl9vAsjUiixQhmrs2B9rZN7Ajh5S0dCnPpy2KNVWu/7t+2LGa2NF6Dmx72YXLwLu
+MF4EpXaj+0iiMXHhSeLC3C3W61iRgOmcFaHwDFU0xqw5UduaA4HIwYYM+Q23qt7Y2AirGwmB2TXu
+EniPAyA9qSEo0re9bEo7U5/MMNGUHd13nEi1ITF7T+og1dvP61+5AzumW2bQPC8zDiqdJN4gfct+
+Hy/Cm8UsGvqsBomuPRWwYGqyVcaUFUG+mzyH0qCWG2UAYjTVuykUPDZDpJQIZLt53QEfsP0bJFY+
+vq9GxN70YPdK/VSqeux4Mltlnlmfker+8SmubLwTO6b7YMVZEjOUazt/MV8QLw5ZdBcschcBCCKi
+n5cIGfSMFeOwenCc67eEE/HAiAkxaTGcVV88eYGOnrYkAcuDmpy0iRfIkhChNPO+4yVG2mOs0KS2
+ujZx2J5mbLWsicxMqsM59UQx+GXbH69/5T9cx47pVrHiJHmh3eSlk+UUP2iLFynKRMtUwOjmFpP2
+/WlHiUuMHUdWhFWzWHFQeeawbiTqeHMkE4CwZevNIEQkpjhi0kqHYacPKPf4ycekKYX+HA7JDLIj
+Zta7Um0sN8uqqT9mPJwrtXr+za2Y8Y6x4uhpn2LcFj5N/7UU3T5XcH0yxXjR5AKN7j6LRntoKtG4
+j8a4UQuuHGjap6x4CoPow5YfAMSh5xG6y/ratMaZINNgQeK67FjGbOtXFDZhUWKgSBbIrLmx455U
+bz2ke1k1xo3IktKvrGD64O9fETumm7HiWHkJoUWbrnqcvAwTksDNZpGzMal9Q2XeHdevVYl7ZmCW
+7ikKtTk7OroZKZCBHjogwsq+AEDrjWCX42aD1zg14VINaOr11uOoFlhrj+wYNtlsgbBEd2JPqn1G
++fn2Qx6CUM2s+Qp2TPfEitPKC1/YWzlLXoagcOcm44g8iRf3mjimEs1ILhyaLpA9qVsZDWtiKbIY
+mSRT8s7ZZufAFIK+C53sMe5MaAKFMWGKmZlbPcRzqR4SmHk8VQ3w7r4yIYw+iZmYv9eD8a6sONo6
+18cFTOcCTNhA0tmyzWbnZgH1dMn9bAfuykI0gizEmeKR0ciKcT4PDz2RCrq6+iwhC2JLd2VLXAwU
+vWiUawk2nxD2YbZ6N45hQanuPmVnQ8zjRuaZCu5sZxzp9vWXv3+ZVKf7ihV38TWxdQ4rL2jAwmNP
+s5hUWn311L2DQcv7eDH0VMrkA0nsLmphHJl8pklzLnf/Qtc5p9TWbWHsyEPfGllMGVYhbqCUwUwV
+Wz0bj133mSdx45gownGs9erpeQlkkcbTfbFU33SixKUgNVsHv3nxA8r+ARp2JOX4HAe7CTDvTAHj
+YQFpdL1pJtEtVpQ+fgiYidZPSp5hV68w6WJ/W0bRAbL1mcdErdufc5BqFIWu/2T2ecNxGc6HWPdV
+Z36Hc8S7bJRIrpfpt0lc+I63pZ1Jwzz5pqSeYPtH8jyG3O3JkJlvNrGE9bRLJ9FhFA9DgoTA5xkg
+qTRYlDXexpJQN2YY75BiEmvVkxDBwOrrUEQ5/M7J7rnhvXPT3xlH9c2eC/5+/Q++92cfX8uMN01c
+Zh/zaD7hHm6lIzy3dS59goMDzj1rwJe+7VfOnSOAxCidvQnWIOYPsLtCNLmb357C7iAc9n7jaKMw
+t5hllOomw53Fs5/EXOElh0f150F4mixuQPzXDy7TfIv7zjbguzhrv56hp0d6xiw0KWNGAEbwoBFP
+1LWPQ7kPXW+7a2pRrHA3OTwwkuweT441LzqYm3v2uJ7uDoiLX/MhY8aHwvjltHjxkwvv3Vf6cKyP
+mdD8jgEn9jz641InxV6T5/1Dwgfvd7RaZP/Lyvd6vj748hmpTre1dN6Ln7uxC0/+7Go/bwkGfvRv
++bHZ99E5qU4PFi8+oR+5r+fd2chcdm6jNmX27H1FntexuMtPetdAJpfeJnc7IbgpQfMkZXiuAWWE
+O2mw7QetE2gZJ9DC+IjZ+5MhVhzvtl/3kDscuzuAVnYe+PpL3/uzjw7BeEuJlvt5koufNt8KzoJT
+DznO1Z78izsQ4HZ+tplkbvMUbdZInT4iJLZjkAjs+wd7HYiMgJFJzCozKpUOq0exgOxfnW9wNuVM
+Vp0eVKK7vU7yEcoQChp4yw1Rb5Uf6cYg4nB3megjD3s/N8cybMELrFgwlivm8vqhc1bobdfl7aY4
+I9H3NfDOEum34mjX6muE44ObWrZvS/gwwvz2yj/ZtP3Ms8q9y/RV9C6D6AjLeOtMNiRYDXLueSfw
+PnhbBw9mG6dkXrtNi53oKO4Y7SSYG+izsmUDZVRlYFPB/c3tBkHJd+D2Uejl50kOjs30IEm0kroO
+77di03RD0rvsttqBLXvOvUw+lF/HEbk2bis0RnBLCvpT5XIqVyQgvrVFe1iOj9EhXW2yFzCcP3gD
+pBMilT/bRSpzioNTyVVgV4PwFiT8R0acUCckEmhSZFArIQnP7Nt3wDeQO5INr837oFymHQcPn8AM
+O5DJDhOxfzgeehGFJiOG4fcsETCLXvAbvMfQ0klY2/5MBsnLrUMo5ie1VUg6tW8ji7OGhDaiTnVZ
+qkxbvOj/ab8jK44SDccJ3k9NjrhFrn1iJNKFETPlaUDScAYessARy91OXnlXlvTYZfngl7/7448e
+Coxy12x3OftsDTDLhORsE0fuDqhM9tmTLjsQmYIfN/xpJ1xjNALQFHbMyI7iMw2pMR2C0EApDspM
+yIyGRo0n23ZDdpsnWfWlmr5Tvwl6R44Eu27hsejjeml5ObKgFQ2kO2Ac9psT2Tm/u37jq/sxuxnf
+9lnbYPJIUF6RsDQtQ38dFJdRqmu7k/iENz1D3GeS5dxpEsN63PWAhgXdYhgvElsXB0rr0Cdo2doA
+tjVA1NHz20bjua6qZcNw22RrTOpEQgLUA7Fnxe7LJVOJFoglthfdaJp5jC2li33UPko6YJ7OKc3B
+OeYLbdJ0y0y6Bx1DUpgh75SWIU9kXL+gkw6RoTlC5qFA3o/EMVWOGACG3JNqyxXFk5ieHclkODAk
+SnBuv2iwqH9qQJmzE+IEiC0ranKLH4TLxNlOoiWActjnrUtexv2tMUYO9xxifd5rX73MB7m5TPd+
+m8ZaaBQLfo3RKvE1F+t3kbP0wVCwTzCjjgAZZEXQBkZPsG0QKUMq2ks1BnEZrT+/+hCQljmbp2gg
+E0Bdsxub7A5ArI91ZhMh2NicBH3KlnBLPBb4uQXjSglrlSQHyybsLBwyaRn33fSDuN0n9XbZg4Ax
+nkxZZP4G0L/LY3Ii85gHkhyOQO0AUnej7xjSc4Eun0Sp9vtmQW96ZEffJ0XnXEMGPQOkvbcMLIgX
++KG2j8sBECHedSDOWLHFlJ7a9/4igjSDX1W3jrFj045dFiRnCmBmTPZmCawcs+OrW2YtfPB7oBz2
+g9L6s8tSQanbsfU9ZHpQcmHN7Qxw2dhysfARmhIz1c5k7TCuAaeuiPPws70pGzphQaH9hyPjbhhY
+b1nP9rZWZXvR7YtWlqwa+tg5X3ejqWSyZKlNYDpoUiY7FgnYiWBXBcMyANGSli6DbsZk5w/Al4fa
+1GAHiAEL1QPjxb6JtpyLLisSiy2l9xrZ7XlTrj3/8dVNiZGmXSD+OTFRmN3fMq5Xw80VRRY3Jkxr
+xAu11hZfHYT4hRC2ELZ6nCVc1RyjfDGKjcZMfr42mkllSYFknSBhRMMVgrys/5ZF7fU08wyQDocs
+mhJVhHibmOxseg5ODI1A9N1QnfSoyXQmzMapGoRZCSBHic5ge3NTKleWo3hR+nhx2Aa24X6h8x1C
+t48ZqXlhGMDhB5cYM0pvMPdJzFHcmOBk4GbgM6nGuoYI5K7i33aMtOpJb7FCk0t/nJS99kBH/bkz
+xolQ4TQicpmGIgw4SSrVWW9kjFt7IDanHEGMHlEALeRqElOWPYmmYMSL+8ITJ0h6i4zHusN23esv
+/f6ffvQgpncsk8k0icEMliXu8F1Bls3NDlVVjBsFDVgI69xvrAH0rGwns0Qm7KFCjP5kYRuHas67
+gIwAiKCsicfcf7fbBxBCJm7SjEDsKz+NFTEJE7dz+sSld8ZRolmG5oxC7/oll5j8SG98iyUvE8rf
+gPj1e5XpWSltPVHbBueT5L7Gh2Ckum9XT34334SqsIa4kaNUi8pz0lAxa0zA4CWySVqV5CrOok8e
+v811HJRKsMu1CvqGgrJ+RbeUVMmuCGqkXh6HTgiT0AyQUMkhewwN4CHJsJNq7uLEKM+iv9pv3G1u
+hAmi4F6Z7v4sEGzmmURDvCgdE3XxokC8OK6luw9m7OLwIdjIaC+wA4iiHyPq1OuzcWAP9xunUm27
+Onm8g16f9w+GQli2620HKJIg1x6jSYvHDKsThiy7kho6MCumwI7jJTcWDMakseEiEYjd/r4ORL8T
+Wk6Y4JxhRXty6aouGJ+iRFu8KJMqFuvxXybOY77vBKbPOiCfqEeEa9x4UhRKmwpRixTMofqySfVK
+R2SjFtlpS3RD8/qN77NqqB/XRKZjR+oTDh0aUVBRuY5Lwm4bwUoNz3OdtRMYsmhwHQhhp6iwpNiC
+foVmHruupocPfdccMmPlFxmZLBPGhRKsJ+msKHt4s8L2WDHG8X0WbTlADplWlOjtmjd9vCj7yvDq
+nuRZAcEevElxRkhObVW5aMnXv1lm8ZhaHUl1KhkquVSLK6+X9eprrr9sU0M2YvLFee1rorV7kbJi
+FOS6HPVEbSGq2L40NckOgNz239vunvytbHvy1WckansPgmjwQduVoGcq/mVe31ImdH0mQCTsICf0
+A6GJKDfyDnGhBFZs5JshFAglR+l6gHYkGuwc2Sld32/MKIYOjRtPk7hRKmX5PXXofHnsUva0E+td
+sgozWbjHlcUIPBkRdffEr8Q40plYyipQtW6qMbPdR+oEtU2uU7Exy36Pyc6X1ZrLl6EBUieMsAVx
+0gabNqasZmf4+AnDj93aAVtn7hgCzYCYY1iSrRMT5bkBVOM48SrOol+4KSuGUlQ0uvM8i26WTmWd
+5qZUlpWHkWk18WKrBLv/l8yIm0i1qHSKEthpItVogAskMufY0ZMRm5wkOBYF5HoN4Aogtc8hAjJX
+dda57LoLgiQbUmzBGYCyS+TLKy5ToWIJLV0AQmwcz9BLAXVDGoAY4kZvJBIs/WWwxflyVnRg5q59
+TFSixWJ/8fDIJVoewvTuExaxgdMm1dq+YnHjTKrZpLqyo+KMpwY4lv+cHYsrvh3ECt6kMFtSvU/C
+niILqvR7s6zMcqozb84AUtBcL0BcNNrsQZltLo6a7HzUYic5rFZAj06aY9M176J3egRECpk3W4Kl
+R3QxX7GVfxorysCKsbQqkbWlGd1DFg1W2sPJ9J5Ub1lhMnRNpBq4tLXOifX8cE0iKr2W3wd2dH5p
+IFJ8tk6hRKwVxSjXGD9OALkJ8xoYOrGwqnLWV92eb6lmjrS5TBCwQwPx2GY19rdkgvZFtPJgXYJg
+OrMHRHAWSKI8m4Rvdtib0DXe7Td9ASseJS7USbRkeThm3JXqLT7TlPakCNiRalKD1fsLOdjEB+wI
+s9nMdyyJDyQzCeW6XqGuYokfp4C0jcOTj2xssq2fS2xYk9lxOPNaGI2GHTXpNj0PSQIujunYsC13
+HYEIdaCWcQPD5ti260lM9BNHVpzZecEgj+2CWPV6GGvnrFRvkoZZdY2762m1fUsKC9Wju2gtOtWe
+FD7HjmWLWq3lkrKjy3VlLgctjL4hMMPrF2YCSKstbyFAaomo5lQBlB6VOTB57AHcbU4dAEihw1uY
+oLVRunXYIxBR0SFO9C6dBfg7W+sYVHk4PHdjRfs7A+OyMuzSwqCWvRtDFyZ+YDDyjlTbAbkkkdmA
+NGNH8Q6HCsg6K6Yy4KKPTMmsG8uK2V6XFi/3rAwNmfIRIKUwZOVhl20OS1WZS0eEpf8RmEdVhrjO
+R7CU2pBgIMxtlWAOPmKr2lgrGiEQ3Xsv1pO0OBHsH0xasPUBfcX9WPEiVtxpqLn3mLFImQGg1Uij
+AT4mMufZsc+swXcUTRgKW3KqHx3l2nyh7cmXOpFdTupGICA1T5Fkm61sDEll1Gx5iuosFa4OoLRu
+qQjM8j44X1LDws5smKKNIGxsCPYOgCTDVSMQazWnxYnglyOJoDz3vmKXQU9YkZAVMXFZn//z9Z+/
+eFAw9qCs1apqeiz1OBf5ZPX5tpNcdhS4hh0L4NR3bFWSINfbM3l23cWPWwC5aALTA5KV58zB1B3M
+qGdJ2QclNrNXcIashcfVecxdNCagjx0IJ2yIzGYoY+qBWBOWpYsTM/Y1RXn2xmCmtvb7DCsGOydT
+YOjP/vfv/NofPHSjxGEicwU7rnGN7nnSsyO5NLdNcXq5ptbMgHbPm/V+r3YAWY5cikVINcaNJYvX
+WFlS2z5sAqc21PbAHORpNngAhNEBWN6Dva0IQgrLRgUIrWXNFiMiEDM0Qmxf9AUy64k8ezkzQz7T
++Yq7sWLHirvW1r0z47lEBm2eA3bsM+tCX8mqdpDMzOQ615GHhSYXNZQKy0lNaE4zQGqdsJRamGEN
+lrNk/VhZrOZXmLLeTGQrAi0g8z+hY3qv/95WEGqUQL0EU9+oADHZ1L45B8SYoYscyDMmLTLxFWex
+YseKJPSAtekZO2rlo1y11W1PCga0eY7YkXKN79gbKJLNMGaUa4ly3eLHavd4QsPVf6zM2zOkboVn
+PmRx3XWfMwGWrOGjLj1VpiRdXsCw4pP7RUswTlomM/C6Ptn+foJeoMQFUEKdLNe2s1qoYZXmhWJi
+g+t2+jhxnJSBjaCwbtvSNGtS2mFFbU17HGa8BTt6y41WZcouATtyrR0ybKyE8WPOXJ/U7CVq4eEb
+tXySgv5VW2ozk23SF3NQenXFF4dY+tz2Z+C9luhZ00Q3pylMJ6EIQsy4UZatdLgoSN5QtHCsMZi8
+ZYna2hqB9rrYkCx90rJ01Rare1/Dig8KxtHmOWbHrEUZW97C3jxGJRZM+3JNmXBvIk1JmWolxdpt
+1iveKCATWwxbXzPp6tGNWpdOtpUlqQdla/cBYFr3jxeer8j5Yh9yWwMtY7KAbEjQf+hNtmyyOpFm
+cjmyXlJnNm0PM/DRTJ41jsS5aa27H3xFZMWjBVl/tV5+Svc8QhlsnpLF9uzYZ9YnajJdN19LQa7J
+lyaMcl02HtGeRLtlBkjS1y4xpNqEmW2aAtc1ANoWpptosjFID0q3czpgKjpxSc+FprcMnh3tgFB2
+2DD1VROlqAUrPR4XdUCcxIkzeV606SMkLd2UNi/9qqG+5Dk7pv/3u/9wA+L3H0yqoYV+ya39CBds
+scUqtlhPWtOpy7UeqCRZQgCvZwabSfEAly9Da9kWsuAeVltt91vct/C1zcUozmgob0yJi/KhdJvF
+LZCw+Kq70HCdLdJqAyewIcFX+HPrQMcFWvbAcleLD2GimUussWYPxFkPhsSlqLvyTM1f7OXZWXH9
+ZSO/zx5Npke/sQVrWbtZtm9L2T+vFWP8S5uZaU+uvblbxONHgoQmq22YTPqVIbky5BbSlQdmN9Ir
+v21xZ/EidWPnssJgZeRT6yYKTKmZCnuVZNxEiuSKibwCLh5DEGp0k8eumSDTImN8KJ19Q500C3xh
+94CIpcalk2cJfr308/tKxWd9/r/4P9/49X//+GDUzDq3vaOrK60dM2+0wHcycdZkhn2NVJTrrTSi
+TFd015IeA+QKtlISnAGSdWWU2T7stk8ZmxJk2yZIsZbQtqzolZ2MuuchhyRAjcnSecG9AsPekjFH
+GfbXTbGVMSy7VUfA1sfU48phBcAgy9xn4BAPmke5B8QIYvE4kUUE13f7QjGs/KyPf0MSVog+Ohi7
+ZAaqMllXkRS4tWSmSlyJAcuGowpIGePHFWi55MyQMA+AFF/XoowHb6S12mocCSxZKVmqj4igJM2w
+FZT9FmdGIzxpFQs7l05S652hqd6ZY+W8TD6eBdd0j2xIuH4r2DcxRtwBIs4WWpTl2sJb2cueTZ69
+9pQvAOODJDHBdxyTmVo12ZFry66TZwrsazcX7eEvCc0KhwrLEZCCSQ2JOjVaApTa41gbymnGktVH
+VFAu+l58btO2HyC19cS4fVqa9AUczTuOQ5raQniLRQky5NyBEGYAKXu2ciGPVZsat9IFQBwTlqHv
+DVdkTuRZ2ori+U/pX3ioJGaQm1kyQ3W554KLeWCageUeGUtWuX5ba1yTfQEQJjU5hxOlQX/7Nufm
+jXkYZHXYdl9PLMpBf6PXLNXCkTfb75qsLDCcGxOUpXy28YL3aZPIStJU4tWlPidMlKivn7slMLn5
+hIENqXmIdwWiKBBDyTCT9IOvPOvaXsvkWZO+z99k+ezJyPRBMuNyrdFhOUwaP0qugZ7Y7KUg17Vz
+mFeGLF++VHtSuGdItH2oBeG29k+7cERbv1ZJT1ZcYdt8hauR7uJbu3B0lAoyplVA0rC/dnH5OdSq
+xQYPRIk2L2hgQAolHZHJtFpsEdeGhxAfwgrVOLrxAiBCb9tenGglRx89rcnqZ3/5zd/83tMD45DM
++LJWl2tSDff4cZNMrc5wHz9eCcil1rFrYQVk2+s9tWJTf98BJcet3AMwLQFZNFXBjSA5+2jYMPmr
+NaA2lA0rKjsAIpjAAuymixLN2JChBeytgLgTJ5o8gw9OlyYwDxY3olwbi+hKgU2Otr2Yd+NHTGgu
+BCT1SY15RVnHkWTvzBHLSepAAO0G184wS5ULKH2w6Q4wG8OJz6eZfSOXnWPTz7mZATCHaWASpkNw
+aCtr/iECJ0uYr98DUSBGPARiFoxaxzixhDIXDFL2xuOHjhv7QN6GPAzxY47xI2HzqFNBjrfHGBJm
+GbeDV41ojJfa5kA5xIbk42pzDTb9yVhP6Hay3kBsaXHfIjitpG3jcnDx+y0zg7w1xgoY1+VFcxe8
+LbAiMMNIZjwWol0UGXxEDM4vY8TQplGO188lxIkGxM/X8/vZk7J2LsmuS/yY60q8LRP9uVaOT9bf
+SOIe4AUMSUltndqAyz4gdGBJqs232de16NJTK5Lj5n+adlMb3V6WAPROtjFn6BA7KgV2zEeTHkjx
+VfUwPprCeBGsQLncx8QmlhGhmTbYN+eAKPBClrAsAMTcVmn/9C+/+RvfuwaMDy7VLtdd/FgD3kw7
+CQ1dAkiqgCwPPHnSUpOm1GI/H2/L2hOpABCdRe2gbCWgkOhUaWdq+35I0+p8VX9EL9XSEpkAorCF
+XdfRQ3EccxsdE2JDom6UCk6XaD4ijrmK0kwwsFzlf5KwuJ0vF2x4EdYHPZZUo92T2/i1sFvZJtfW
+FOrGrm/+M0o2wxGxGmqzfrzEK9i5rIVnPy3+OJWaZr1UCV9MwsULzXUbtjDyJqj0Jf9rY8hUkl2C
+c9i5yKU4S7CG6mIrz57bppkZ2BA7u+3tbS1mP4+G9jlGJABiedzSJSyaxf/Vlklfk8A8+o8toNex
+OSXD7RMaS7tDhh1GmABDWsFj8wB1UsSpSvH2KNFBiIUlRSsuLN4DZi0xvABT+tJB/ab3jNnNhaur
+EJjP1qIDI1LYEHLYlq11Xof9Ln3cEAz2HiSZAhuGqorXmjkUludA1EJBAGKG3silbee0/f3Z//13
+v/n9u4DxUaR6aDXTJaRyASC1j3iUbLIVMFrL3iorHkdmXQ5ly7eDbdMm03egTD5BZR+YFhhmgqUH
+V8bRC4372BwBkKWNp+tBSF28yNIGeGaQ5W7SfSgCZuyXjNJ8CMTN6N7r0pl9CYefX/jGD/7O+s9/
+fiyGTFq8TdpDaIPpTmWUQy3qnqrlQyfrFrQEJJWY067T9SjJlxXWQrY+B9USXgVP8tttdal3aHOb
+4sRw3CqjKjCh2Azvx6dJHB3v/cbacQTxFIBd3yP2HmKCYhBJINXIhtDIKzDaerRvdoCYeyDWt/rn
+Kyv+k0vO+55MPyo7dgmNZ9jGkNuZ32LIV5EhiyhvPuTWzpLawCgK3T7NdHaWJF/GkNziYygvm3wb
+4HTshTGRM6YgOMW6akM3zu4IYdlttG3Pi/usYOeMsyB0ZhP1myqpkapzcASSFAOYzp9sm7OHLp8A
+xGK3XQDE+fqKSxKYp5DIhISm+WvBg5R5UuPzgbPXn7vEZis4Yr9y9uWVUmvTmbwzFZpj4cSIgEeZ
+c/MGl+Zo+q6uAonGXh1aT+JwH/M9l1YK1GQKPMusTby21VvoOyRPtGB0fXmON5CkxEX/eciY9Yi4
+lYRAXEYvMQBxvXyeK6nR2zDj00hozjCkKEOeKkNuku2BXJ/YNA5pLGlf6e0xb6pKbwlObUTT5Vy2
+I172VQaNLYOmImsq/S2xq9YJcTkUZzKrfqBMZL9Zj6OxYLJRfCC3tjaaOsumZ0OvhYNzAzvKWuND
+WMi1A8Tt2p+uxPb9W4DxUaX6EkAmBSQpQ+ZU270wsdFRKlW2bbBtdS2lLmZV27I23A2gbHtLwwaq
+ZtbzsOd6AGcXKM72edzFZLez8QA+iCVDd7dJMdNlIOQuSelleZYxC7jgB0A0/Fzuqx7d+NiJzF5S
+w42A6jrqNWuxaRJDYqO2TdKsJFHLd3wHq/URyXoW2EbS1htPFlPCwcp1v6zanWNTzCxbmdk0b+G7
+TgJJN7lTkd3KgAm2b/O2vA6Erd4dE5TWKxnZ0N5HD0SorOwBcfv585UV/+k1n/mcTD8JduwZkjUh
+1rnRnLcdI1MFFMj2xpBkst2zZNjpYH3WXCdEbQ06A1OS7+LqyQ5FxrTxBCSZR0TKDlAPvJ3p9iXJ
+JZcHBnyDAJwwoR5DCZsXH7BhL8szIEqzb6TrMrqaFS+yGp4SOyJDlt99JmizfuzGsyxJNtiBI6tV
+G6h1d4GdI6mtP50xprFsW58lniG6Gc375iJ74dtiS389qZ1sQv3+LDMAGnvyBIRTSb6ADXfiw9Do
+Al+eq1nx0gTmybAjMqQZ47X1rHYxYBxZegmzNinOWJJ0vZTY5hq2dipD+0ONKf3v7DbNjDH1+bMD
+iLs6c5P4SbMICXHnguByA1L2I9gYcgZAbGQLMeEEhOhwH7HhTny4B8Q7seKlJuyTY0dnycaQbo5D
+HOlrTzqW9PtQnAARmXI0zQm2kxsMcGNNPLCnneN8ic84gG4E38CAyIIYExLYQz0IoZozeIdn40Oa
+ruW5EyteY+08KXbsa9lZe7/ZxqNs32xdFG2LuCyWtPLdiWyK0w5T+na9kS0dmAJjIuubGSotb9pG
+2Nd37khkVOoG2+ILIQCpqz/LeRB688mMDTOwoYH9AIh3ZsWLmVHZcQPiN58aII/iSGRJ2/Oy/t1i
+vROSJDClBY0ztvRSoLKm/s00T1yuqwUGaZ/fLpMYkmYsyFihuRSE5E1IHRvuyfJNWHG3AvNUqzJH
+caRldNk7wbz3ZWvUJS1YVOlb/6wd5GVxuSw49lDdiS1Bt0rO0q26k9BtbbWeKmi68tBeSyfatt3f
+z13wvuG5BHrR9dlzrLTUalTbvaDcNbeJ877s4I2ubCwbb2YSYEMhaIitXOuyLGj/HKjnnX+urcA8
+SbkOsl3B6f0QmNwUXQbpXtQsT8m2TFKmFNzZSgwjtkdvYEzc8patdsJx+t1+jMjEO9twTFb1y2RR
+/5QBfUIsbEFvMSEyYXuekKBcy4aGi/9yTbXlrWT6Ocj1XnJjFkyU7moDJTgQuhElYaITDhL7coS2
+hSs1cFLnMfKVB1sOrguDs7odjHoAdo8TG0MnF4IQtpHeiw1vKs9Xy/RzkOueJQknfXXSXRZ95bpP
+qc+8Bvn+GQlKeOt8gXbs+hxNzmtjQ71k0gYIXYyfoYEid5dwvS7cLxeC57Muc1tw1kkwC05zK/aM
+/LxealMDyLHv/5KDb+iSnLHZ/DwQ31qe7yrTz0KuQ0kNM+4q3YRZt8p32fZKrOUxt0RgY8ulmtcm
+42YBBi9R2mxQ7kqAwt2Up75GLZP+MRzKmFtZ0Rkx0bjLwEJhMX+0aMjq1jWuRCbELJmILmXDm8nz
+nWX6ucn1TLpNvtlxIUGSWbPv1B2olFom3bxEPu8jXnuU5fxVBr4YP1KY9CUUW/Ei/t8KhDeV5zvL
+9HOT65l0U5PDIN96Pkv2bRLuC5tUxrfLzzs5/5lmp52s4ySH6y4xwRaTXZPen4H8+nsBGV7IxxdL
++RxhikmT4wW2Bs6XSfK9yPPbyvSzkuuZdBtTonxDXdsl3DbAMBm3hNqycXveBdgTpvnLXb/tw0i8
+jvUG9rP9xIVojwUxMbkjE96LPL+1TD9nuT4yzTEDZyK0XjhKdgTnta1i1sKW5brqTIYk2sC3DBN5
+mnXUA/ACm+ZRgHgTML4rgJyBcgRmiN6GOPGUuN9PusWhFx7sPMaH0hYoDsDrADhnwBuB8F6BeDMw
+vkuAvBSYRNOyMx8d6FM6PtwHYJvmMlgNv0cA3lvCcrME5l1IaM4xlHl7mPT4AipNfnJJBlhHeOwX
+/0pr1rYArF5ocqnDQHeKhNIulP1C7b1A/iESfMlb/dw8Ybl1AvPsE5qrkx6nupb8TNgzuIl8kXlz
+eIewDcuEUkXoLq1BT0Oeby7T76pcXyUvzHzvL3b/wHsUIN4LGN9XQF4cBx0BdjJK+ZF/HgyI9wbG
+F0C+Ez8PCsR7BeMLIF+A+KTA+ALIFyA+KTACIL+yXl6/gPIFiI8KxheWfBYg3Cy5nz4WEB8cjC+A
+fGHDJwXGF0C+APFJgfEljnwB4pMC4wtLvt/x4ZME4wsg3282fHJgfJHt95cNnyQYX0D5frLhkwbj
+i3S/X2z4LMD4wpLvDwifBRhfQPl+gPBZgfEFlO82CJ8lGF9A+W6C8FmDcQJKek+AiYui3hkQvhNg
+fI+A+c6x4DsNxncQmO80C743YHymwOzXJb8XAHyvwHgATHpEgM4WxL934HuvwXgFQN8WrOemL7z3
+wHsB4/2A9QVsLz8vP+/az/8XYABUc31ZqsG2bgAAAABJRU5ErkJggg==" transform="matrix(0.24 0 0 0.24 1.2539 1.2534)">
+ </image>
+ <g>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="17.5146" y1="23.7031" x2="12.2812" y2="33.0956">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M18.731,28.497c-0.88-0.377-2.303-1.005-2.93-1.8c-0.461-0.544-0.419-0.544-1.131-0.795
+ c-0.587-0.167-0.963-0.502-1.633-0.585c-0.502-0.042-2.51-0.544-2.386,0.167l-0.042-0.167c-0.25,0.795-0.628,1.465-1.046,2.218
+ c-0.294,0.543-0.209,0.712-0.042,1.298c0.293,1.088,0.419,1.172,1.298,1.632c2.511,1.381-0.292,5.4,1.801,6.571
+ c0.333,0.21,0.752,0.336,1.087,0.461c0.419-0.586,0.628-0.963,1.214-1.339c0.377-0.21,0.629-0.293,0.88-0.671
+ c0.333-0.417,0.209-0.837,0.418-1.255c0.293-0.586,1.088-0.42,1.549-0.838c0.586-0.544,0.627-1.256,0.879-1.883
+ c0.293-0.67,1.172-1.004,1.423-1.634C20.364,29.041,19.358,28.748,18.731,28.497z"/>
+ <path fill="#FFFFFF" d="M26.852,12.381c0,0.418-0.503,0.67-0.293,1.047c0.419-0.503,0.712-0.754,1.382-0.837
+ c-0.168-0.502-0.712-0.837-0.837-1.339c-0.126-0.377,0-0.88-0.545-0.754l0.125,0.125c-0.627-0.125-0.335,0.671-0.21,0.963
+ C26.559,11.796,26.852,12.214,26.852,12.381z"/>
+ <path fill="#FFFFFF" d="M25.847,11.544c0.032,0.048,0.063,0.11,0.095,0.181c0.024-0.057,0.049-0.116,0.073-0.181H25.847z"/>
+ <path fill="#FFFFFF" d="M25.941,11.725c-0.161,0.353-0.357,0.595-0.429,0.992C26.242,13.082,26.145,12.204,25.941,11.725z"/>
+ <path fill="#FFFFFF" d="M23.503,7.735l0.083-0.126c-0.167,0.042-0.46,0.042-0.669,0.084c-0.294,0.921,0.669,1.046,1.214,0.628
+ C25.052,7.609,24.09,7.274,23.503,7.735z"/>
+ <path fill="#FFFFFF" d="M25.177,20c-0.078-0.04-0.084-0.042-0.156-0.078c-0.003,0.011-0.053,0.036-0.053,0.036
+ c0.116,0.033,0.195,0.078,0.243,0.133c0.003-0.003,0.006-0.005,0.009-0.007L25.177,20z"/>
+ <path fill="#FFFFFF" d="M29.453,3.521c-0.065-0.071-0.138-0.145-0.216-0.222C29.305,3.381,29.378,3.452,29.453,3.521z"/>
+ <path fill="#FFFFFF" d="M31.539,8.656c0.006-0.03,0.011-0.06,0.017-0.09c-0.047,0.003-0.094,0.006-0.142,0.006L31.539,8.656z"/>
+ <path fill="#FFFFFF" d="M25.009,19.916c0.005,0.002,0.008,0.004,0.012,0.006C25.022,19.919,25.019,19.916,25.009,19.916z"/>
+ <path fill="#FFFFFF" d="M25.171,20.126c0.021,0,0.045,0,0.066,0c-0.006-0.013-0.017-0.024-0.026-0.036
+ C25.186,20.106,25.122,20.132,25.171,20.126z"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="12.3125" y1="11.4346" x2="2.8481" y2="22.4337">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M9.774,25.357l0.167,0.167c0.125-0.125-0.629-0.502-0.796-0.711
+ c-0.335-0.502-0.041-0.879,0.042-1.548c-0.377,0.041-0.754,0.209-1.174,0.209c0.128-0.251,0.797-1.005,0.546-1.298
+ c-0.335-0.292-1.214,0.796-1.592,0.796C6.759,22.26,6.55,21.045,7.095,20.46c0.335-0.376,1.13-0.628,1.591-0.46
+ c0.627,0.209,0.585,0.628,0.711,1.172c0.545-0.585,0.293-1.506,0.628-2.135c0.209-0.418,0.755-0.46,0.796-0.962l-0.085,0.084
+ c0.671-0.67,1.258-1.381,2.01-1.967c0.628-0.502,1.506-1.005,1.926-1.675c-0.544-0.083-1.048-0.042-0.587-0.711
+ c0.419-0.67,1.467-0.209,1.591-0.837c0.127-0.586-0.836-1.256-1.004-1.759c-0.168-0.417-0.335-0.962-0.42-1.423
+ c-0.208,0.21-0.334,0.502-0.543,0.712c-0.335-0.585-0.085-0.837-0.795-0.712c-0.419,0.042-0.837,0.335-0.963,0.753
+ c-0.166,0.503,0.167,1.047,0,1.55c-0.125,0.418-0.587,1.045-0.963,1.213c-0.125-0.459,0.251-0.921,0.126-1.381
+ c-0.712,0.042-0.921-0.335-1.466-0.669l0.168-0.084c-0.251,0.167-0.628-0.418-0.921-0.586c0.502-0.669,1.214-1.172,1.758-1.8
+ c0.419,0.795,1.089-1.13,1.424-1.465c0.25-0.293,1.173-0.585,1.424-0.167c0.291,0.502-0.419,1.046-0.67,1.382
+ c0.459,0,0.961,0.083,1.338,0.334c0.378-0.292,0.879-0.753,1.089-1.214c-0.335-0.208-0.629-0.418-0.879-0.712
+ c0.25-0.501,0.194-1.154-0.325-1.045c0.084-0.051,0.162-0.108,0.242-0.168c-0.964-0.293-1.298,0.335-1.09-0.837
+ c0.084-0.544,0.21-0.879,0.67-1.381L13.75,3.466c0.251-0.251,0.46-0.586,0.628-0.879c-0.042,0-0.168,0-0.21,0
+ c0.042-0.183,0.003-0.333-0.098-0.456C6.901,4.54,1.647,11.114,1.175,18.976c1.2-0.378,1.926,1.715,2.32,2.697
+ c-0.127-0.46-0.209-0.962-0.419-1.38c0.586,0.67,1.256,1.046,1.34,1.967c0.085,0.586-0.167,0.545,0.502,0.795
+ c0.503,0.168,1.047,0.125,1.507,0.335C7.346,23.725,8.769,25.566,9.774,25.357z"/>
+ <path fill="#FFFFFF" d="M22.498,4.805c0.083-0.167,0.754-0.292,0.964-0.335c-0.043-0.668-0.336-1.381-0.127-1.967
+ c0.101-0.301,0.337-0.69,0.607-0.974c-0.321-0.066-0.644-0.123-0.971-0.172l-0.351,0.044l0.33-0.047
+ c-0.922-0.138-1.866-0.21-2.828-0.21c-1.273,0-2.517,0.126-3.719,0.365c-0.143,0.358-0.353,0.826-0.353,0.826l0.112-0.017
+ c-0.407,0.688-1.621,0.729-1.661,1.565c0.629,0.083,1.299-0.168,1.926-0.042c0.503,0.795,0.711,1.423,0.252,2.302
+ c0.292,0.335,0.668,0.043,1.005,0.084c-0.086,0.711-0.754,1.255-0.461,2.051c0.083,0.293,0.292,0.962,0.418,1.213
+ c0.251,0.377,0.378,0.293,0.838,0.461c0.46-0.879,0.375-2.008,1.339-2.511c0.629-0.293,1.382-0.335,1.925-0.671
+ c0.377-0.25,1.047-0.752,1.047-1.255C22.791,5.224,22.372,5.14,22.498,4.805z"/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="29.9219" y1="15.73" x2="34.6676" y2="30.2401">
+ <stop offset="0" style="stop-color:#FFFFFF"/>
+ <stop offset="1" style="stop-color:#85BEDF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M29.891,3.848c0.021,0.026,0.04,0.052,0.058,0.078c-0.067-0.057-0.138-0.111-0.203-0.165
+ c-0.052-0.03-0.104-0.062-0.154-0.092c0.442,0.503,0.608,0.906,0.608,1.721c-0.251-0.084-0.459-0.167-0.668-0.292
+ c-0.253,0.879-0.378,1.548,0.082,2.385c-0.123,0.409-0.482,0.938-0.383,1.39c-0.238,0.473-0.488,1.238-0.369,1.708
+ c1.004-0.837,0.92,0.042,1.59,0.586c0.208-0.376,0.376-0.795,0.628-1.171c0.125-0.168,0.377-0.042,0.419-0.419
+ c0-0.292-0.378-0.335-0.419-0.543c-0.083-0.419,0.21-2.177,0.712-2.302c-0.08,0.598-0.124,1.233-0.235,1.835
+ c0.152-0.013,0.305-0.041,0.455-0.071c0.003,0.257-0.189,0.646,0.062,0.923c0.441,0.484,1.11-0.089,1.565,0.366
+ c-0.224,0.369-0.342,0.184-0.666,0.251c-0.36,0.075-0.4,0.236-0.543,0.62c-0.158-0.378-0.533-0.796-0.807-0.243
+ c-0.194,0.394,0.052,1.048-0.344,1.332c-0.335,0.239-1.232,0.334-1.489-0.034c-0.243-0.35-0.028-0.883-0.334-1.209
+ c-0.063,0.342-0.269,0.658-0.228,1.001c0.036,0.318,0.303,0.561,0.17,0.874c-0.272,0-0.617,0.02-0.819,0.186
+ c-0.167,0.135-0.171,0.391-0.428,0.493c-0.227,0.089-0.582-0.045-0.767,0.163c-0.091,0.101-0.11,0.48-0.162,0.622
+ c-0.233,0.029-0.521,0.057-0.729,0.144c0.095,0.507,0.824,0.659,0.777,1.246c-0.028,0.359-0.169,0.348-0.504,0.295
+ c-0.361-0.058-0.765-0.082-1.122-0.154c-0.013,0.745,0.426,1.229,0.041,1.983c0.132,0.061,0.247-0.039,0.361,0.01
+ c0.088,0.037,0.162,0.147,0.218,0.169c0.228,0.09,0.404,0.137,0.67,0.092c0.28-0.048,0.396-0.13,0.547-0.342
+ c0.054-0.077-0.016-0.214,0.068-0.307c0.08-0.086,0.214-0.075,0.307-0.148c0.365-0.282,0.346-0.97,0.719-1.213
+ c0.062-0.039,0.465-0.025,0.62-0.083c0.221-0.082,0.337-0.053,0.495-0.214c0.124,0.476,0.399,0.861,0.76,1.21
+ c0.359,0.349,0.818,0.713,0.046,0.845c0.247,0.33,0.323,0.449,0.614,0.067c0.215-0.283,0.339-0.564,0.602-0.788
+ c-0.479-0.45-0.898-1.005-1.243-1.582c0.501-0.494,1.635,1.117,1.656,1.541c0.024,0.464-0.232,0.661,0.241,0.877
+ c0.641,0.293,0.413-0.452,0.436-0.917c0.384,0.212,0.77-0.176,1.125-0.046c0.182,0.065,0.213,0.283,0.334,0.411
+ c0.192,0.206,0.123,0.16,0.333,0.22c0.425,0.122,0.624,0.003,0.756,0.543c0.08,0.329,0.191,0.762,0.053,1.088
+ c-0.206,0.483-0.866,1.12-1.344,1.29c-0.493,0.176-0.941-0.228-1.384-0.413c-0.709-0.296-1.421-0.555-2.112-0.93
+ c-0.679-0.366-0.541-0.11-1.042,0.146c-0.53,0.271-1.057,0.682-1.624,0.87c-0.762,0.254-1.834,0.379-2.659,0.377
+ c0.192,0.31-0.392,0.865-0.562,1.171c-0.672,1.046-1.047,1.632-0.713,2.888c0.168,0.628,0.378,1.172,0.713,1.716
+ c0.167,0.251,0.292,0.628,0.585,0.795c0.376,0.293,0.336,0.126,0.838-0.042c0.544-0.168,1.465-0.292,2.051-0.125
+ c0.208,0.042,0.293,0.251,0.501,0.293c0.085,0.042,0.671,0.083,0.712,0.125c0,0,0,0,0.043,0c0.126,0.544-0.168,0.963-0.168,1.465
+ c-0.042,0.545,0.084,0.46,0.294,0.963c0.376,0.879,0.082,1.968-0.21,2.805c-0.336,0.963-0.084,1.631,0,2.637
+ c0.047,0.563,0.345,1.089,0.53,1.611c2.281-1.364,4.252-3.192,5.782-5.357c-0.259-0.639-0.451-1.269-0.16-1.779
+ c0.628-1.13,2.009-1.632,2.302-2.972c0.085-0.461,0.043-0.921,0.21-1.339c0.11-0.368,0.351-0.55,0.654-0.667
+ c0.304-1.347,0.465-2.749,0.465-4.187C39.104,13.216,35.411,7.168,29.891,3.848z M31.958,8.321
+ c0.023,0.025,0.037,0.056,0.045,0.089L31.958,8.321z"/>
+ </g>
+ <circle fill="none" stroke="#1996CE" stroke-width="1.5" stroke-miterlimit="10" cx="20.123" cy="20.122" r="19.373"/>
+</g>
+<g>
+ <g>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="49.9648" y1="70.4199" x2="16.4838" y2="31.7881">
+ <stop offset="0" style="stop-color:#E6BA21"/>
+ <stop offset="0.546" style="stop-color:#E6BA21"/>
+ <stop offset="0.5592" style="stop-color:#E8BF38"/>
+ <stop offset="0.5886" style="stop-color:#EBC964"/>
+ <stop offset="0.6206" style="stop-color:#EED287"/>
+ <stop offset="0.6545" style="stop-color:#F0DBA3"/>
+ <stop offset="0.6907" style="stop-color:#F2E3BC"/>
+ <stop offset="0.73" style="stop-color:#F3E9D0"/>
+ <stop offset="0.7735" style="stop-color:#F4EEE0"/>
+ <stop offset="0.8237" style="stop-color:#F4F2EC"/>
+ <stop offset="0.8862" style="stop-color:#F5F4F3"/>
+ <stop offset="1" style="stop-color:#F5F5F5"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_4_)" points="55.489,37.063 37.442,34.441 29.372,18.089 21.301,34.441 3.255,37.063 16.312,49.793
+ 13.231,67.768 29.372,59.28 45.513,67.768 42.431,49.793 "/>
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="33.6748" y1="62.9326" x2="26.9382" y2="24.7276">
+ <stop offset="0" style="stop-color:#E6BA21"/>
+ <stop offset="0.362" style="stop-color:#F7D709"/>
+ <stop offset="0.8834" style="stop-color:#FCEE35"/>
+ </linearGradient>
+ <polygon fill="url(#SVGID_5_)" points="48.959,38.529 35.425,36.563 29.372,24.299 23.318,36.563 9.785,38.529 19.578,48.077
+ 17.267,61.557 29.372,55.192 41.478,61.557 39.166,48.077 "/>
+ </g>
+ <path fill="none" stroke="#9B7F2E" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M19.898,34.646c0.771-0.111,1.685-0.775,2.029-1.475l6.816-13.811c0.345-0.699,0.909-0.699,1.255,0l6.815,13.811
+ c0.346,0.699,1.259,1.363,2.03,1.475l15.242,2.215c0.771,0.112,0.945,0.649,0.388,1.192L43.445,48.804
+ c-0.559,0.544-0.907,1.617-0.775,2.386l2.604,15.181c0.131,0.769-0.325,1.101-1.016,0.737L30.626,59.94
+ c-0.689-0.363-1.818-0.363-2.509,0l-13.631,7.167c-0.69,0.363-1.146,0.031-1.016-0.737l2.604-15.181
+ c0.131-0.769-0.218-1.842-0.775-2.386L4.27,38.053c-0.558-0.543-0.383-1.08,0.388-1.192L19.898,34.646z"/>
+</g>
+</svg>
diff --git a/Sankore-3.1/resources/images/trapFlashPalette/downloadToBoard.svg b/Sankore-3.1/resources/images/trapFlashPalette/downloadToBoard.svg
new file mode 100644
index 0000000..77282ee
--- /dev/null
+++ b/Sankore-3.1/resources/images/trapFlashPalette/downloadToBoard.svg
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-7.28 -5.76 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g>
+ <g>
+ <path fill="#FFFFFF" d="M81.87,64.199c0,2.75-2.25,5-5,5H5.75c-2.75,0-5-2.25-5-5V11.435c0-2.75,2.25-5,5-5h71.12
+ c2.75,0,5,2.25,5,5V64.199z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="41.3105" y1="9.5728" x2="41.3105" y2="66.061">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M79.031,61.561c0,2.475-2.093,4.5-4.65,4.5H8.239c-2.558,0-4.65-2.025-4.65-4.5V14.073
+ c0-2.475,2.092-4.5,4.65-4.5h66.142c2.558,0,4.65,2.025,4.65,4.5V61.561z"/>
+ </g>
+ <path fill="none" stroke="#A2A9AD" stroke-width="1.5" stroke-miterlimit="10" d="M81.87,64.199c0,2.75-2.25,5-5,5H5.75
+ c-2.75,0-5-2.25-5-5V11.435c0-2.75,2.25-5,5-5h71.12c2.75,0,5,2.25,5,5V64.199z"/>
+</g>
+<g id="XMLID_1_">
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="54.4434" y1="0.75" x2="54.4434" y2="49.9298">
+ <stop offset="0" style="stop-color:#F6B93C"/>
+ <stop offset="0.0341" style="stop-color:#F6B53A"/>
+ <stop offset="0.2023" style="stop-color:#F3A633"/>
+ <stop offset="0.393" style="stop-color:#F29C2E"/>
+ <stop offset="0.6231" style="stop-color:#F1962B"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M63.11,26.083V0.75H45.776v25.333h-8.349l14.984,22.933c0.908,1.188,3.064,1.25,4.062,0
+ l14.985-22.933H63.11z"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="54.4434" y1="0.75" x2="54.4434" y2="49.9296">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.0261" style="stop-color:#F8D244"/>
+ <stop offset="0.083" style="stop-color:#F6C33E"/>
+ <stop offset="0.1499" style="stop-color:#F5B63A"/>
+ <stop offset="0.2322" style="stop-color:#F3AE37"/>
+ <stop offset="0.3465" style="stop-color:#F3A936"/>
+ <stop offset="0.6503" style="stop-color:#F3A735"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M54.439,49.929c-0.832,0-1.59-0.342-2.027-0.913L38.438,27.63c-0.2-0.307-0.217-0.7-0.041-1.023
+ c0.174-0.323,0.512-0.524,0.879-0.524h6.501V1.75c0-0.552,0.448-1,1-1H62.11c0.552,0,1,0.448,1,1v24.333h6.501
+ c0.367,0,0.704,0.201,0.879,0.524c0.175,0.323,0.158,0.716-0.043,1.023L56.474,49.016c-0.02,0.03-0.041,0.06-0.063,0.087
+ C55.992,49.613,55.236,49.929,54.439,49.929z M54.046,47.856c0.022,0,0.171,0.073,0.394,0.073l0,0c0.2,0,0.355-0.059,0.42-0.099
+ l12.903-19.747H63.11c-1.103,0-2-0.897-2-2V2.75H47.776v23.333c0,1.103-0.897,2-2,2h-4.653l12.921,19.778
+ C54.042,47.858,54.043,47.856,54.046,47.856z"/>
+ </g>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M63.11,26.083V0.75H45.776v25.333h-8.349l14.984,22.933c0.908,1.188,3.064,1.25,4.062,0l14.985-22.933H63.11z"/>
+</g>
+</svg>
diff --git a/Sankore-3.1/resources/images/trapFlashPalette/downloadToLibrary.svg b/Sankore-3.1/resources/images/trapFlashPalette/downloadToLibrary.svg
new file mode 100644
index 0000000..1c057cd
--- /dev/null
+++ b/Sankore-3.1/resources/images/trapFlashPalette/downloadToLibrary.svg
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-7.055 -5.91 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g id="XMLID_3_">
+ <path fill="none" stroke="#010101" stroke-miterlimit="10" d="M0.75,67.974"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="38.2178" y1="73.8208" x2="38.2178" y2="4.8208">
+ <stop offset="0" style="stop-color:#B7B6B7"/>
+ <stop offset="1" style="stop-color:#D9D9DE"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M75.687,21.14v-5.114c0-1.247-1.021-2.268-2.268-2.268h-42.67V7.821c0-1.657-1.344-3-3-3H3.75
+ c-1.657,0-3,1.343-3,3v60c0,3.313,1.116,6,2.772,6c1.657,0,2.657-2.682,3.228-6l5.71-44.432c0.159-1.237,1.31-2.249,2.557-2.249
+ H75.687"/>
+ <path fill="none" stroke="#010101" stroke-miterlimit="10" d="M0.75,67.974"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="45.7812" y1="73.855" x2="45.7812" y2="21.1055">
+ <stop offset="0" style="stop-color:#ECECED"/>
+ <stop offset="1" style="stop-color:#FFFFFF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M3.493,73.774c1.657,0.001,2.66-2.679,3.235-5.997l5.76-44.425c0.161-1.237,1.312-2.248,2.559-2.246
+ l71.136,0.08c1.246,0.001,2.079,1.006,1.851,2.232L80.143,65.63c-0.229,1.226-0.789,3.18-1.244,4.341c0,0-1.522,3.886-3.18,3.884
+ l-71.45-0.08L3.493,73.774z"/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="47.1133" y1="73.8208" x2="47.1133" y2="23.7784">
+ <stop offset="0" style="stop-color:#C7C8CC"/>
+ <stop offset="0.0179" style="stop-color:#C9CACE"/>
+ <stop offset="0.1426" style="stop-color:#D5D5DA"/>
+ <stop offset="0.2577" style="stop-color:#D9D9DE"/>
+ <stop offset="1" style="stop-color:#E6E5E9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M6.184,73.821c1.605,0,2.574-2.547,3.126-5.699l5.53-42.207c0.154-1.175,1.268-2.136,2.476-2.136
+ h68.896c1.208,0,2.016,0.953,1.795,2.118l-7.596,40.108c-0.22,1.164-0.761,3.021-1.2,4.124c0,0-1.47,3.692-3.075,3.692H6.935H6.184
+ z"/>
+ <g>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="3.6626" y1="47.4746" x2="75.8658" y2="47.4746">
+ <stop offset="0" style="stop-color:#838584"/>
+ <stop offset="0.0097" style="stop-color:#898C8B"/>
+ <stop offset="0.0381" style="stop-color:#9A9B9C"/>
+ <stop offset="0.0717" style="stop-color:#A6A8A9"/>
+ <stop offset="0.115" style="stop-color:#AFB0B1"/>
+ <stop offset="0.2025" style="stop-color:#B1B3B4"/>
+ <stop offset="0.4903" style="stop-color:#AEB0B1"/>
+ <stop offset="0.6804" style="stop-color:#A5A6A7"/>
+ <stop offset="0.8418" style="stop-color:#969898"/>
+ <stop offset="0.987" style="stop-color:#848786"/>
+ <stop offset="1" style="stop-color:#838584"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M3.663,73.12c0.725-0.28,1.739-1.882,2.349-5.425l5.705-44.401c0.209-1.628,1.659-2.903,3.3-2.903
+ h60.849v1.5H15.017c-0.871,0-1.701,0.73-1.813,1.594l-5.71,44.433c-0.735,4.274-1.954,6.455-3.722,6.642L3.663,73.12z"/>
+ </g>
+ <path fill="none" stroke="#838584" stroke-width="1.5" stroke-miterlimit="10" d="M75.687,21.14v-5.114
+ c0-1.247-1.021-2.268-2.268-2.268h-42.67V7.821c0-1.657-1.344-3-3-3H3.75c-1.657,0-3,1.343-3,3v60c0,3.313,1.116,6,2.772,6"/>
+ <path fill="none" stroke="#838584" stroke-width="1.5" stroke-miterlimit="10" d="M75.819,21.14h10.332
+ c1.248,0,2.082,1.003,1.854,2.229l-7.842,42.223c-0.228,1.226-0.785,3.18-1.239,4.342c0,0-1.519,3.887-3.175,3.887H3.522"/>
+</g>
+<g id="XMLID_2_">
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="35.6309" y1="62.228" x2="35.6309" y2="50.5562">
+ <stop offset="0" style="stop-color:#85A53D"/>
+ <stop offset="0.1032" style="stop-color:#8FB03D"/>
+ <stop offset="0.2503" style="stop-color:#98BA3C"/>
+ <stop offset="0.4552" style="stop-color:#9DC13B"/>
+ <stop offset="1" style="stop-color:#9FC23B"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" stroke="#788A38" stroke-width="1.2678" stroke-miterlimit="10" d="M40.537,50.663l-4.773,2.913h-4.665
+ c-0.438,0-0.797,0.359-0.797,0.797v3.819c0,0.438,0.359,0.796,0.797,0.796h4.41l5.028,3.133c0.232,0.2,0.423,0.112,0.423-0.193
+ v-11.07C40.96,50.55,40.77,50.463,40.537,50.663z"/>
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="52.8154" y1="34.9531" x2="52.8154" y2="46.6948">
+ <stop offset="0" style="stop-color:#98DAF1"/>
+ <stop offset="0.1935" style="stop-color:#92D4EC"/>
+ <stop offset="0.4607" style="stop-color:#80C9E2"/>
+ <stop offset="0.7694" style="stop-color:#62B9D2"/>
+ <stop offset="1" style="stop-color:#42ACC6"/>
+ </linearGradient>
+
+ <polygon fill="url(#SVGID_6_)" stroke="#1C8DC0" stroke-width="1.2678" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 57.814,40.824 47.817,34.953 47.817,46.695 "/>
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="52.0361" y1="49.1548" x2="52.0361" y2="62.2188">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.1048" style="stop-color:#F7CA43"/>
+ <stop offset="0.2764" style="stop-color:#F4B13D"/>
+ <stop offset="0.4512" style="stop-color:#F29E39"/>
+ <stop offset="0.6283" style="stop-color:#F19136"/>
+ <stop offset="0.8093" style="stop-color:#F08934"/>
+ <stop offset="1" style="stop-color:#F08734"/>
+ </linearGradient>
+
+ <polygon fill="url(#SVGID_7_)" stroke="#CD5728" stroke-width="1.2678" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 52.035,49.155 54.158,53.456 58.904,54.145 55.47,57.492 56.28,62.218 52.035,59.988 47.791,62.218 48.602,57.492 45.167,54.145
+ 49.913,53.456 "/>
+ <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="36.1279" y1="35.4639" x2="36.1279" y2="47.4238">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.1863" style="stop-color:#F8D344"/>
+ <stop offset="0.6991" style="stop-color:#F7C03E"/>
+ <stop offset="1" style="stop-color:#F6B93C"/>
+ </linearGradient>
+
+ <polygon fill="url(#SVGID_8_)" stroke="#A36C33" stroke-width="1.2678" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 42.316,38.029 42.316,47.424 29.94,47.424 29.94,35.464 35.4,35.464 36.614,38.055 "/>
+</g>
+<g id="XMLID_1_">
+ <linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="61.0449" y1="0.75" x2="61.0449" y2="49.9298">
+ <stop offset="0" style="stop-color:#F6B93C"/>
+ <stop offset="0.0341" style="stop-color:#F6B53A"/>
+ <stop offset="0.2023" style="stop-color:#F3A633"/>
+ <stop offset="0.393" style="stop-color:#F29C2E"/>
+ <stop offset="0.6231" style="stop-color:#F1962B"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_9_)" d="M69.712,26.083V0.75H52.378v25.333h-8.349l14.984,22.932c0.908,1.188,3.064,1.25,4.062,0
+ l14.985-22.932H69.712z"/>
+ <g>
+ <linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="61.0449" y1="0.75" x2="61.0449" y2="49.9296">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.0261" style="stop-color:#F8D244"/>
+ <stop offset="0.083" style="stop-color:#F6C33E"/>
+ <stop offset="0.1499" style="stop-color:#F5B63A"/>
+ <stop offset="0.2322" style="stop-color:#F3AE37"/>
+ <stop offset="0.3465" style="stop-color:#F3A936"/>
+ <stop offset="0.6503" style="stop-color:#F3A735"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_10_)" d="M61.041,49.929c-0.832,0-1.59-0.342-2.027-0.914L45.039,27.63c-0.2-0.307-0.217-0.7-0.041-1.023
+ c0.174-0.323,0.512-0.524,0.879-0.524h6.501V1.75c0-0.552,0.448-1,1-1h15.334c0.552,0,1,0.448,1,1v24.333h6.501
+ c0.367,0,0.704,0.201,0.879,0.524c0.175,0.323,0.158,0.716-0.043,1.023L63.075,49.016c-0.02,0.03-0.041,0.06-0.063,0.087
+ C62.594,49.613,61.838,49.929,61.041,49.929z M60.647,47.856c0.022,0,0.171,0.073,0.394,0.073l0,0c0.2,0,0.355-0.06,0.42-0.099
+ l12.903-19.748h-4.652c-1.103,0-2-0.897-2-2V2.75H54.378v23.333c0,1.103-0.897,2-2,2h-4.653l12.921,19.778
+ C60.644,47.858,60.645,47.856,60.647,47.856z"/>
+ </g>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
+ M69.712,26.083V0.75H52.378v25.333h-8.349l14.984,22.932c0.908,1.188,3.064,1.25,4.062,0l14.985-22.932H69.712z"/>
+</g>
+</svg>
diff --git a/Sankore-3.1/resources/images/trapFlashPalette/linkToBoard.svg b/Sankore-3.1/resources/images/trapFlashPalette/linkToBoard.svg
new file mode 100644
index 0000000..23e9442
--- /dev/null
+++ b/Sankore-3.1/resources/images/trapFlashPalette/linkToBoard.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-7.218 -11.262 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g>
+ <g>
+ <path fill="#FFFFFF" d="M81.87,58.514c0,2.75-2.25,5-5,5H5.75c-2.75,0-5-2.25-5-5V5.75c0-2.75,2.25-5,5-5h71.12c2.75,0,5,2.25,5,5
+ V58.514z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="41.3105" y1="3.8882" x2="41.3105" y2="60.3764">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M79.031,55.876c0,2.475-2.093,4.5-4.65,4.5H8.239c-2.558,0-4.65-2.025-4.65-4.5V8.388
+ c0-2.475,2.092-4.5,4.65-4.5h66.142c2.558,0,4.65,2.025,4.65,4.5V55.876z"/>
+ </g>
+ <path fill="none" stroke="#A2A9AD" stroke-width="1.5" stroke-miterlimit="10" d="M81.87,58.514c0,2.75-2.25,5-5,5H5.75
+ c-2.75,0-5-2.25-5-5V5.75c0-2.75,2.25-5,5-5h71.12c2.75,0,5,2.25,5,5V58.514z"/>
+</g>
+<g id="XMLID_1_">
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="23.2871" y1="42.9937" x2="15.3499" y2="70.2779">
+ <stop offset="0" style="stop-color:#F6B93C"/>
+ <stop offset="0.0341" style="stop-color:#F6B53A"/>
+ <stop offset="0.2023" style="stop-color:#F3A633"/>
+ <stop offset="0.393" style="stop-color:#F29C2E"/>
+ <stop offset="0.6231" style="stop-color:#F1962B"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M25.27,53.328l8.522,8.555V36.997L9.024,37.022l7.428,7.456
+ c-4.562,5.018-20.488,25.244,6.841,37.215C23.293,81.693,7.942,66.969,25.27,53.328z"/>
+ <g>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="25.1035" y1="42.8003" x2="-0.5385" y2="93.2574">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.0261" style="stop-color:#F8D244"/>
+ <stop offset="0.083" style="stop-color:#F6C33E"/>
+ <stop offset="0.1499" style="stop-color:#F5B63A"/>
+ <stop offset="0.2322" style="stop-color:#F3AE37"/>
+ <stop offset="0.3465" style="stop-color:#F3A936"/>
+ <stop offset="0.6503" style="stop-color:#F3A735"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M23.885,82.616l-3.636-2.05c-6.476-3.653-11.159-9.02-12.222-14.005
+ c-1.997-9.371,5.227-18.565,8.425-22.083l-7.427-7.456l24.767-0.025v24.885l-8.522-8.554c-5.218,4.107-7.987,8.725-8.231,13.722
+ c-0.24,4.913,3.354,10.315,4.535,12.092L23.885,82.616z M13.764,38.946l4.104,4.121c0.754,0.754,0.782,1.966,0.064,2.756
+ c-2.991,3.29-9.754,11.856-7.949,20.321c0.744,3.49,3.565,7.238,7.646,10.323c-1.384-2.638-2.755-6.122-2.59-9.516
+ c0.273-5.602,3.299-10.713,8.993-15.195c0.767-0.607,1.962-0.536,2.655,0.162l5.104,5.122V38.949L13.764,38.946z"/>
+ </g>
+ <path fill="#7B5020" d="M25.599,69.64"/>
+ <g>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M24.493,53.958
+ c0.251-0.211,0.51-0.421,0.776-0.631l0.706,0.708"/>
+
+ <line fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0151,4.0302" x1="28.82" y1="56.891" x2="31.664" y2="59.746"/>
+ <polyline fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" points="
+ 33.087,61.174 33.792,61.882 33.792,60.882 "/>
+
+ <line fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0805,4.161" x1="33.792" y1="56.721" x2="33.792" y2="40.078"/>
+ <polyline fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" points="
+ 33.792,37.997 33.792,36.997 32.792,36.998 "/>
+
+ <line fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0698,4.1396" x1="28.652" y1="37.001" x2="12.094" y2="37.02"/>
+ <polyline fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" points="
+ 10.024,37.021 9.024,37.022 9.73,37.731 "/>
+
+ <line fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.7047,3.4095" x1="12.137" y1="40.146" x2="14.543" y2="42.562"/>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M15.746,43.769
+ l0.706,0.709c-0.2,0.219-0.422,0.469-0.661,0.745"/>
+
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.9484,3.8969" d="
+ M13.38,48.279c-5.443,7.579-12.15,22.213,7.243,32.15"/>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M22.381,81.284
+ c0.298,0.137,0.603,0.274,0.912,0.409c0,0-0.265-0.253-0.684-0.724"/>
+
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.8156,3.6312" d="
+ M20.407,78.087c-3.192-4.87-6.734-13.974,2.724-22.919"/>
+ </g>
+</g>
+</svg>
diff --git a/Sankore-3.1/resources/images/trapFlashPalette/linkToLibrary.svg b/Sankore-3.1/resources/images/trapFlashPalette/linkToLibrary.svg
new file mode 100644
index 0000000..81e87ee
--- /dev/null
+++ b/Sankore-3.1/resources/images/trapFlashPalette/linkToLibrary.svg
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-1.492 -9.981 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g id="XMLID_2_">
+ <path fill="none" stroke="#010101" stroke-miterlimit="10" d="M6.313,63.903"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="43.7812" y1="69.7495" x2="43.7812" y2="0.7495">
+ <stop offset="0" style="stop-color:#B7B6B7"/>
+ <stop offset="1" style="stop-color:#D9D9DE"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M81.25,17.069v-5.114c0-1.247-1.021-2.268-2.268-2.268h-42.67V3.75c0-1.657-1.344-3-3-3H9.313
+ c-1.657,0-3,1.343-3,3v60c0,3.313,1.116,6,2.772,6c1.657,0,2.657-2.682,3.228-6l5.71-44.432c0.159-1.237,1.31-2.249,2.556-2.249
+ H81.25"/>
+ <path fill="none" stroke="#010101" stroke-miterlimit="10" d="M6.313,63.903"/>
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="51.3447" y1="69.7837" x2="51.3447" y2="17.0342">
+ <stop offset="0" style="stop-color:#ECECED"/>
+ <stop offset="1" style="stop-color:#FFFFFF"/>
+ </linearGradient>
+ <path fill="url(#SVGID_2_)" d="M9.056,69.703c1.657,0.001,2.66-2.679,3.235-5.997l5.76-44.425c0.161-1.237,1.312-2.248,2.56-2.246
+ l71.136,0.08c1.246,0.001,2.079,1.006,1.851,2.232l-7.891,42.213c-0.229,1.226-0.789,3.18-1.244,4.341c0,0-1.522,3.886-3.18,3.884
+ l-71.45-0.08L9.056,69.703z"/>
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="52.6768" y1="69.7495" x2="52.6768" y2="19.7071">
+ <stop offset="0" style="stop-color:#C7C8CC"/>
+ <stop offset="0.0179" style="stop-color:#C9CACE"/>
+ <stop offset="0.1426" style="stop-color:#D5D5DA"/>
+ <stop offset="0.2577" style="stop-color:#D9D9DE"/>
+ <stop offset="1" style="stop-color:#E6E5E9"/>
+ </linearGradient>
+ <path fill="url(#SVGID_3_)" d="M11.747,69.75c1.605,0,2.574-2.547,3.126-5.699l5.531-42.207c0.153-1.175,1.268-2.136,2.476-2.136
+ h68.896c1.208,0,2.016,0.953,1.795,2.118l-7.596,40.108c-0.22,1.164-0.761,3.021-1.2,4.124c0,0-1.47,3.692-3.075,3.692H12.499
+ H11.747z"/>
+ <g>
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="9.2261" y1="43.4028" x2="81.4293" y2="43.4028">
+ <stop offset="0" style="stop-color:#838584"/>
+ <stop offset="0.0097" style="stop-color:#898C8B"/>
+ <stop offset="0.0381" style="stop-color:#9A9B9C"/>
+ <stop offset="0.0717" style="stop-color:#A6A8A9"/>
+ <stop offset="0.115" style="stop-color:#AFB0B1"/>
+ <stop offset="0.2025" style="stop-color:#B1B3B4"/>
+ <stop offset="0.4903" style="stop-color:#AEB0B1"/>
+ <stop offset="0.6804" style="stop-color:#A5A6A7"/>
+ <stop offset="0.8418" style="stop-color:#969898"/>
+ <stop offset="0.987" style="stop-color:#848786"/>
+ <stop offset="1" style="stop-color:#838584"/>
+ </linearGradient>
+ <path fill="url(#SVGID_4_)" d="M9.226,69.048c0.725-0.28,1.739-1.882,2.349-5.425l5.705-44.401c0.209-1.628,1.659-2.903,3.3-2.903
+ h60.85v1.5H20.58c-0.871,0-1.7,0.73-1.812,1.594l-5.71,44.433c-0.735,4.274-1.954,6.455-3.722,6.642L9.226,69.048z"/>
+ </g>
+ <path fill="none" stroke="#838584" stroke-width="1.5" stroke-miterlimit="10" d="M81.25,17.069v-5.114
+ c0-1.247-1.021-2.268-2.268-2.268h-42.67V3.75c0-1.657-1.344-3-3-3H9.313c-1.657,0-3,1.343-3,3v60c0,3.313,1.116,6,2.772,6"/>
+ <path fill="none" stroke="#838584" stroke-width="1.5" stroke-miterlimit="10" d="M81.383,17.069h10.332
+ c1.248,0,2.082,1.003,1.854,2.229l-7.842,42.223c-0.228,1.226-0.785,3.18-1.239,4.342c0,0-1.519,3.887-3.175,3.887H9.086"/>
+</g>
+<g id="XMLID_1_">
+ <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="44.1943" y1="57.1567" x2="44.1943" y2="45.4849">
+ <stop offset="0" style="stop-color:#85A53D"/>
+ <stop offset="0.1032" style="stop-color:#8FB03D"/>
+ <stop offset="0.2503" style="stop-color:#98BA3C"/>
+ <stop offset="0.4552" style="stop-color:#9DC13B"/>
+ <stop offset="1" style="stop-color:#9FC23B"/>
+ </linearGradient>
+ <path fill="url(#SVGID_5_)" stroke="#788A38" stroke-width="1.2678" stroke-miterlimit="10" d="M49.101,45.591l-4.773,2.913h-4.665
+ c-0.438,0-0.797,0.359-0.797,0.797v3.819c0,0.438,0.359,0.796,0.797,0.796h4.41l5.028,3.133c0.232,0.2,0.423,0.112,0.423-0.193
+ v-11.07C49.523,45.479,49.333,45.392,49.101,45.591z"/>
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="61.3789" y1="29.8818" x2="61.3789" y2="41.624">
+ <stop offset="0" style="stop-color:#98DAF1"/>
+ <stop offset="0.1935" style="stop-color:#92D4EC"/>
+ <stop offset="0.4607" style="stop-color:#80C9E2"/>
+ <stop offset="0.7694" style="stop-color:#62B9D2"/>
+ <stop offset="1" style="stop-color:#42ACC6"/>
+ </linearGradient>
+
+ <polygon fill="url(#SVGID_6_)" stroke="#1C8DC0" stroke-width="1.2678" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 66.378,35.752 56.381,29.882 56.381,41.624 "/>
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="60.5996" y1="44.0835" x2="60.5996" y2="57.147">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.1048" style="stop-color:#F7CA43"/>
+ <stop offset="0.2764" style="stop-color:#F4B13D"/>
+ <stop offset="0.4512" style="stop-color:#F29E39"/>
+ <stop offset="0.6283" style="stop-color:#F19136"/>
+ <stop offset="0.8093" style="stop-color:#F08934"/>
+ <stop offset="1" style="stop-color:#F08734"/>
+ </linearGradient>
+
+ <polygon fill="url(#SVGID_7_)" stroke="#CD5728" stroke-width="1.2678" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 60.599,44.083 62.722,48.384 67.468,49.074 64.033,52.42 64.844,57.147 60.599,54.917 56.354,57.147 57.165,52.42 53.73,49.074
+ 58.477,48.384 "/>
+ <linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="44.6914" y1="30.3926" x2="44.6914" y2="42.3525">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.1863" style="stop-color:#F8D344"/>
+ <stop offset="0.6991" style="stop-color:#F7C03E"/>
+ <stop offset="1" style="stop-color:#F6B93C"/>
+ </linearGradient>
+
+ <polygon fill="url(#SVGID_8_)" stroke="#A36C33" stroke-width="1.2678" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
+ 50.88,32.958 50.88,42.352 38.504,42.352 38.504,30.393 43.964,30.393 45.178,32.984 "/>
+</g>
+<g>
+ <linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="16.3496" y1="44.6929" x2="8.4124" y2="71.9771">
+ <stop offset="0" style="stop-color:#F6B93C"/>
+ <stop offset="0.0341" style="stop-color:#F6B53A"/>
+ <stop offset="0.2023" style="stop-color:#F3A633"/>
+ <stop offset="0.393" style="stop-color:#F29C2E"/>
+ <stop offset="0.6231" style="stop-color:#F1962B"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_9_)" d="M18.332,55.027l8.522,8.555V38.696L2.087,38.721l7.428,7.456
+ c-4.562,5.018-20.488,25.244,6.841,37.215C16.355,83.392,1.005,68.668,18.332,55.027z"/>
+ <g>
+ <linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="18.166" y1="44.4995" x2="-7.476" y2="94.9566">
+ <stop offset="0" style="stop-color:#F9DB47"/>
+ <stop offset="0.0261" style="stop-color:#F8D244"/>
+ <stop offset="0.083" style="stop-color:#F6C33E"/>
+ <stop offset="0.1499" style="stop-color:#F5B63A"/>
+ <stop offset="0.2322" style="stop-color:#F3AE37"/>
+ <stop offset="0.3465" style="stop-color:#F3A936"/>
+ <stop offset="0.6503" style="stop-color:#F3A735"/>
+ <stop offset="1" style="stop-color:#F0942A"/>
+ </linearGradient>
+ <path fill="url(#SVGID_10_)" d="M16.947,84.315l-3.636-2.05C6.836,78.612,2.152,73.246,1.09,68.26
+ c-1.997-9.371,5.227-18.565,8.425-22.083l-7.427-7.456l24.767-0.025v24.885l-8.522-8.554c-5.218,4.107-7.987,8.725-8.231,13.722
+ c-0.24,4.913,3.354,10.315,4.535,12.092L16.947,84.315z M6.826,40.645l4.104,4.121c0.754,0.754,0.782,1.966,0.064,2.756
+ c-2.991,3.29-9.754,11.856-7.949,20.321c0.744,3.49,3.565,7.238,7.646,10.323c-1.384-2.638-2.755-6.122-2.59-9.516
+ c0.273-5.602,3.299-10.713,8.993-15.195c0.767-0.607,1.962-0.536,2.655,0.162l5.104,5.122V40.648L6.826,40.645z"/>
+ </g>
+ <path fill="#7B5020" d="M18.661,71.339"/>
+ <g>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M17.556,55.658
+ c0.251-0.211,0.51-0.421,0.776-0.631l0.705,0.708"/>
+
+ <line fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0151,4.0302" x1="21.883" y1="58.59" x2="24.727" y2="61.445"/>
+ <polyline fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" points="
+ 26.149,62.874 26.854,63.582 26.854,62.582 "/>
+
+ <line fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0805,4.161" x1="26.854" y1="58.42" x2="26.854" y2="41.777"/>
+ <polyline fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" points="
+ 26.854,39.696 26.854,38.696 25.854,38.697 "/>
+
+ <line fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="2.0698,4.1396" x1="21.715" y1="38.701" x2="5.157" y2="38.719"/>
+ <polyline fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" points="3.087,38.72
+ 2.087,38.721 2.792,39.43 "/>
+
+ <line fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.7047,3.4095" x1="5.199" y1="41.845" x2="7.605" y2="44.261"/>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M8.809,45.468
+ l0.706,0.709c-0.2,0.219-0.422,0.469-0.661,0.745"/>
+
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.9484,3.8969" d="
+ M6.443,49.978C1,57.557-5.707,72.191,13.686,82.128"/>
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M15.443,82.983
+ c0.298,0.137,0.603,0.274,0.912,0.409c0,0-0.265-0.253-0.684-0.724"/>
+
+ <path fill="none" stroke="#7B5020" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.8156,3.6312" d="
+ M13.47,79.787c-3.192-4.87-6.735-13.974,2.723-22.919"/>
+ </g>
+</g>
+</svg>
diff --git a/Sankore-3.1/resources/images/trapFlashPalette/trappedFlashIcon.svg b/Sankore-3.1/resources/images/trapFlashPalette/trappedFlashIcon.svg
new file mode 100644
index 0000000..47c3682
--- /dev/null
+++ b/Sankore-3.1/resources/images/trapFlashPalette/trappedFlashIcon.svg
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-4.421 -6.49 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g>
+ <path fill="#FFFFFF" d="M72.67,25.439c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335
+ c-3.489,0-6.655,1.352-9.032,3.545C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137
+ c0,1.841,0.274,3.615,0.759,5.299C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.457
+ c9.389,0,16.999-7.246,16.999-16.186C85.205,33.576,79.889,27.308,72.67,25.439z"/>
+ <path fill="#FFFFFF" d="M72.67,25.439c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335
+ c-3.489,0-6.655,1.352-9.032,3.545C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137
+ c0,1.841,0.274,3.615,0.759,5.299C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.457
+ c9.389,0,16.999-7.246,16.999-16.186C85.205,33.576,79.889,27.308,72.67,25.439z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="42.9775" y1="54.2275" x2="42.9775" y2="3.7499">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M17.75,54.228c-7.719,0-14-5.915-14-13.186c0-6.22,4.686-11.649,11.141-12.911
+ c0.823-0.161,1.546-0.664,1.984-1.379c0.438-0.715,0.556-1.588,0.324-2.395c-0.426-1.479-0.642-2.983-0.642-4.469
+ c0-8.898,7.239-16.137,16.137-16.137c6.635,0,12.687,4.174,15.062,10.388c0.354,0.931,1.147,1.623,2.118,1.85
+ c0.222,0.052,0.452,0.079,0.684,0.079c0.757,0,1.479-0.283,2.034-0.795c1.922-1.773,4.407-2.75,6.998-2.75
+ c5.699,0,10.336,4.636,10.336,10.335c0,0.661-0.066,1.335-0.199,2.004c-0.305,1.556,0.658,3.085,2.192,3.482
+ c6.058,1.568,10.287,6.79,10.287,12.698c0,7.271-6.279,13.186-13.999,13.186H17.75z"/>
+ <path fill="none" stroke="#A2A9AD" stroke-width="1.5" stroke-miterlimit="10" d="M72.67,25.439
+ c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335c-3.489,0-6.655,1.352-9.032,3.545
+ C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137c0,1.841,0.274,3.615,0.759,5.299
+ C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.457c9.389,0,16.999-7.246,16.999-16.186
+ C85.205,33.576,79.889,27.308,72.67,25.439z"/>
+</g>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="42.4053" y1="80.4297" x2="42.4053" y2="34.0259">
+ <stop offset="0" style="stop-color:#D35F5F"/>
+ <stop offset="1" style="stop-color:#F26C6C"/>
+</linearGradient>
+<path fill="url(#SVGID_2_)" d="M47.944,38.504c-5.871,4.961-8.402,13.21-10.088,17.365c-2.314,5.706-3.652,8.683-6.531,12.155
+ c-2.758,3.326-8.27,3.143-8.27,3.143v9.249c0,0,7.938,0.497,13.809-4.465c4.607-3.893,7.154-9.802,8.854-14.178h11.104v-9.177
+ h-7.277c1.123-2.306,2.273-4.154,3.941-6.166c2.758-3.326,8.27-3.142,8.27-3.142v-9.25C61.755,34.039,53.815,33.542,47.944,38.504z"
+ />
+<path fill="#C22026" d="M47.944,41.504c-4.393,4.975-7.402,13.21-9.088,17.365c-2.314,5.706-3.969,9.389-7.531,12.155
+ c-2.934,2.277-8.27,2.143-8.27,2.143v7.249c0,0,7.938,0.497,13.809-4.465c4.607-3.893,7.154-9.802,8.854-14.178h11.104v-9.177
+ h-7.277c1.123-2.306,2.273-4.154,3.941-6.166c2.758-3.326,8.27-3.142,8.27-3.142v-7.25C61.755,36.039,53.188,35.565,47.944,41.504z"
+ />
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="22.6064" y1="57.2451" x2="61.3057" y2="57.2451">
+ <stop offset="0" style="stop-color:#D71F26"/>
+ <stop offset="1" style="stop-color:#EE2A27"/>
+</linearGradient>
+<path fill="url(#SVGID_3_)" d="M47.497,41.504c-4.393,4.975-7.402,13.21-9.088,17.365c-2.316,5.706-3.969,9.389-7.533,12.155
+ c-2.934,2.277-8.27,2.143-8.27,2.143v5.249c0,0,8.219,0.811,13.811-4.465c4.201-3.964,6.152-9.802,7.852-14.178h12.105v-7.177
+ l-9.279,1.593c0.68-2.641,2.627-6.734,4.381-8.674c4.096-4.533,9.83-4.227,9.83-4.227v-5.25
+ C61.306,36.039,52.741,35.565,47.497,41.504z"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="44.0947" y1="53.3936" x2="53.8213" y2="53.3936">
+ <stop offset="0" style="stop-color:#D35F5F"/>
+ <stop offset="1" style="stop-color:#F26C6C"/>
+</linearGradient>
+<polygon fill="url(#SVGID_4_)" points="53.821,54.189 44.095,54.189 46.544,52.597 53.821,52.597 "/>
+<path fill="none" stroke="#7E1416" stroke-linejoin="round" stroke-miterlimit="10" d="M47.944,38.504
+ c-5.871,4.961-8.402,13.21-10.088,17.365c-2.314,5.706-3.652,8.683-6.531,12.155c-2.758,3.326-8.27,3.143-8.27,3.143v9.249
+ c0,0,7.938,0.497,13.809-4.465c4.607-3.893,7.154-9.802,8.854-14.178h11.104v-9.177h-7.277c1.123-2.306,2.273-4.154,3.941-6.166
+ c2.758-3.326,8.27-3.142,8.27-3.142v-9.25C61.755,34.039,53.815,33.542,47.944,38.504z"/>
+</svg>
diff --git a/Sankore-3.1/resources/images/trapFlashPalette/trappedIcon.svg b/Sankore-3.1/resources/images/trapFlashPalette/trappedIcon.svg
new file mode 100644
index 0000000..bc76ebe
--- /dev/null
+++ b/Sankore-3.1/resources/images/trapFlashPalette/trappedIcon.svg
@@ -0,0 +1,316 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.2"
+ x="0px"
+ y="0px"
+ width="96px"
+ height="96px"
+ viewBox="-4.421 -6.49 96 96"
+ overflow="visible"
+ xml:space="preserve"
+ id="svg2"
+ inkscape:version="0.48.3.1 r9886"
+ sodipodi:docname="trappedIcon.svg"><metadata
+ id="metadata48"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="640"
+ inkscape:window-height="480"
+ id="namedview46"
+ showgrid="false"
+ inkscape:zoom="2.4583333"
+ inkscape:cx="47.999999"
+ inkscape:cy="47.999999"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2" />
+<defs
+ id="defs4">
+<linearGradient
+ id="SVGID_2_-6"
+ gradientUnits="userSpaceOnUse"
+ x1="23.2871"
+ y1="42.993698"
+ x2="15.3499"
+ y2="70.277901"><stop
+ offset="0"
+ style="stop-color:#F6B93C"
+ id="stop23" /><stop
+ offset="0.0341"
+ style="stop-color:#F6B53A"
+ id="stop25" /><stop
+ offset="0.2023"
+ style="stop-color:#F3A633"
+ id="stop27" /><stop
+ offset="0.393"
+ style="stop-color:#F29C2E"
+ id="stop29" /><stop
+ offset="0.6231"
+ style="stop-color:#F1962B"
+ id="stop31-5" /><stop
+ offset="1"
+ style="stop-color:#F0942A"
+ id="stop33-2" /></linearGradient><linearGradient
+ id="SVGID_3_-2"
+ gradientUnits="userSpaceOnUse"
+ x1="25.1035"
+ y1="42.800301"
+ x2="-0.53850001"
+ y2="93.257401"><stop
+ offset="0"
+ style="stop-color:#F9DB47"
+ id="stop40-9" /><stop
+ offset="0.0261"
+ style="stop-color:#F8D244"
+ id="stop42" /><stop
+ offset="0.083"
+ style="stop-color:#F6C33E"
+ id="stop44" /><stop
+ offset="0.1499"
+ style="stop-color:#F5B63A"
+ id="stop46" /><stop
+ offset="0.2322"
+ style="stop-color:#F3AE37"
+ id="stop48" /><stop
+ offset="0.3465"
+ style="stop-color:#F3A936"
+ id="stop50" /><stop
+ offset="0.6503"
+ style="stop-color:#F3A735"
+ id="stop52" /><stop
+ offset="1"
+ style="stop-color:#F0942A"
+ id="stop54" /></linearGradient></defs>
+<g
+ id="g6">
+ <path
+ fill="#FFFFFF"
+ d="M72.67,25.439c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335 c-3.489,0-6.655,1.352-9.032,3.545C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137 c0,1.841,0.274,3.615,0.759,5.299C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.457 c9.389,0,16.999-7.246,16.999-16.186C85.205,33.576,79.889,27.308,72.67,25.439z"
+ id="path8" />
+ <path
+ fill="#FFFFFF"
+ d="M72.67,25.439c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335 c-3.489,0-6.655,1.352-9.032,3.545C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137 c0,1.841,0.274,3.615,0.759,5.299C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.457 c9.389,0,16.999-7.246,16.999-16.186C85.205,33.576,79.889,27.308,72.67,25.439z"
+ id="path10" />
+ <linearGradient
+ id="SVGID_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="42.9775"
+ y1="54.2275"
+ x2="42.9775"
+ y2="3.7499">
+ <stop
+ offset="0"
+ style="stop-color:#F0F1F2"
+ id="stop13" />
+ <stop
+ offset="1"
+ style="stop-color:#FAFDFD"
+ id="stop15" />
+ </linearGradient>
+ <path
+ fill="url(#SVGID_1_)"
+ d="M17.75,54.228c-7.719,0-14-5.915-14-13.186c0-6.22,4.686-11.649,11.141-12.911 c0.823-0.161,1.546-0.664,1.984-1.379c0.438-0.715,0.556-1.588,0.324-2.395c-0.426-1.479-0.642-2.983-0.642-4.469 c0-8.898,7.239-16.137,16.137-16.137c6.635,0,12.687,4.174,15.062,10.388c0.354,0.931,1.147,1.623,2.118,1.85 c0.222,0.052,0.452,0.079,0.684,0.079c0.757,0,1.479-0.283,2.034-0.795c1.922-1.773,4.407-2.75,6.998-2.75 c5.699,0,10.336,4.636,10.336,10.335c0,0.661-0.066,1.335-0.199,2.004c-0.305,1.556,0.658,3.085,2.192,3.482 c6.058,1.568,10.287,6.79,10.287,12.698c0,7.271-6.279,13.186-13.999,13.186H17.75z"
+ id="path17" />
+ <path
+ fill="none"
+ stroke="#A2A9AD"
+ stroke-width="1.5"
+ stroke-miterlimit="10"
+ d="M72.67,25.439 c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335c-3.489,0-6.655,1.352-9.032,3.545 C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137c0,1.841,0.274,3.615,0.759,5.299 C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.457c9.389,0,16.999-7.246,16.999-16.186 C85.205,33.576,79.889,27.308,72.67,25.439z"
+ id="path19" />
+</g>
+<linearGradient
+ id="SVGID_2_"
+ gradientUnits="userSpaceOnUse"
+ x1="42.4053"
+ y1="80.4297"
+ x2="42.4053"
+ y2="34.0259">
+ <stop
+ offset="0"
+ style="stop-color:#D35F5F"
+ id="stop22" />
+ <stop
+ offset="1"
+ style="stop-color:#F26C6C"
+ id="stop24" />
+</linearGradient>
+
+
+<linearGradient
+ id="SVGID_3_"
+ gradientUnits="userSpaceOnUse"
+ x1="22.6064"
+ y1="57.2451"
+ x2="61.3057"
+ y2="57.2451">
+ <stop
+ offset="0"
+ style="stop-color:#D71F26"
+ id="stop31" />
+ <stop
+ offset="1"
+ style="stop-color:#EE2A27"
+ id="stop33" />
+</linearGradient>
+
+<linearGradient
+ id="SVGID_4_"
+ gradientUnits="userSpaceOnUse"
+ x1="44.0947"
+ y1="53.3936"
+ x2="53.8213"
+ y2="53.3936">
+ <stop
+ offset="0"
+ style="stop-color:#D35F5F"
+ id="stop38" />
+ <stop
+ offset="1"
+ style="stop-color:#F26C6C"
+ id="stop40" />
+</linearGradient>
+
+
+<g
+ transform="translate(16.73785,-10.599466)"
+ id="XMLID_1_"><linearGradient
+ id="linearGradient3092"
+ gradientUnits="userSpaceOnUse"
+ x1="23.2871"
+ y1="42.993698"
+ x2="15.3499"
+ y2="70.277901"><stop
+ offset="0"
+ style="stop-color:#F6B93C"
+ id="stop3094" /><stop
+ offset="0.0341"
+ style="stop-color:#F6B53A"
+ id="stop3096" /><stop
+ offset="0.2023"
+ style="stop-color:#F3A633"
+ id="stop3098" /><stop
+ offset="0.393"
+ style="stop-color:#F29C2E"
+ id="stop3100" /><stop
+ offset="0.6231"
+ style="stop-color:#F1962B"
+ id="stop3102" /><stop
+ offset="1"
+ style="stop-color:#F0942A"
+ id="stop3104" /></linearGradient><path
+ style="fill:url(#SVGID_2_-6)"
+ inkscape:connector-curvature="0"
+ d="m 25.27,53.328 8.522,8.555 V 36.997 l -24.768,0.025 7.428,7.456 c -4.562,5.018 -20.488,25.244 6.841,37.215 0,0 -15.351,-14.724 1.977,-28.365 z"
+ id="path35" /><g
+ id="g37"><linearGradient
+ id="linearGradient3108"
+ gradientUnits="userSpaceOnUse"
+ x1="25.1035"
+ y1="42.800301"
+ x2="-0.53850001"
+ y2="93.257401"><stop
+ offset="0"
+ style="stop-color:#F9DB47"
+ id="stop3110" /><stop
+ offset="0.0261"
+ style="stop-color:#F8D244"
+ id="stop3112" /><stop
+ offset="0.083"
+ style="stop-color:#F6C33E"
+ id="stop3114" /><stop
+ offset="0.1499"
+ style="stop-color:#F5B63A"
+ id="stop3116" /><stop
+ offset="0.2322"
+ style="stop-color:#F3AE37"
+ id="stop3118" /><stop
+ offset="0.3465"
+ style="stop-color:#F3A936"
+ id="stop3120" /><stop
+ offset="0.6503"
+ style="stop-color:#F3A735"
+ id="stop3122" /><stop
+ offset="1"
+ style="stop-color:#F0942A"
+ id="stop3124" /></linearGradient><path
+ style="fill:url(#SVGID_3_-2)"
+ inkscape:connector-curvature="0"
+ d="m 23.885,82.616 -3.636,-2.05 C 13.773,76.913 9.09,71.546 8.027,66.561 6.03,57.19 13.254,47.996 16.452,44.478 L 9.025,37.022 33.792,36.997 V 61.882 L 25.27,53.328 c -5.218,4.107 -7.987,8.725 -8.231,13.722 -0.24,4.913 3.354,10.315 4.535,12.092 l 2.311,3.474 z m -10.121,-43.67 4.104,4.121 c 0.754,0.754 0.782,1.966 0.064,2.756 -2.991,3.29 -9.754,11.856 -7.949,20.321 0.744,3.49 3.565,7.238 7.646,10.323 -1.384,-2.638 -2.755,-6.122 -2.59,-9.516 0.273,-5.602 3.299,-10.713 8.993,-15.195 0.767,-0.607 1.962,-0.536 2.655,0.162 l 5.104,5.122 V 38.949 L 13.764,38.946 z"
+ id="path56" /></g><path
+ style="fill:#7b5020"
+ inkscape:connector-curvature="0"
+ d="M 25.599,69.64"
+ id="path58" /><g
+ id="g60"><path
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round"
+ inkscape:connector-curvature="0"
+ d="m 24.493,53.958 c 0.251,-0.211 0.51,-0.421 0.776,-0.631 l 0.706,0.708"
+ id="path62" /><line
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.0151, 4.0302"
+ x1="28.82"
+ y1="56.890999"
+ x2="31.664"
+ y2="59.745998"
+ id="line64" /><polyline
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round"
+ points=" 33.087,61.174 33.792,61.882 33.792,60.882 "
+ id="polyline66" /><line
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.0805, 4.161"
+ x1="33.792"
+ y1="56.721001"
+ x2="33.792"
+ y2="40.077999"
+ id="line68" /><polyline
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round"
+ points=" 33.792,37.997 33.792,36.997 32.792,36.998 "
+ id="polyline70" /><line
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:2.0698, 4.1396"
+ x1="28.652"
+ y1="37.000999"
+ x2="12.094"
+ y2="37.02"
+ id="line72" /><polyline
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round"
+ points=" 10.024,37.021 9.024,37.022 9.73,37.731 "
+ id="polyline74" /><line
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.7047, 3.4095"
+ x1="12.137"
+ y1="40.146"
+ x2="14.543"
+ y2="42.562"
+ id="line76" /><path
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round"
+ inkscape:connector-curvature="0"
+ d="m 15.746,43.769 0.706,0.709 c -0.2,0.219 -0.422,0.469 -0.661,0.745"
+ id="path78" /><path
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.9484, 3.8969"
+ inkscape:connector-curvature="0"
+ d="M 13.38,48.279 C 7.937,55.858 1.23,70.492 20.623,80.429"
+ id="path80" /><path
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round"
+ inkscape:connector-curvature="0"
+ d="m 22.381,81.284 c 0.298,0.137 0.603,0.274 0.912,0.409 0,0 -0.265,-0.253 -0.684,-0.724"
+ id="path82" /><path
+ style="fill:none;stroke:#7b5020;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1.8156, 3.6312"
+ inkscape:connector-curvature="0"
+ d="M 20.407,78.087 C 17.215,73.217 13.673,64.113 23.131,55.168"
+ id="path84" /></g></g></svg>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/images/trapFlashPalette/trappedSoundIcon.svg b/Sankore-3.1/resources/images/trapFlashPalette/trappedSoundIcon.svg
new file mode 100644
index 0000000..37279ee
--- /dev/null
+++ b/Sankore-3.1/resources/images/trapFlashPalette/trappedSoundIcon.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-5.11 -6.49 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g>
+ <path fill="#FFFFFF" d="M72.67,25.439c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335
+ c-3.489,0-6.655,1.352-9.032,3.545C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137
+ c0,1.841,0.274,3.615,0.759,5.299C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.456
+ c9.389,0,16.999-7.246,16.999-16.186C85.205,33.576,79.889,27.308,72.67,25.439z"/>
+ <path fill="#FFFFFF" d="M72.67,25.439c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335
+ c-3.489,0-6.655,1.352-9.032,3.545C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137
+ c0,1.841,0.274,3.615,0.759,5.299C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.456
+ c9.389,0,16.999-7.246,16.999-16.186C85.205,33.576,79.889,27.308,72.67,25.439z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="42.9775" y1="54.2275" x2="42.9775" y2="3.7499">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M17.75,54.228c-7.72,0-14-5.915-14-13.186c0-6.22,4.686-11.649,11.141-12.911
+ c0.823-0.161,1.546-0.664,1.984-1.379c0.438-0.715,0.556-1.588,0.324-2.395c-0.426-1.479-0.642-2.983-0.642-4.469
+ c0-8.898,7.239-16.137,16.137-16.137c6.635,0,12.687,4.174,15.062,10.388c0.354,0.931,1.147,1.623,2.118,1.85
+ c0.222,0.052,0.452,0.079,0.684,0.079c0.757,0,1.479-0.283,2.034-0.795c1.922-1.773,4.407-2.75,6.998-2.75
+ c5.699,0,10.336,4.636,10.336,10.335c0,0.661-0.066,1.335-0.199,2.004c-0.305,1.556,0.658,3.085,2.192,3.482
+ c6.058,1.568,10.287,6.79,10.287,12.698c0,7.271-6.279,13.186-13.999,13.186H17.75z"/>
+ <path fill="none" stroke="#A2A9AD" stroke-width="1.5" stroke-miterlimit="10" d="M72.67,25.439
+ c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335c-3.489,0-6.655,1.352-9.032,3.545
+ C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137c0,1.841,0.274,3.615,0.759,5.299
+ C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.456c9.389,0,16.999-7.246,16.999-16.186
+ C85.205,33.576,79.889,27.308,72.67,25.439z"/>
+</g>
+<path fill="#9FC23B" d="M38.995,39.879l-10.863,9.332h-7.948c-1.404,0-2.553,1.147-2.553,2.551v12.236
+ c0,1.403,1.148,2.551,2.553,2.551h7.13l11.682,10.034c0.744,0.641,1.354,0.36,1.354-0.622V40.501
+ C40.35,39.519,39.739,39.239,38.995,39.879z"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="28.9902" y1="76.9268" x2="28.9902" y2="39.5361">
+ <stop offset="0" style="stop-color:#85A53D"/>
+ <stop offset="0.1032" style="stop-color:#8FB03D"/>
+ <stop offset="0.2503" style="stop-color:#98BA3C"/>
+ <stop offset="0.4552" style="stop-color:#9DC13B"/>
+ <stop offset="1" style="stop-color:#9FC23B"/>
+</linearGradient>
+<path fill="url(#SVGID_2_)" d="M38.995,39.879l-10.863,9.332h-7.948c-1.404,0-2.553,1.147-2.553,2.551v12.236
+ c0,1.403,1.148,2.551,2.553,2.551h7.13l11.682,10.034c0.744,0.641,1.354,0.36,1.354-0.622V40.501
+ C40.35,39.519,39.739,39.239,38.995,39.879z"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="56.1475" y1="57.8145" x2="71.4873" y2="57.8145">
+ <stop offset="0" style="stop-color:#85A53D"/>
+ <stop offset="0.1032" style="stop-color:#8FB03D"/>
+ <stop offset="0.2503" style="stop-color:#98BA3C"/>
+ <stop offset="0.4552" style="stop-color:#9DC13B"/>
+ <stop offset="1" style="stop-color:#9FC23B"/>
+</linearGradient>
+<path fill="url(#SVGID_3_)" d="M61.233,32.554c-0.187-0.189-0.44-0.296-0.706-0.297c-0.312-0.015-0.521,0.102-0.709,0.289
+ l-2.846,2.811c-0.393,0.388-0.396,1.021-0.009,1.414c5.496,5.566,8.523,12.937,8.523,20.753c0,8.082-3.208,15.631-9.034,21.254
+ c-0.397,0.383-0.409,1.016-0.025,1.414l2.777,2.877c0.185,0.191,0.437,0.301,0.702,0.307c0.006,0,0.012,0,0.018,0
+ c0.259,0,0.508-0.102,0.694-0.281c7.009-6.764,10.868-15.844,10.868-25.57C71.487,48.117,67.846,39.249,61.233,32.554z"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="49.0898" y1="57.7285" x2="61.3213" y2="57.7285">
+ <stop offset="0" style="stop-color:#85A53D"/>
+ <stop offset="0.1032" style="stop-color:#8FB03D"/>
+ <stop offset="0.2503" style="stop-color:#98BA3C"/>
+ <stop offset="0.4552" style="stop-color:#9DC13B"/>
+ <stop offset="1" style="stop-color:#9FC23B"/>
+</linearGradient>
+<path fill="url(#SVGID_4_)" d="M54.001,39.696c-0.187-0.189-0.44-0.296-0.706-0.297c-0.225-0.011-0.52,0.102-0.709,0.289
+ l-2.846,2.811c-0.393,0.388-0.396,1.021-0.009,1.414c3.604,3.651,5.59,8.485,5.59,13.611c0,5.302-2.104,10.252-5.926,13.939
+ c-0.19,0.184-0.301,0.437-0.306,0.702c-0.005,0.265,0.097,0.521,0.28,0.712l2.777,2.878c0.185,0.19,0.437,0.301,0.702,0.306
+ c0.006,0,0.012,0,0.018,0c0.259,0,0.508-0.101,0.694-0.28c5.004-4.829,7.76-11.312,7.76-18.257
+ C61.321,50.808,58.722,44.476,54.001,39.696z"/>
+<path fill="#ECF3D3" d="M20.086,66.11V53.874c0-1.403,1.191-2.551,2.647-2.551h7.35l10.354-8.56l0.146-1.567
+ c0-0.982,0.512-1.591-0.986-0.951l-11.271,9.332h-7.523c-1.457,0-2.647,1.148-2.647,2.551v12.236c0,1.208,0.886,2.223,2.06,2.482
+ C20.139,66.611,20.086,66.368,20.086,66.11z"/>
+<polygon fill="#ECF3D3" points="51.15,45.608 55.576,41.448 53.325,39.083 49.204,42.937 "/>
+<polygon fill="#ECF3D3" points="58.668,38.357 63.094,34.198 60.843,31.832 56.722,35.686 "/>
+<path fill="#819F3D" d="M39.195,73.69L27.514,63.656h-7.131c-0.102,0-0.198-0.019-0.297-0.03v2.913
+ c0.033,0.001,0.063,0.01,0.098,0.01h7.13l11.682,10.034c0.744,0.641,1.354,0.36,1.354-0.622v-2.145
+ C40.111,74.128,39.684,74.11,39.195,73.69z"/>
+<polyline fill="#819F3D" points="50.805,70.099 55.006,73.94 52.867,76.06 48.66,72.063 50.805,70.099 "/>
+<polyline fill="#819F3D" points="57.865,77.427 62.066,81.269 59.928,83.388 55.721,79.392 57.865,77.427 "/>
+<path fill="none" stroke="#788A38" stroke-width="1.5" stroke-miterlimit="10" d="M38.995,39.879l-10.863,9.332h-7.948
+ c-1.404,0-2.553,1.147-2.553,2.551v12.236c0,1.403,1.148,2.551,2.553,2.551h7.13l11.682,10.034c0.744,0.641,1.354,0.36,1.354-0.622
+ V40.501C40.35,39.519,39.739,39.239,38.995,39.879z"/>
+<path fill="none" stroke="#788A38" stroke-width="1.5" stroke-miterlimit="10" d="M61.233,32.554
+ c-0.187-0.189-0.44-0.296-0.706-0.297c-0.312-0.015-0.521,0.102-0.709,0.289l-2.846,2.811c-0.393,0.388-0.396,1.021-0.009,1.414
+ c5.496,5.566,8.523,12.937,8.523,20.753c0,8.082-3.208,15.631-9.034,21.254c-0.397,0.383-0.409,1.016-0.025,1.414l2.777,2.877
+ c0.185,0.191,0.437,0.301,0.702,0.307c0.006,0,0.012,0,0.018,0c0.259,0,0.508-0.102,0.694-0.281
+ c7.009-6.764,10.868-15.844,10.868-25.57C71.487,48.117,67.846,39.249,61.233,32.554z"/>
+<path fill="none" stroke="#788A38" stroke-width="1.5" stroke-miterlimit="10" d="M54.001,39.696
+ c-0.187-0.189-0.44-0.296-0.706-0.297c-0.225-0.011-0.52,0.102-0.709,0.289l-2.846,2.811c-0.393,0.388-0.396,1.021-0.009,1.414
+ c3.604,3.651,5.59,8.485,5.59,13.611c0,5.302-2.104,10.252-5.926,13.939c-0.19,0.184-0.301,0.437-0.306,0.702
+ c-0.005,0.265,0.097,0.521,0.28,0.712l2.777,2.878c0.185,0.19,0.437,0.301,0.702,0.306c0.006,0,0.012,0,0.018,0
+ c0.259,0,0.508-0.101,0.694-0.28c5.004-4.829,7.76-11.312,7.76-18.257C61.321,50.808,58.722,44.476,54.001,39.696z"/>
+</svg>
diff --git a/Sankore-3.1/resources/images/trapFlashPalette/trappedVideoIcon.svg b/Sankore-3.1/resources/images/trapFlashPalette/trappedVideoIcon.svg
new file mode 100644
index 0000000..c73bc40
--- /dev/null
+++ b/Sankore-3.1/resources/images/trapFlashPalette/trappedVideoIcon.svg
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In -->
+<!DOCTYPE svg [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+]>
+<svg version="1.2" baseProfile="tiny"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ x="0px" y="0px" width="96px" height="96px" viewBox="-4.801 -6.49 96 96" overflow="visible" xml:space="preserve">
+<defs>
+</defs>
+<g>
+ <path fill="#FFFFFF" d="M72.67,25.439c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335
+ c-3.489,0-6.655,1.352-9.032,3.545C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137
+ c0,1.841,0.274,3.615,0.759,5.299C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.457
+ c9.388,0,16.999-7.246,16.999-16.186C85.205,33.576,79.889,27.308,72.67,25.439z"/>
+ <path fill="#FFFFFF" d="M72.67,25.439c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335
+ c-3.489,0-6.655,1.352-9.032,3.545C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137
+ c0,1.841,0.274,3.615,0.759,5.299C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.457
+ c9.388,0,16.999-7.246,16.999-16.186C85.205,33.576,79.889,27.308,72.67,25.439z"/>
+ <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="42.9775" y1="54.2275" x2="42.9775" y2="3.7499">
+ <stop offset="0" style="stop-color:#F0F1F2"/>
+ <stop offset="1" style="stop-color:#FAFDFD"/>
+ </linearGradient>
+ <path fill="url(#SVGID_1_)" d="M17.75,54.228c-7.719,0-14-5.915-14-13.186c0-6.22,4.686-11.649,11.141-12.911
+ c0.823-0.161,1.546-0.664,1.984-1.379c0.438-0.715,0.556-1.588,0.324-2.395c-0.426-1.479-0.642-2.983-0.642-4.469
+ c0-8.898,7.239-16.137,16.137-16.137c6.635,0,12.687,4.174,15.062,10.388c0.354,0.931,1.147,1.623,2.118,1.85
+ c0.222,0.052,0.452,0.079,0.684,0.079c0.757,0,1.479-0.283,2.035-0.795c1.921-1.773,4.406-2.75,6.997-2.75
+ c5.699,0,10.336,4.636,10.336,10.335c0,0.661-0.066,1.335-0.199,2.004c-0.305,1.556,0.658,3.085,2.192,3.482
+ c6.058,1.568,10.287,6.79,10.287,12.698c0,7.271-6.279,13.186-13.999,13.186H17.75z"/>
+ <path fill="none" stroke="#A2A9AD" stroke-width="1.5" stroke-miterlimit="10" d="M72.67,25.439
+ c0.164-0.836,0.255-1.698,0.255-2.582c0-7.365-5.971-13.335-13.336-13.335c-3.489,0-6.655,1.352-9.032,3.545
+ C47.807,5.87,40.856,0.75,32.693,0.75c-10.568,0-19.137,8.568-19.137,19.137c0,1.841,0.274,3.615,0.759,5.299
+ C6.574,26.699,0.75,33.223,0.75,41.042c0,8.94,7.611,16.186,17,16.186h50.457c9.388,0,16.999-7.246,16.999-16.186
+ C85.205,33.576,79.889,27.308,72.67,25.439z"/>
+</g>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="30.8945" y1="53.2178" x2="54.2754" y2="53.2178">
+ <stop offset="0" style="stop-color:#238FCC"/>
+ <stop offset="1" style="stop-color:#4BA2DA"/>
+</linearGradient>
+<rect x="30.895" y="31.934" fill="url(#SVGID_2_)" width="23.381" height="42.567"/>
+<path fill="#3A3B3B" d="M22.241,31.089v46.276h41.21V31.089H22.241z M29.457,74.386h-4.236v-4.236h4.236V74.386z M29.457,67.169
+ h-4.236v-4.235h4.236V67.169z M29.457,59.953h-4.236v-4.235h4.236V59.953z M29.457,52.737h-4.236v-4.236h4.236V52.737z
+ M29.457,45.521h-4.236v-4.236h4.236V45.521z M29.457,38.305h-4.236v-4.236h4.236V38.305z M53.199,74.386H32.465V55.718h20.734
+ V74.386z M53.199,52.737H32.465V34.069h20.734V52.737z M60.443,74.386h-4.236v-4.236h4.236V74.386z M60.443,67.169h-4.236v-4.235
+ h4.236V67.169z M60.443,59.953h-4.236v-4.235h4.236V59.953z M60.443,52.737h-4.236v-4.236h4.236V52.737z M60.443,45.521h-4.236
+ v-4.236h4.236V45.521z M60.443,38.305h-4.236v-4.236h4.236V38.305z"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="42.832" y1="48.1772" x2="42.832" y2="34.0693">
+ <stop offset="0" style="stop-color:#F5F5F5;stop-opacity:0.3"/>
+ <stop offset="1" style="stop-color:#F5F5F5;stop-opacity:0.7"/>
+</linearGradient>
+<path fill="url(#SVGID_3_)" d="M52.027,37.272c0.393,0,0.784,0.01,1.172,0.03v-3.233H32.465v14.108
+ C36.52,41.633,43.764,37.272,52.027,37.272z"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="42.832" y1="70.2959" x2="42.832" y2="56.1875">
+ <stop offset="0" style="stop-color:#F5F5F5;stop-opacity:0.3"/>
+ <stop offset="1" style="stop-color:#F5F5F5;stop-opacity:0.7"/>
+</linearGradient>
+<path fill="url(#SVGID_4_)" d="M52.027,59.391c0.393,0,0.784,0.011,1.172,0.03v-3.233H32.465v14.108
+ C36.52,63.751,43.764,59.391,52.027,59.391z"/>
+</svg>
diff --git a/Sankore-3.1/resources/library/applications/Wikipedia.wgt/config.xml b/Sankore-3.1/resources/library/applications/Wikipedia.wgt/config.xml
index d1d4102..7619211 100644
--- a/Sankore-3.1/resources/library/applications/Wikipedia.wgt/config.xml
+++ b/Sankore-3.1/resources/library/applications/Wikipedia.wgt/config.xml
@@ -1,16 +1,18 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets"
- xmlns:ub="http://uniboard.mnemis.com/widgets"
- identifier="http://uniboard.mnemis.com/widgets/wikipedia"
- version="1.2"
- width="370"
- height="400"
- ub:resizable = "true">
-
- <name>Wikipedia</name>
- <author href="http://www.getuniboard.com"
- email="info at mnemis.com">Mnemis SA</author>
- <description>Wikipedia, the free encyclopedia</description>
-
- <content src="index.html"/>
-</widget>
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets"
+ xmlns:ub="http://uniboard.mnemis.com/widgets"
+ identifier="http://uniboard.mnemis.com/widgets/wikipedia"
+ version="1.2"
+ minimum_height="260"
+ minimum_width="360"
+ width="370"
+ height="400"
+ ub:resizable = "true">
+
+ <name>Wikipedia</name>
+ <author href="http://www.getuniboard.com"
+ email="info at mnemis.com">Mnemis SA</author>
+ <description>Wikipedia, the free encyclopedia</description>
+
+ <content src="index.html"/>
+</widget>
diff --git a/Sankore-3.1/resources/library/applications/Wikipedia.wgt/index.html b/Sankore-3.1/resources/library/applications/Wikipedia.wgt/index.html
index 8199627..7235060 100644
--- a/Sankore-3.1/resources/library/applications/Wikipedia.wgt/index.html
+++ b/Sankore-3.1/resources/library/applications/Wikipedia.wgt/index.html
@@ -1,380 +1,373 @@
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
- <head>
- <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
- <title>Wikipedia</title>
-
- <link rel="stylesheet" type="text/css" href="css/master.css"/>
- <link rel="stylesheet" type="text/css" href="css/superfish.css"/>
-
- <!-- jQuery -->
- <script type="text/javascript" src="script/jquery.min.js"></script>
- <script type="text/javascript" src="script/superfish.js"></script>
- <script type="text/javascript" src="script/languages.js"></script>
-
- <script type="text/javascript">
-
- var popupFlag = false
- var browsing = false;
- var lang = 'en';
- var internalChange = false;
- var syslang = "en";
-
- if(window.sankore){
- try{
- syslang = sankore.locale().substr(0,2);
- sankoreLang[syslang].search;
- } catch(e){
- syslang = "en";
- }
- } else
- syslang = "en";
-
- var toolbar = {
- state:"begin",
- loading:false
- };
- var appHistory = {
- list:[],
- back:function(){
- if(typeof(appHistory.list[appHistory.index-1]) !== "undefined"){
- appHistory.index--;
- wikiReq(appHistory.list[appHistory.index]);
- }
- },
- forward:function(){
- if(typeof(appHistory.list[appHistory.index+1]) !== "undefined"){
- appHistory.index++;
- wikiReq(appHistory.list[appHistory.index]);
- }
- },
- index:-1
- }
-
- $(document).ready(function() {
-
- var ubHistoryList = "";
- var ubHistoryIndex = "";
-
- $("#toolbar-down").html(sankoreLang[syslang].wikipedia);
-
- var popupText = $("<div id='popupWordInfo' class='popupWordInfo'></div>").appendTo("body");
-
- lang = navigator.userAgent.split(";");
-
- lang = (navigator.language || navigator.systemLanguage ||
- navigator.userLanguage || 'en').substr(0, 2).toLowerCase();
- $("#current-language").text(lang.charAt(0).toUpperCase() + lang.substr(1));
-
- if(window.sankore){
- toolbar.state = loadPref("historyState", "begin");
- ubHistoryList = loadPref("historyList", "");
- ubHistoryIndex = loadPref("historyIndex", "-1");
- }
-
- if(ubHistoryList !== "") {
- appHistory.list = ubHistoryList.split(",");
- appHistory.index = parseInt(ubHistoryIndex);
- wikiReq(appHistory.list[appHistory.index]);
- } else {
- wikiReq("");
- }
-
- $(window).resize();
-
- $("#languages-dropdown>li>ul>li").each(function(){
- $(this).click(function(){
- languagesHandler($(this).text());
- $("#current-language").text(lang.charAt(0).toUpperCase() + lang.substr(1));
- });
- });
-
- $("#languages-dropdown").superfish({
- dropShadows:false,
- speed:1,
- delay:100
- });
-
- $("#url")
- .change(function(){
- if(!toolbar.loading){
- browsing = false;
- wikiReq($("#url").val());
- }
- })
- .keypress(function (e){
- if(e.which == 13){
- $("#url").change();
- };
- });
-
- $("#toolbar-button-search").click(function(){
- $("#url").trigger("change");
- });
-
- $("#toolbar-button-search").mouseover(function(evt){
- popupFlag = true;
- popupText.text(sankoreLang[syslang].search)
- .css("top", evt.pageY + 5)
- .css("left", evt.pageX + 13)
- .css({width:"100px"})
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
-
- $("#toolbar-button-search, #toolbar-button-back, #toolbar-button-forward").mousemove(function(evt){
- popupText.css("top", evt.pageY + 5)
- .css("left", evt.pageX + 13);
- });
-
- $("#toolbar-button-search, #toolbar-button-back, #toolbar-button-forward").mouseout(function(evt){
- popupFlag = false;
- popupText.hide();
- });
-
- $("#url").val(appHistory.list[appHistory.index]);
-
- if($("#url").val().length > 0)
- $("#url").change();
-
- $("#toolbar-button-back").click(function(){
- browsing = true;
- appHistory.back();
- });
-
- $("#toolbar-button-back").mouseover(function(evt){
- popupFlag = true;
- popupText.text(sankoreLang[syslang].prev_word)
- .css("top", evt.pageY + 5)
- .css("left", evt.pageX + 13)
- .css({width:"110px"})
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
-
- $("#toolbar-button-forward").click(function(){
- browsing = true;
- appHistory.forward();
- });
-
- $("#toolbar-button-forward").mouseover(function(evt){
- popupFlag = true;
- popupText.text(sankoreLang[syslang].next_word)
- .css("top", evt.pageY + 5)
- .css("left", evt.pageX + 13)
- .css({width:"100px"})
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
-
- $("#toolbar-button-home").click(function(){
- });
- });
-
- $(window).resize(function(){
- $("#web-browser").height($(window).height() - $("#toolbar").height() - 2);
- $("#web-browser").width($(window).width() - 2);
-
- if($(window).width() < 370)
- window.resizeTo(370, $(window).height());
-
- if($(window).height() < 150)
- window.resizeTo($(window).width(), 150);
-
- });
-
- function wikiReq(kword){
-
- var textBoxInput = "";
-
- textBoxInput = remacc(kword.replace(/ /g,'+'));
-
- textBoxInput = textBoxInput.replace(textBoxInput.charAt(0),textBoxInput.charAt(0).toUpperCase());
- if(toolbar.state == "begin"){
- $('#web-browser').attr('src',"");
- toolbar.state = "started";
- }
- else
- $('#web-browser').attr('src',"http://" + lang + ".mobile.wikipedia.org/wiki/" + textBoxInput);
- $('#url').val(kword);
- $('#toolbar-button-search').css("background-image", "url(images/toolbarLoading.jpg)");
- toolbar.loading = true;
- }
-
- function hideLoading(){
- $('#toolbar-button-search').css("background-image", "url(images/toolbarButtonSearch.png)");
- toolbar.loading = false;
-
- // History
- if(appHistory.list[appHistory.index] !== $("#url").val() && !browsing && $("#url").val().length > 0){
- appHistory.list = appHistory.list.slice(0, appHistory.index+1);
- appHistory.list[appHistory.index+1] = $("#url").val();
- appHistory.index = appHistory.list.length-1;
- }
-
- if(window.sankore && $("#web-browser").attr("src") !== ""){
- savePref("historyState", "started");
- savePref("historyList", appHistory.list.toString());
- savePref("historyIndex", appHistory.index)
- }
- }
-
- String.prototype.accnt = function(){
- var cnt = 0;
- var acnt = this;
- acnt = acnt.split('');
- var sec = 'ÃÃÃÃÃÃ
à áâãäåÃÃÃÃÃÃÃòóôõöøÃÃÃÃèéêëðÃçÃÃÃÃÃìÃîïÃÃÃÃùúûüÃñŠšŸÿýŽž';
- var rep = ['A','A','A','A','A','A','a','a','a','a','a','a','O','O','O','O','O','O','O','o','o','o','o','o','o','E','E','E','E','e','e','e','e','e','C','c','D','I','I','I','I','i','i','i','i','U','U','U','U','u','u','u','u','N','n','S','s','Y','y','y','Z','z'];
- for (var y = 0; y < acnt.length; y++)
- if (sec.indexOf(acnt[y]) != -1)
- cnt++;
- return cnt;
- }
-
- String.prototype.renlacc = function(){
- var torem = this;
- torem = torem.split('');
- var toremout = new Array();
- var sec = 'ÃÃÃÃÃÃ
à áâãäåÃÃÃÃÃÃÃòóôõöøÃÃÃÃèéêëðÃçÃÃÃÃÃìÃîïÃÃÃÃùúûüÃñŠšŸÿýŽž';
- var rep = ['A','A','A','A','A','A','a','a','a','a','a','a','O','O','O','O','O','O','O','o','o','o','o','o','o','E','E','E','E','e','e','e','e','e','C','c','D','I','I','I','I','i','i','i','i','U','U','U','U','u','u','u','u','N','n','S','s','Y','y','y','Z','z'];
- for (var y = 0; y < torem.length; y++){
- if (sec.indexOf(torem[y]) != -1)
- toremout[y] = rep[sec.indexOf(torem[y])];
- else
- toremout[y] = torem[y];
- }
- var toascout = toremout.join('');
- document.title = toascout;
- return toascout;
- }
-
- function remacc(kword){
-
- var countarr = new Array();
- var c = '';
- var text=kword;
- var textout = new Array();
- text = text.replace(/\r/g,'');
- text = text.split('\n');
- var linecnt = text.length;
- for (var x = 0; x < linecnt; x++){
- countarr[x] = Math.abs(text[x].accnt());
- textout[x] = text[x].renlacc();
- }
- textout = textout.join('\n');
- return textout;
- }
-
- function loadPref(name, defaultValue){
- var pref = defaultValue;
-
- if (sankore.preference(name) !== "") {
- pref = sankore.preference(name);
- };
-
- return pref;
- };
-
- function savePref(name, value){
- sankore.setPreference(name, String(value));
- };
-
- function languagesHandler(language){
- switch(language){
- case "Deutsch":
- lang = 'de'
- break;
- case "English":
- lang = 'en'
- break;
- case "Español":
- lang = 'es'
- break;
- case "Français":
- lang = 'fr'
- break;
- case "Italiano":
- lang = 'it'
- break;
- case "Nederlands":
- lang = 'nl'
- break;
- case "Polski":
- lang = 'pl'
- break;
- case "Português":
- lang = 'pt'
- break;
- case "Ð ÑÑÑкий":
- lang = 'ru'
- break;
- case "æ¥æ¬èª":
- lang = 'ja'
- break;
- }
- };
-
- </script>
- </head>
- <body style="overflow:hidden; margin: 0px; width:100%; height:100%; position:absolute; background:#ffffff">
-
- <div id="toolbar">
-
- <div class="toolbar-body">
-
- <div id="toolbar-down" class="toolbar">
- Wikipedia
- </div> <!--toolbar-down-->
-
- </div> <!--toolbar-body-->
-
- <div class="toolbar-body">
-
- <div id="toolbar-up" class="toolbar">
- <div id="left-field">
- <div id="toolbar-button-back" class="button" alt="back button"></div>
- <div id="toolbar-button-forward" class="button" alt="forward button"></div>
- </div>
- <div id="center-field" class="full">
- <input type="text" id="url" alt="url"/>
- <div class="on-the-right">
- <div id="toolbar-button-search"></div>
- </div>
- </div> <!--center-field-->
- <div id="right-field">
- <div id="toolbar-button-languages" class="button" alt="languages button">
- <ul id='languages-dropdown' class='sf-menu'>
- <li class='current'><a id='current-language' class='selected' href='#a'></a>
- <ul>
- <li><a class="sf-sl-first" href="#">Deutsch</a></li>
- <li><a href="#">English</a></li>
- <li><a href="#">Español</a></li>
- <li><a href="#">Français</a></li>
- <li><a href="#">Italiano</a></li>
- <li><a href="#">Nederlands</a></li>
- <li><a href="#">Polski</a></li>
- <li><a href="#">Português</a></li>
- <li><a href="#">Ð ÑÑÑкий</a></li>
- <li><a class="sf-sl-last" href="#">æ¥æ¬èª</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </div> <!--toolbar-up-->
-
- </div> <!--toolbar-body-->
-
- </div> <!--toolbar-->
- <div id="web-canevas">
- <iframe id="web-browser" name="web-browser" src="" onload="hideLoading()"></iframe>
- </div>
- </body>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
+ <title>Wikipedia</title>
+
+ <link rel="stylesheet" type="text/css" href="css/master.css"/>
+ <link rel="stylesheet" type="text/css" href="css/superfish.css"/>
+
+ <!-- jQuery -->
+ <script type="text/javascript" src="script/jquery.min.js"></script>
+ <script type="text/javascript" src="script/superfish.js"></script>
+ <script type="text/javascript" src="script/languages.js"></script>
+
+ <script type="text/javascript">
+
+ var popupFlag = false
+ var browsing = false;
+ var lang = 'en';
+ var internalChange = false;
+ var syslang = "en";
+
+ if(window.sankore){
+ try{
+ syslang = sankore.locale().substr(0,2);
+ sankoreLang[syslang].search;
+ } catch(e){
+ syslang = "en";
+ }
+ } else
+ syslang = "en";
+
+ var toolbar = {
+ state:"begin",
+ loading:false
+ };
+ var appHistory = {
+ list:[],
+ back:function(){
+ if(typeof(appHistory.list[appHistory.index-1]) !== "undefined"){
+ appHistory.index--;
+ wikiReq(appHistory.list[appHistory.index]);
+ }
+ },
+ forward:function(){
+ if(typeof(appHistory.list[appHistory.index+1]) !== "undefined"){
+ appHistory.index++;
+ wikiReq(appHistory.list[appHistory.index]);
+ }
+ },
+ index:-1
+ }
+
+ $(document).ready(function() {
+
+ var ubHistoryList = "";
+ var ubHistoryIndex = "";
+
+ $("#toolbar-down").html(sankoreLang[syslang].wikipedia);
+
+ var popupText = $("<div id='popupWordInfo' class='popupWordInfo'></div>").appendTo("body");
+
+ lang = navigator.userAgent.split(";");
+
+ lang = (navigator.language || navigator.systemLanguage ||
+ navigator.userLanguage || 'en').substr(0, 2).toLowerCase();
+ $("#current-language").text(lang.charAt(0).toUpperCase() + lang.substr(1));
+
+ if(window.sankore){
+ toolbar.state = loadPref("historyState", "begin");
+ ubHistoryList = loadPref("historyList", "");
+ ubHistoryIndex = loadPref("historyIndex", "-1");
+ }
+
+ if(ubHistoryList !== "") {
+ appHistory.list = ubHistoryList.split(",");
+ appHistory.index = parseInt(ubHistoryIndex);
+ wikiReq(appHistory.list[appHistory.index]);
+ } else {
+ wikiReq("");
+ }
+
+ $(window).resize();
+
+ $("#languages-dropdown>li>ul>li").each(function(){
+ $(this).click(function(){
+ languagesHandler($(this).text());
+ $("#current-language").text(lang.charAt(0).toUpperCase() + lang.substr(1));
+ });
+ });
+
+ $("#languages-dropdown").superfish({
+ dropShadows:false,
+ speed:1,
+ delay:100
+ });
+
+ $("#url")
+ .change(function(){
+ if(!toolbar.loading){
+ browsing = false;
+ wikiReq($("#url").val());
+ }
+ })
+ .keypress(function (e){
+ if(e.which == 13){
+ $("#url").change();
+ };
+ });
+
+ $("#toolbar-button-search").click(function(){
+ $("#url").trigger("change");
+ });
+
+ $("#toolbar-button-search").mouseover(function(evt){
+ popupFlag = true;
+ popupText.text(sankoreLang[syslang].search)
+ .css("top", evt.pageY + 5)
+ .css("left", evt.pageX + 13)
+ .css({width:"100px"})
+ .show("fast", function(){
+ if(!popupFlag)
+ popupText.hide();
+ });
+ });
+
+ $("#toolbar-button-search, #toolbar-button-back, #toolbar-button-forward").mousemove(function(evt){
+ popupText.css("top", evt.pageY + 5)
+ .css("left", evt.pageX + 13);
+ });
+
+ $("#toolbar-button-search, #toolbar-button-back, #toolbar-button-forward").mouseout(function(evt){
+ popupFlag = false;
+ popupText.hide();
+ });
+
+ $("#url").val(appHistory.list[appHistory.index]);
+
+ if($("#url").val().length > 0)
+ $("#url").change();
+
+ $("#toolbar-button-back").click(function(){
+ browsing = true;
+ appHistory.back();
+ });
+
+ $("#toolbar-button-back").mouseover(function(evt){
+ popupFlag = true;
+ popupText.text(sankoreLang[syslang].prev_word)
+ .css("top", evt.pageY + 5)
+ .css("left", evt.pageX + 13)
+ .css({width:"110px"})
+ .show("fast", function(){
+ if(!popupFlag)
+ popupText.hide();
+ });
+ });
+
+ $("#toolbar-button-forward").click(function(){
+ browsing = true;
+ appHistory.forward();
+ });
+
+ $("#toolbar-button-forward").mouseover(function(evt){
+ popupFlag = true;
+ popupText.text(sankoreLang[syslang].next_word)
+ .css("top", evt.pageY + 5)
+ .css("left", evt.pageX + 13)
+ .css({width:"100px"})
+ .show("fast", function(){
+ if(!popupFlag)
+ popupText.hide();
+ });
+ });
+
+ $("#toolbar-button-home").click(function(){
+ });
+ });
+
+ $(window).resize(function(){
+ $("#web-browser").height($(window).height() - $("#toolbar").height() - 2);
+ $("#web-browser").width($(window).width() - 2);
+ });
+
+ function wikiReq(kword){
+
+ var textBoxInput = "";
+
+ textBoxInput = remacc(kword.replace(/ /g,'+'));
+
+ textBoxInput = textBoxInput.replace(textBoxInput.charAt(0),textBoxInput.charAt(0).toUpperCase());
+ if(toolbar.state == "begin"){
+ $('#web-browser').attr('src',"");
+ toolbar.state = "started";
+ }
+ else
+ $('#web-browser').attr('src',"http://" + lang + ".mobile.wikipedia.org/wiki/" + textBoxInput);
+ $('#url').val(kword);
+ $('#toolbar-button-search').css("background-image", "url(images/toolbarLoading.jpg)");
+ toolbar.loading = true;
+ }
+
+ function hideLoading(){
+ $('#toolbar-button-search').css("background-image", "url(images/toolbarButtonSearch.png)");
+ toolbar.loading = false;
+
+ // History
+ if(appHistory.list[appHistory.index] !== $("#url").val() && !browsing && $("#url").val().length > 0){
+ appHistory.list = appHistory.list.slice(0, appHistory.index+1);
+ appHistory.list[appHistory.index+1] = $("#url").val();
+ appHistory.index = appHistory.list.length-1;
+ }
+
+ if(window.sankore && $("#web-browser").attr("src") !== ""){
+ savePref("historyState", "started");
+ savePref("historyList", appHistory.list.toString());
+ savePref("historyIndex", appHistory.index)
+ }
+ }
+
+ String.prototype.accnt = function(){
+ var cnt = 0;
+ var acnt = this;
+ acnt = acnt.split('');
+ var sec = 'ÃÃÃÃÃÃ
à áâãäåÃÃÃÃÃÃÃòóôõöøÃÃÃÃèéêëðÃçÃÃÃÃÃìÃîïÃÃÃÃùúûüÃñŠšŸÿýŽž';
+ var rep = ['A','A','A','A','A','A','a','a','a','a','a','a','O','O','O','O','O','O','O','o','o','o','o','o','o','E','E','E','E','e','e','e','e','e','C','c','D','I','I','I','I','i','i','i','i','U','U','U','U','u','u','u','u','N','n','S','s','Y','y','y','Z','z'];
+ for (var y = 0; y < acnt.length; y++)
+ if (sec.indexOf(acnt[y]) != -1)
+ cnt++;
+ return cnt;
+ }
+
+ String.prototype.renlacc = function(){
+ var torem = this;
+ torem = torem.split('');
+ var toremout = new Array();
+ var sec = 'ÃÃÃÃÃÃ
à áâãäåÃÃÃÃÃÃÃòóôõöøÃÃÃÃèéêëðÃçÃÃÃÃÃìÃîïÃÃÃÃùúûüÃñŠšŸÿýŽž';
+ var rep = ['A','A','A','A','A','A','a','a','a','a','a','a','O','O','O','O','O','O','O','o','o','o','o','o','o','E','E','E','E','e','e','e','e','e','C','c','D','I','I','I','I','i','i','i','i','U','U','U','U','u','u','u','u','N','n','S','s','Y','y','y','Z','z'];
+ for (var y = 0; y < torem.length; y++){
+ if (sec.indexOf(torem[y]) != -1)
+ toremout[y] = rep[sec.indexOf(torem[y])];
+ else
+ toremout[y] = torem[y];
+ }
+ var toascout = toremout.join('');
+ document.title = toascout;
+ return toascout;
+ }
+
+ function remacc(kword){
+
+ var countarr = new Array();
+ var c = '';
+ var text=kword;
+ var textout = new Array();
+ text = text.replace(/\r/g,'');
+ text = text.split('\n');
+ var linecnt = text.length;
+ for (var x = 0; x < linecnt; x++){
+ countarr[x] = Math.abs(text[x].accnt());
+ textout[x] = text[x].renlacc();
+ }
+ textout = textout.join('\n');
+ return textout;
+ }
+
+ function loadPref(name, defaultValue){
+ var pref = defaultValue;
+
+ if (sankore.preference(name) !== "") {
+ pref = sankore.preference(name);
+ };
+
+ return pref;
+ };
+
+ function savePref(name, value){
+ sankore.setPreference(name, String(value));
+ };
+
+ function languagesHandler(language){
+ switch(language){
+ case "Deutsch":
+ lang = 'de'
+ break;
+ case "English":
+ lang = 'en'
+ break;
+ case "Español":
+ lang = 'es'
+ break;
+ case "Français":
+ lang = 'fr'
+ break;
+ case "Italiano":
+ lang = 'it'
+ break;
+ case "Nederlands":
+ lang = 'nl'
+ break;
+ case "Polski":
+ lang = 'pl'
+ break;
+ case "Português":
+ lang = 'pt'
+ break;
+ case "Ð ÑÑÑкий":
+ lang = 'ru'
+ break;
+ case "æ¥æ¬èª":
+ lang = 'ja'
+ break;
+ }
+ };
+
+ </script>
+ </head>
+ <body style="overflow:hidden; margin: 0px; width:100%; height:100%; position:absolute; background:#ffffff">
+
+ <div id="toolbar">
+
+ <div class="toolbar-body">
+
+ <div id="toolbar-down" class="toolbar">
+ Wikipedia
+ </div> <!--toolbar-down-->
+
+ </div> <!--toolbar-body-->
+
+ <div class="toolbar-body">
+
+ <div id="toolbar-up" class="toolbar">
+ <div id="left-field">
+ <div id="toolbar-button-back" class="button" alt="back button"></div>
+ <div id="toolbar-button-forward" class="button" alt="forward button"></div>
+ </div>
+ <div id="center-field" class="full">
+ <input type="text" id="url" alt="url"/>
+ <div class="on-the-right">
+ <div id="toolbar-button-search"></div>
+ </div>
+ </div> <!--center-field-->
+ <div id="right-field">
+ <div id="toolbar-button-languages" class="button" alt="languages button">
+ <ul id='languages-dropdown' class='sf-menu'>
+ <li class='current'><a id='current-language' class='selected' href='#a'></a>
+ <ul>
+ <li><a class="sf-sl-first" href="#">Deutsch</a></li>
+ <li><a>English</a></li>
+ <li><a>Español</a></li>
+ <li><a>Français</a></li>
+ <li><a>Italiano</a></li>
+ <li><a>Nederlands</a></li>
+ <li><a>Polski</a></li>
+ <li><a>Português</a></li>
+ <li><a>Ð ÑÑÑкий</a></li>
+ <li><a class="sf-sl-last">æ¥æ¬èª</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div> <!--toolbar-up-->
+
+ </div> <!--toolbar-body-->
+
+ </div> <!--toolbar-->
+ <div id="web-canevas">
+ <iframe id="web-browser" name="web-browser" src="" onload="hideLoading()"></iframe>
+ </div>
+ </body>
</html>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/applications/Wiktionnaire.wgt/config.xml b/Sankore-3.1/resources/library/applications/Wiktionnaire.wgt/config.xml
index 5edfef8..10d2d34 100644
--- a/Sankore-3.1/resources/library/applications/Wiktionnaire.wgt/config.xml
+++ b/Sankore-3.1/resources/library/applications/Wiktionnaire.wgt/config.xml
@@ -1,16 +1,18 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets"
- xmlns:ub="http://uniboard.mnemis.com/widgets"
- identifier="http://uniboard.mnemis.com/widgets/wikipedia"
- version="1.2"
- width="755"
- height="450"
- ub:resizable = "true">
-
- <name>Wikipedia</name>
- <author href="http://www.getuniboard.com"
- email="info at mnemis.com">Mnemis SA</author>
- <description>Wikipedia, the free encyclopedia</description>
-
- <content src="index.html"/>
-</widget>
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets"
+ xmlns:ub="http://uniboard.mnemis.com/widgets"
+ identifier="http://uniboard.mnemis.com/widgets/wikipedia"
+ version="1.2"
+ minimum_height="300"
+ minimum_width="360"
+ width="755"
+ height="450"
+ ub:resizable = "true">
+
+ <name>Wikipedia</name>
+ <author href="http://www.getuniboard.com"
+ email="info at mnemis.com">Mnemis SA</author>
+ <description>Wikipedia, the free encyclopedia</description>
+
+ <content src="index.html"/>
+</widget>
diff --git a/Sankore-3.1/resources/library/applications/Wiktionnaire.wgt/index.html b/Sankore-3.1/resources/library/applications/Wiktionnaire.wgt/index.html
index 1a83d88..5dc16ac 100644
--- a/Sankore-3.1/resources/library/applications/Wiktionnaire.wgt/index.html
+++ b/Sankore-3.1/resources/library/applications/Wiktionnaire.wgt/index.html
@@ -1,384 +1,380 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
- <head>
- <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
- <title>Wikipedia</title>
-
- <link rel="stylesheet" type="text/css" href="css/master.css"/>
- <link rel="stylesheet" type="text/css" href="css/superfish.css"/>
-
- <!-- jQuery -->
- <script type="text/javascript" src="script/jquery.min.js"></script>
- <script type="text/javascript" src="script/superfish.js"></script>
- <script type="text/javascript" src="script/languages.js"></script>
-
- <script type="text/javascript">
-
- var popupFlag = false;
- var browsing = false;
- var mode = 'wiki';
- var lang = 'en';
- var internalChange = false;
- var syslang = "en";
-
- if(window.sankore){
- try{
- syslang = sankore.locale().substr(0,2);
- sankoreLang[syslang].search;
- } catch(e){
- syslang = "en";
- }
- } else
- syslang = "en";
-
- var toolbar = {
- state:"",
- loading:false
- };
- var appHistory = {
- list:[],
- back:function(){
- if(typeof(appHistory.list[appHistory.index-1]) !== "undefined"){
- appHistory.index--;
- wikiReq(appHistory.list[appHistory.index]);
- }
- },
- forward:function(){
- if(typeof(appHistory.list[appHistory.index+1]) !== "undefined"){
- appHistory.index++;
- wikiReq(appHistory.list[appHistory.index]);
- }
- },
- index:-1
- }
-
- $(document).ready(function() {
-
- var ubHistoryList = "";
- var ubHistoryIndex = "";
-
- $("#toolbar-down").html(sankoreLang[syslang].wikipedia);
-
- var popupText = $("<div id='popupWordInfo' class='popupWordInfo'></div>").appendTo("body");
-
- lang = navigator.userAgent.split(";");
-
- lang = (navigator.language || navigator.systemLanguage ||
- navigator.userLanguage || 'en').substr(0, 2).toLowerCase();
- $("#current-language").text(lang.charAt(0).toUpperCase() + lang.substr(1));
-
- if(window.sankore){
- toolbar.state = loadPref("historyState", "begin");
- ubHistoryList = loadPref("historyList", "");
- ubHistoryIndex = loadPref("historyIndex", "-1");
- //window.resizeTo(350, 450);
- }
-
- if(ubHistoryList !== "") {
- appHistory.list = ubHistoryList.split(",");
- appHistory.index = parseInt(ubHistoryIndex);
- wikiReq(appHistory.list[appHistory.index]);
- } else {
- wikiReq("");
- }
-
- $(window).resize();
-
- $("#languages-dropdown>li>ul>li").each(function(){
- $(this).click(function(){
- languagesHandler($(this).text());
- $("#current-language").text(lang.charAt(0).toUpperCase() + lang.substr(1));
- });
- });
-
- $("#languages-dropdown").superfish({
- dropShadows:false,
- speed:1,
- delay:100
- });
-
- $("#url")
- .change(function(){
- if(!toolbar.loading){
- browsing = false;
- wikiReq($("#url").val());
- }
- })
- .keypress(function (e){
- if(e.which == 13){
- $("#url").change();
- };
- });
-
- $("#url").val(appHistory.list[appHistory.index]);
-
- if($("#url").val().length > 0)
- $("#url").change();
-
- $("#toolbar-button-search").click(function(){
- $("#url").trigger("change");
- });
-
- $("#toolbar-button-search").mouseover(function(evt){
- popupFlag = true;
- popupText.text(sankoreLang[syslang].search)
- .css("top", evt.pageY + 5)
- .css("left", evt.pageX + 13)
- .css({width:"70px"})
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
-
- $("#toolbar-button-search, #toolbar-button-back, #toolbar-button-forward").mousemove(function(evt){
- popupText.css("top", evt.pageY + 5)
- .css("left", evt.pageX + 13);
- });
-
- $("#toolbar-button-search, #toolbar-button-back, #toolbar-button-forward").mouseout(function(evt){
- popupFlag = false;
- popupText.hide();
- });
-
- $("#toolbar-button-back").click(function(){
- browsing = true;
- appHistory.back();
- });
-
- $("#toolbar-button-back").mouseover(function(evt){
- popupFlag = true;
- popupText.text(sankoreLang[syslang].prev_word)
- .css("top", evt.pageY + 5)
- .css("left", evt.pageX + 13)
- .css({width:"100px"})
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
-
- $("#toolbar-button-forward").click(function(){
- browsing = true;
- appHistory.forward();
- });
-
- $("#toolbar-button-forward").mouseover(function(evt){
- popupFlag = true;
- popupText.text(sankoreLang[syslang].next_word)
- .css("top", evt.pageY + 5)
- .css("left", evt.pageX + 13)
- .css({width:"70px"})
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
-
- $("#toolbar-button-home").click(function(){
- });
- });
-
- $(window).resize(function(){
-
- if($(window).width() < 370){
- window.resizeTo(370, $(window).height());
- } else if($(window).width() > 755){
- $("#web-browser").height($(window).height() - $("#toolbar").height() - 2);
- $("#web-browser").width($(window).width() - 2);
- } else
- $("#web-browser").height($(window).height() - $("#toolbar").height() - 2);
-
- if($(window).height() < 150)
- window.resizeTo($(window).width(), 150);
-
- });
-
- function wikiReq(kword){
-
- var textBoxInput = "";
-
- textBoxInput = remacc(kword.replace(/ /g,'_'));
-
- textBoxInput = textBoxInput.replace(textBoxInput.charAt(0),textBoxInput.charAt(0).toLowerCase());
- if(toolbar.state == "begin"){
- $('#web-browser').attr('src',"");
- toolbar.state = "started";
- }
- else
- $('#web-browser').attr('src',"http://" + lang + ".wiktionary.org/wiki/" + textBoxInput);
- $('#url').val(kword);
- $('#toolbar-button-search').css("background-image", "url(images/toolbarLoading.jpg)");
- toolbar.loading = true;
- }
-
- function hideLoading(){
- $('#toolbar-button-search').css("background-image", "url(images/toolbarButtonSearch.png)");
- toolbar.loading = false;
-
- // History
- if(appHistory.list[appHistory.index] !== $("#url").val() && !browsing && $("#url").val().length > 0){
- appHistory.list = appHistory.list.slice(0, appHistory.index+1);
- appHistory.list[appHistory.index+1] = $("#url").val();
- appHistory.index = appHistory.list.length-1;
- }
-
- if(window.sankore && $("#web-browser").attr("src") !== ""){
- savePref("historyState", "started");
- savePref("historyList", appHistory.list.toString());
- savePref("historyIndex", appHistory.index)
- }
- }
-
- String.prototype.accnt = function(){
- var cnt = 0;
- var acnt = this;
- acnt = acnt.split('');
- var sec = 'ÃÃÃÃÃÃ
à áâãäåÃÃÃÃÃÃÃòóôõöøÃÃÃÃèéêëðÃçÃÃÃÃÃìÃîïÃÃÃÃùúûüÃñŠšŸÿýŽž';
- var rep = ['A','A','A','A','A','A','a','a','a','a','a','a','O','O','O','O','O','O','O','o','o','o','o','o','o','E','E','E','E','e','e','e','e','e','C','c','D','I','I','I','I','i','i','i','i','U','U','U','U','u','u','u','u','N','n','S','s','Y','y','y','Z','z'];
- for (var y = 0; y < acnt.length; y++)
- if (sec.indexOf(acnt[y]) != -1)
- cnt++;
- return cnt;
- }
-
- String.prototype.renlacc = function(){
- var torem = this;
- torem = torem.split('');
- var toremout = new Array();
- var sec = 'ÃÃÃÃÃÃ
à áâãäåÃÃÃÃÃÃÃòóôõöøÃÃÃÃèéêëðÃçÃÃÃÃÃìÃîïÃÃÃÃùúûüÃñŠšŸÿýŽž';
- var rep = ['A','A','A','A','A','A','a','a','a','a','a','a','O','O','O','O','O','O','O','o','o','o','o','o','o','E','E','E','E','e','e','e','e','e','C','c','D','I','I','I','I','i','i','i','i','U','U','U','U','u','u','u','u','N','n','S','s','Y','y','y','Z','z'];
- for (var y = 0; y < torem.length; y++){
- if (sec.indexOf(torem[y]) != -1)
- toremout[y] = rep[sec.indexOf(torem[y])];
- else
- toremout[y] = torem[y];
- }
- var toascout = toremout.join('');
- document.title = toascout;
- return toascout;
- }
-
- function remacc(kword){
-
- var countarr = new Array();
- var c = '';
- var text=kword;
- var textout = new Array();
- text = text.replace(/\r/g,'');
- text = text.split('\n');
- var linecnt = text.length;
- for (var x = 0; x < linecnt; x++){
- countarr[x] = Math.abs(text[x].accnt());
- textout[x] = text[x].renlacc();
- }
- textout = textout.join('\n');
- return textout;
- }
-
- function loadPref(name, defaultValue){
- var pref = defaultValue;
-
- if (sankore.preference(name) !== "") {
- pref = sankore.preference(name);
- };
-
- return pref;
- };
-
- function savePref(name, value){
- sankore.setPreference(name, String(value));
- };
-
- function languagesHandler(language){
- switch(language){
- case "Deutsch":
- lang = 'de'
- break;
- case "English":
- lang = 'en'
- break;
- case "Español":
- lang = 'es'
- break;
- case "Français":
- lang = 'fr'
- break;
- case "Italiano":
- lang = 'it'
- break;
- case "Nederlands":
- lang = 'nl'
- break;
- case "Polski":
- lang = 'pl'
- break;
- case "Português":
- lang = 'pt'
- break;
- case "Ð ÑÑÑкий":
- lang = 'ru'
- break;
- case "æ¥æ¬èª":
- lang = 'ja'
- break;
- }
- };
-
- </script>
- </head>
- <body style="overflow:hidden; margin: 0px; width:100%; height:100%; position:absolute; background:#ffffff">
-
- <div id="toolbar">
-
- <div class="toolbar-body">
-
- <div id="toolbar-down" class="toolbar">
- Wiktionary
- </div> <!--toolbar-down-->
-
- </div> <!--toolbar-body-->
-
- <div class="toolbar-body">
-
- <div id="toolbar-up" class="toolbar">
- <div id="left-field">
- <div id="toolbar-button-back" class="button" alt="back button"></div>
- <div id="toolbar-button-forward" class="button" alt="forward button"></div>
- </div>
- <div id="center-field" class="full">
- <input type="text" id="url" alt="url"/>
- <div class="on-the-right">
- <div id="toolbar-button-search"></div>
- </div>
- </div> <!--center-field-->
- <div id="right-field">
- <div id="toolbar-button-languages" class="button" alt="languages button">
- <ul id='languages-dropdown' class='sf-menu'>
- <li class='current'><a id='current-language' class='selected' href='#a'></a>
- <ul>
- <li><a class="sf-sl-first" href="#">Deutsch</a></li>
- <li><a href="#">English</a></li>
- <li><a href="#">Español</a></li>
- <li><a href="#">Français</a></li>
- <li><a href="#">Italiano</a></li>
- <li><a href="#">Nederlands</a></li>
- <li><a href="#">Polski</a></li>
- <li><a href="#">Português</a></li>
- <li><a href="#">Ð ÑÑÑкий</a></li>
- <li><a class="sf-sl-last" href="#">æ¥æ¬èª</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </div> <!--toolbar-up-->
-
- </div> <!--toolbar-body-->
-
- </div> <!--toolbar-->
- <div id="web-canevas">
- <iframe id="web-browser" name="web-browser" src="" onload="hideLoading()"></iframe>
- </div>
- </body>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
+ <title>Wikipedia</title>
+
+ <link rel="stylesheet" type="text/css" href="css/master.css"/>
+ <link rel="stylesheet" type="text/css" href="css/superfish.css"/>
+
+ <!-- jQuery -->
+ <script type="text/javascript" src="script/jquery.min.js"></script>
+ <script type="text/javascript" src="script/superfish.js"></script>
+ <script type="text/javascript" src="script/languages.js"></script>
+
+ <script type="text/javascript">
+
+ var popupFlag = false;
+ var browsing = false;
+ var mode = 'wiki';
+ var lang = 'en';
+ var internalChange = false;
+ var syslang = "en";
+
+ if(window.sankore){
+ try{
+ syslang = sankore.locale().substr(0,2);
+ sankoreLang[syslang].search;
+ } catch(e){
+ syslang = "en";
+ }
+ } else
+ syslang = "en";
+
+ var toolbar = {
+ state:"",
+ loading:false
+ };
+ var appHistory = {
+ list:[],
+ back:function(){
+ if(typeof(appHistory.list[appHistory.index-1]) !== "undefined"){
+ appHistory.index--;
+ wikiReq(appHistory.list[appHistory.index]);
+ }
+ },
+ forward:function(){
+ if(typeof(appHistory.list[appHistory.index+1]) !== "undefined"){
+ appHistory.index++;
+ wikiReq(appHistory.list[appHistory.index]);
+ }
+ },
+ index:-1
+ }
+
+ $(document).ready(function() {
+
+ var ubHistoryList = "";
+ var ubHistoryIndex = "";
+
+ $("#toolbar-down").html(sankoreLang[syslang].wikipedia);
+
+ var popupText = $("<div id='popupWordInfo' class='popupWordInfo'></div>").appendTo("body");
+
+ lang = navigator.userAgent.split(";");
+
+ lang = (navigator.language || navigator.systemLanguage ||
+ navigator.userLanguage || 'en').substr(0, 2).toLowerCase();
+ $("#current-language").text(lang.charAt(0).toUpperCase() + lang.substr(1));
+
+ if(window.sankore){
+ toolbar.state = loadPref("historyState", "begin");
+ ubHistoryList = loadPref("historyList", "");
+ ubHistoryIndex = loadPref("historyIndex", "-1");
+ //window.resizeTo(350, 450);
+ }
+
+ if(ubHistoryList !== "") {
+ appHistory.list = ubHistoryList.split(",");
+ appHistory.index = parseInt(ubHistoryIndex);
+ wikiReq(appHistory.list[appHistory.index]);
+ } else {
+ wikiReq("");
+ }
+
+ $(window).resize();
+
+ $("#languages-dropdown>li>ul>li").each(function(){
+ $(this).click(function(){
+ languagesHandler($(this).text());
+ $("#current-language").text(lang.charAt(0).toUpperCase() + lang.substr(1));
+ });
+ });
+
+ $("#languages-dropdown").superfish({
+ dropShadows:false,
+ speed:1,
+ delay:100
+ });
+
+ $("#url")
+ .change(function(){
+ if(!toolbar.loading){
+ browsing = false;
+ wikiReq($("#url").val());
+ }
+ })
+ .keypress(function (e){
+ if(e.which == 13){
+ $("#url").change();
+ };
+ });
+
+ $("#url").val(appHistory.list[appHistory.index]);
+
+ if($("#url").val().length > 0)
+ $("#url").change();
+
+ $("#toolbar-button-search").click(function(){
+ $("#url").trigger("change");
+ });
+
+ $("#toolbar-button-search").mouseover(function(evt){
+ popupFlag = true;
+ popupText.text(sankoreLang[syslang].search)
+ .css("top", evt.pageY + 5)
+ .css("left", evt.pageX + 13)
+ .css({width:"70px"})
+ .show("fast", function(){
+ if(!popupFlag)
+ popupText.hide();
+ });
+ });
+
+ $("#toolbar-button-search, #toolbar-button-back, #toolbar-button-forward").mousemove(function(evt){
+ popupText.css("top", evt.pageY + 5)
+ .css("left", evt.pageX + 13);
+ });
+
+ $("#toolbar-button-search, #toolbar-button-back, #toolbar-button-forward").mouseout(function(evt){
+ popupFlag = false;
+ popupText.hide();
+ });
+
+ $("#toolbar-button-back").click(function(){
+ browsing = true;
+ appHistory.back();
+ });
+
+ $("#toolbar-button-back").mouseover(function(evt){
+ popupFlag = true;
+ popupText.text(sankoreLang[syslang].prev_word)
+ .css("top", evt.pageY + 5)
+ .css("left", evt.pageX + 13)
+ .css({width:"100px"})
+ .show("fast", function(){
+ if(!popupFlag)
+ popupText.hide();
+ });
+ });
+
+ $("#toolbar-button-forward").click(function(){
+ browsing = true;
+ appHistory.forward();
+ });
+
+ $("#toolbar-button-forward").mouseover(function(evt){
+ popupFlag = true;
+ popupText.text(sankoreLang[syslang].next_word)
+ .css("top", evt.pageY + 5)
+ .css("left", evt.pageX + 13)
+ .css({width:"70px"})
+ .show("fast", function(){
+ if(!popupFlag)
+ popupText.hide();
+ });
+ });
+
+ $("#toolbar-button-home").click(function(){
+ });
+ });
+
+ $(window).resize(function(){
+
+ if($(window).width() > 755){
+ $("#web-browser").height($(window).height() - $("#toolbar").height() - 2);
+ $("#web-browser").width($(window).width() - 2);
+ } else
+ $("#web-browser").height($(window).height() - $("#toolbar").height() - 2);
+
+
+ });
+
+ function wikiReq(kword){
+
+ var textBoxInput = "";
+
+ textBoxInput = remacc(kword.replace(/ /g,'_'));
+
+ textBoxInput = textBoxInput.replace(textBoxInput.charAt(0),textBoxInput.charAt(0).toLowerCase());
+ if(toolbar.state == "begin"){
+ $('#web-browser').attr('src',"");
+ toolbar.state = "started";
+ }
+ else
+ $('#web-browser').attr('src',"http://" + lang + ".wiktionary.org/wiki/" + textBoxInput);
+ $('#url').val(kword);
+ $('#toolbar-button-search').css("background-image", "url(images/toolbarLoading.jpg)");
+ toolbar.loading = true;
+ }
+
+ function hideLoading(){
+ $('#toolbar-button-search').css("background-image", "url(images/toolbarButtonSearch.png)");
+ toolbar.loading = false;
+
+ // History
+ if(appHistory.list[appHistory.index] !== $("#url").val() && !browsing && $("#url").val().length > 0){
+ appHistory.list = appHistory.list.slice(0, appHistory.index+1);
+ appHistory.list[appHistory.index+1] = $("#url").val();
+ appHistory.index = appHistory.list.length-1;
+ }
+
+ if(window.sankore && $("#web-browser").attr("src") !== ""){
+ savePref("historyState", "started");
+ savePref("historyList", appHistory.list.toString());
+ savePref("historyIndex", appHistory.index)
+ }
+ }
+
+ String.prototype.accnt = function(){
+ var cnt = 0;
+ var acnt = this;
+ acnt = acnt.split('');
+ var sec = 'ÃÃÃÃÃÃ
à áâãäåÃÃÃÃÃÃÃòóôõöøÃÃÃÃèéêëðÃçÃÃÃÃÃìÃîïÃÃÃÃùúûüÃñŠšŸÿýŽž';
+ var rep = ['A','A','A','A','A','A','a','a','a','a','a','a','O','O','O','O','O','O','O','o','o','o','o','o','o','E','E','E','E','e','e','e','e','e','C','c','D','I','I','I','I','i','i','i','i','U','U','U','U','u','u','u','u','N','n','S','s','Y','y','y','Z','z'];
+ for (var y = 0; y < acnt.length; y++)
+ if (sec.indexOf(acnt[y]) != -1)
+ cnt++;
+ return cnt;
+ }
+
+ String.prototype.renlacc = function(){
+ var torem = this;
+ torem = torem.split('');
+ var toremout = new Array();
+ var sec = 'ÃÃÃÃÃÃ
à áâãäåÃÃÃÃÃÃÃòóôõöøÃÃÃÃèéêëðÃçÃÃÃÃÃìÃîïÃÃÃÃùúûüÃñŠšŸÿýŽž';
+ var rep = ['A','A','A','A','A','A','a','a','a','a','a','a','O','O','O','O','O','O','O','o','o','o','o','o','o','E','E','E','E','e','e','e','e','e','C','c','D','I','I','I','I','i','i','i','i','U','U','U','U','u','u','u','u','N','n','S','s','Y','y','y','Z','z'];
+ for (var y = 0; y < torem.length; y++){
+ if (sec.indexOf(torem[y]) != -1)
+ toremout[y] = rep[sec.indexOf(torem[y])];
+ else
+ toremout[y] = torem[y];
+ }
+ var toascout = toremout.join('');
+ document.title = toascout;
+ return toascout;
+ }
+
+ function remacc(kword){
+
+ var countarr = new Array();
+ var c = '';
+ var text=kword;
+ var textout = new Array();
+ text = text.replace(/\r/g,'');
+ text = text.split('\n');
+ var linecnt = text.length;
+ for (var x = 0; x < linecnt; x++){
+ countarr[x] = Math.abs(text[x].accnt());
+ textout[x] = text[x].renlacc();
+ }
+ textout = textout.join('\n');
+ return textout;
+ }
+
+ function loadPref(name, defaultValue){
+ var pref = defaultValue;
+
+ if (sankore.preference(name) !== "") {
+ pref = sankore.preference(name);
+ };
+
+ return pref;
+ };
+
+ function savePref(name, value){
+ sankore.setPreference(name, String(value));
+ };
+
+ function languagesHandler(language){
+ switch(language){
+ case "Deutsch":
+ lang = 'de'
+ break;
+ case "English":
+ lang = 'en'
+ break;
+ case "Español":
+ lang = 'es'
+ break;
+ case "Français":
+ lang = 'fr'
+ break;
+ case "Italiano":
+ lang = 'it'
+ break;
+ case "Nederlands":
+ lang = 'nl'
+ break;
+ case "Polski":
+ lang = 'pl'
+ break;
+ case "Português":
+ lang = 'pt'
+ break;
+ case "Ð ÑÑÑкий":
+ lang = 'ru'
+ break;
+ case "æ¥æ¬èª":
+ lang = 'ja'
+ break;
+ }
+ };
+
+ </script>
+ </head>
+ <body style="overflow:hidden; margin: 0px; width:100%; height:100%; position:absolute; background:#ffffff">
+
+ <div id="toolbar">
+
+ <div class="toolbar-body">
+
+ <div id="toolbar-down" class="toolbar">
+ Wiktionary
+ </div> <!--toolbar-down-->
+
+ </div> <!--toolbar-body-->
+
+ <div class="toolbar-body">
+
+ <div id="toolbar-up" class="toolbar">
+ <div id="left-field">
+ <div id="toolbar-button-back" class="button" alt="back button"></div>
+ <div id="toolbar-button-forward" class="button" alt="forward button"></div>
+ </div>
+ <div id="center-field" class="full">
+ <input type="text" id="url" alt="url"/>
+ <div class="on-the-right">
+ <div id="toolbar-button-search"></div>
+ </div>
+ </div> <!--center-field-->
+ <div id="right-field">
+ <div id="toolbar-button-languages" class="button" alt="languages button">
+ <ul id='languages-dropdown' class='sf-menu'>
+ <li class='current'><a id='current-language' class='selected' href='#a'></a>
+ <ul>
+ <li><a class="sf-sl-first" href="#">Deutsch</a></li>
+ <li><a>English</a></li>
+ <li><a>Español</a></li>
+ <li><a>Français</a></li>
+ <li><a>Italiano</a></li>
+ <li><a>Nederlands</a></li>
+ <li><a>Polski</a></li>
+ <li><a>Português</a></li>
+ <li><a>Ð ÑÑÑкий</a></li>
+ <li><a class="sf-sl-last">æ¥æ¬èª</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div> <!--toolbar-up-->
+
+ </div> <!--toolbar-body-->
+
+ </div> <!--toolbar-->
+ <div id="web-canevas">
+ <iframe id="web-browser" name="web-browser" src="" onload="hideLoading()"></iframe>
+ </div>
+ </body>
</html>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/config.xml
index b30123b..61630a8 100644
--- a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/config.xml
@@ -1,16 +1,18 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets"
- xmlns:ub="http://uniboard.mnemis.com/widgets"
- id="http://uniboard.mnemis.com/widgets/notes"
- version="1.2"
- width="950"
- height="600"
- ub:resizable="true">
-
- <name>Notes</name>
- <author href="http://www.getuniboard.com"
- email="info at mnemis.com">Mnemis SA</author>
- <description>Associer images</description>
-
- <content src="index.html"/>
-</widget>
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets"
+ xmlns:ub="http://uniboard.mnemis.com/widgets"
+ id="http://uniboard.mnemis.com/widgets/notes"
+ version="1.2"
+ width="950"
+ height="560"
+ minimum_height="300"
+ minimum_width="670"
+ ub:resizable="false">
+
+ <name>Notes</name>
+ <author href="http://www.getuniboard.com"
+ email="info at mnemis.com">Mnemis SA</author>
+ <description>Associer images</description>
+
+ <content src="index.html"/>
+</widget>
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/index.html
index db2fbf1..f63843f 100644
--- a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/index.html
@@ -3,89 +3,30 @@
<head>
<title>D'n'd</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- start();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- start();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url:'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
- //here you can put your code
- if(window.sankore)
- sankore.enableDropOnWidget();
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="data">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
-
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
+
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/js/script.js b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/js/script.js
deleted file mode 100644
index 7582caf..0000000
--- a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/js/script.js
+++ /dev/null
@@ -1,816 +0,0 @@
-var sankoreLang = {
- display: "Display",
- edit: "Edit",
- short_desc: "Select the number \"three\".",
- add: "Add new block",
- enter: "Enter your instruction here ...",
- wgt_name: "Associate images",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p> <h2>Associate images</h2> </p>" +
-"<p> <h3>Choose the correct picture</h3> </p>" +
-"<p> Drag and drop the image in the correct area. If the result is incorrect, the area turns in red. If the result is correct, the area turns in green. </p> "+
-"<p> Reload âbuttonâ resets the exercises. </p>" +
-"<p> Enter the âEditâ mode to :</p>" +
-"<ul> <li> choose the theme of the App : pad, slate, or none (by default : none), </li>" +
-"<li> modify an exercise or to create a new one.</li> </ul>" +
-
-"<p>To create a new exercise : </p>" +
-"<ul> <li> click on âNew blockâ,</li>" +
-"<li> insert an instruction clicking on the text field âEnter your instruction here ... â,</li>" +
-"<li> add picture frames clicking on the â+â,</li>" +
-"<li> drag an drop pictures from your library,</li>" +
-"<li> set the correct image of your activity clicking on the submit button âvâ on the frame. </li> </ul>" +
-"<p> To delete a frame, click on the cross button on the frame.</p>" +
-"<p> To replace a picture, click on the reload icon on the frame. </p>" +
-
-"<p> To delete a whole exercise, click on the cross on the left.</p>" +
-
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-//main function
-function start(){
-
- $("#wgt_display").text(sankoreLang.display);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_name").text(sankoreLang.wgt_name);
- $("#wgt_reload").text(sankoreLang.reload);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- if(window.sankore){
- if(sankore.preference("associer","")){
- var data = jQuery.parseJSON(sankore.preference("associer",""));
- importData(data);
- } else {
- showExample();
- }
- }
- else
- showExample();
- //events
- if (window.widget) {
- window.widget.onleave = function(){
- exportData();
- }
- }
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").slideUp("100", function(){
- tmp.removeClass("open");
- $("#data").show();
- });
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- $("#data").hide();
- $("#help").slideDown("100", function(){
- tmp.addClass("open");
- });
- }
- });
-
- $("#wgt_reload").click(function(){
- if($("#wgt_display").hasClass("selected")){
- $("#wgt_edit").trigger("click");
- $("#wgt_display").trigger("click");
- } else {
- $("#wgt_display").trigger("click");
- }
- });
-
- $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
- exportData();
- });
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display", "none");
- $(".add_block").remove();
- $(".cont").each(function(){
- var container = $(this);
- var tmp_i = 0;
- var tmp_array = [];
-
- container.find(".text_cont").removeAttr("contenteditable");
- container.find(".add_img").remove();
- container.find(".close_cont").remove();
- container.find(".img_block").each(function(){
- if($(this).find("img").attr("src") != "img/drop_img.png"){
- $(this).find(".close_img").remove();
- $(this).find(".clear_img").remove();
- $(this).find(".true_img").remove();
- $(this).find(".false_img").remove();
- $(this).removeAttr("ondragenter")
- .removeAttr("ondragleave")
- .removeAttr("ondragover")
- .removeAttr("ondrop")
- .addClass("img_gray");
- } else
- $(this).remove();
- });
- var img_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").insertAfter(container.find(".sub_cont"));
- container.find(".img_block").each(function(){
- $(this).css("float","");
- tmp_array.push($(this));
- });
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++){
- tmp_array[i].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[i].appendTo(container.find(".imgs_cont"));
- }
-
- img_answers.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if($(this).children()[0].tagName == "IMG")
- $(this).children().remove();
- else
- $(ui.draggable).parent().append($(this).children());
- $(this).append($(ui.draggable));
- if($(this).children().length == 1){
- if($(this).children().find("input").val() == "1")
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- });
-
- container.find(".imgs_cont").droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_cont = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
- var answers = "";
- $(this).parent().find(".imgs_answers .img_block").each(function(){
- answers += $(this).find("input").val();
- });
- if(tmp_cont.children()[0].tagName == "IMG")
- tmp_cont.removeClass("imgs_answers_green")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_gray");
- else
- if(tmp_cont.children().length == 1){
- if(tmp_cont.children().find("input").val() == "1")
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- }
- });
- });
-
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- }
- } else {
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(true);
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display", "block");
- $(".cont").each(function(){
- var container = $(this);
- container.find(".imgs_answers").find(".img_block").each(function(){
- $(this).appendTo(container.find(".imgs_cont"))
- });
- container.find(".imgs_answers").remove();
- $("<div class='close_cont'>").appendTo(container);
- container.find(".text_cont").attr("contenteditable","true");
-
- var add_img = $("<div class='add_img'>");
- container.find(".img_block").each(function(){
- $(this).draggable("destroy");
- $(this).attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);")
- .css("float","left");
- $("<div class='close_img'>").appendTo($(this));
- $("<div class='clear_img'>").appendTo($(this));
- if($(this).find("input").val() == "1"){
- $("<div class='false_img'>").appendTo($(this));
- }
- else{
- $("<div class='true_img'>").appendTo($(this));
- }
- });
- container.find(".imgs_cont").append(add_img)
- });
-
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- }
- }
- });
-
- //add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
-
- //adding new img
- $(".add_img").live("click", function(){
- addImgBlock($(this));
- });
-
- //deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
-
- //deleting the img block
- $(".close_img").live("click", function(){
- var i = 0;
- var tmp_obj = $(this).parent().parent();
- $(this).parent().remove();
- });
-
- //cleaning an image
- $(".clear_img").live("click",function(){
- $(this).parent().find("img").attr("src","img/drop_img.png");
- });
-
- //correct image
- $(".true_img").live("click",function(){
- $(this).parent().parent().find(".img_block").each(function(){
- $(this).find("input").val(0);
- var tmp_div = $(this).find(".false_img");
- if(tmp_div)
- tmp_div.removeClass("false_img").addClass("true_img");
- })
- $(this).parent().find("input").val(1);
- $(this).removeClass("true_img").addClass("false_img");
- });
-
- //wrong image
- $(".false_img").live("click",function(){
- $(this).parent().find("input").val(0);
- $(this).removeClass("false_img").addClass("true_img");
- });
-}
-
-//export
-function exportData(){
- var array_to_export = [];
- if($("#wgt_edit").hasClass("selected")){
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- cont_obj.text = $(this).find(".text_cont").text();
- cont_obj.mode = "edit";
- cont_obj.imgs = [];
- $(this).find(".img_block").each(function(){
- var img_obj = new Object();
- img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src");
- img_obj.ht = $(this).find("img").height();
- img_obj.wd = $(this).find("img").width();
- cont_obj.imgs.push(img_obj);
- });
- array_to_export.push(cont_obj);
- });
- } else {
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- cont_obj.text = $(this).find(".text_cont").text();
- cont_obj.mode = "display";
- cont_obj.imgs = [];
- if($(this).find(".imgs_answers").children()[0].tagName == "DIV"){
- var tmp_cont = $(this).find(".imgs_answers").find(".img_block");
- var img_obj = new Object();
- img_obj.value = tmp_cont.find("input").val();
- img_obj.link = tmp_cont.find("img").attr("src");
- img_obj.ht = tmp_cont.find("img").height();
- img_obj.wd = tmp_cont.find("img").width();
- img_obj.cont = "answers";
- cont_obj.imgs.push(img_obj);
- }
- $(this).find(".imgs_cont .img_block").each(function(){
- var img_obj = new Object();
- img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src");
- img_obj.ht = $(this).find("img").height();
- img_obj.wd = $(this).find("img").width();
- img_obj.cont = "cont";
- cont_obj.imgs.push(img_obj);
- });
- array_to_export.push(cont_obj);
- });
- }
-
- if($(".cont").size() == 0){
- var cont_obj = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- cont_obj.tmp = "clear";
- array_to_export.push(cont_obj);
- }
-
- if(window.sankore)
- sankore.setPreference("associer", JSON.stringify(array_to_export));
-}
-
-//import
-function importData(data){
- var tmp = 0;
- for(var i in data){
- if(data[i].tmp){
- changeStyle(data[i].style);
- $("#style_select").val(data[i].style);
- } else {
- if(i == 0){
- changeStyle(data[i].style);
- $("#style_select").val(data[i].style);
- }
- if(data[i].mode == "edit"){
- var tmp_array = [];
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
-
- for(var j in data[i].imgs){
- var img_block = $("<div class='img_block img_gray' style='text-align: center;'>");
- var img = $("<img src='" + data[i].imgs[j].link + "' style='display: inline;'>");
-
- img.height(data[i].imgs[j].ht);
-
- if((120 - data[i].imgs[j].ht) > 0)
- img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
-
-
- var hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
- img_block.append(hidden_input).append(img);
- tmp_array.push(img_block);
-
- }
- tmp_array = shuffle(tmp_array);
- for(j in tmp_array){
- tmp_array[j].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[j].appendTo(imgs_container);
- }
- imgs_answers.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if($(this).children()[0].tagName == "IMG")
- $(this).children().remove();
- else
- $(ui.draggable).parent().append($(this).children());
- $(this).append($(ui.draggable));
- if($(this).children().length == 1){
- if($(this).children().find("input").val() == "1")
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- });
- imgs_container.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_cont = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
- var answers = "";
- $(this).parent().find(".imgs_answers .img_block").each(function(){
- answers += $(this).find("input").val();
- });
- if(tmp_cont.children()[0].tagName == "IMG")
- tmp_cont.removeClass("imgs_answers_green")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_gray");
- else
- if(tmp_cont.children().length == 1){
- if(tmp_cont.children().find("input").val() == "1")
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- }
- });
- container.appendTo("#data");
- } else {
- container = $("<div class='cont'>");
- sub_container = $("<div class='sub_cont'>").appendTo(container);
- imgs_answers = $("<div class='imgs_answers'></div>").appendTo(container);
- $("<img src='img/drop_img.png' style='margin-top: 11px;'/>").appendTo(imgs_answers);
- imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
- text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
-
- for(j in data[i].imgs){
- img_block = $("<div class='img_block img_gray' style='text-align: center;'>");
- img = $("<img src='" + data[i].imgs[j].link + "' style='display: inline;'>");
- img.height(data[i].imgs[j].ht);
- if((120 - data[i].imgs[j].ht) > 0)
- img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
- hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
- img_block.append(hidden_input).append(img);
- img_block.draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- if(data[i].imgs[j].cont == "cont")
- img_block.appendTo(imgs_container);
- else{
- imgs_answers.empty();
- img_block.appendTo(imgs_answers);
- if(data[i].imgs[j].value == "1")
- imgs_answers.addClass("imgs_answers_green");
- else
- imgs_answers.addClass("imgs_answers_red");
- }
- }
-
- imgs_answers.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if($(this).children()[0].tagName == "IMG")
- $(this).children().remove();
- else
- $(ui.draggable).parent().append($(this).children());
- $(this).append($(ui.draggable));
- if($(this).children().length == 1){
- if($(this).children().find("input").val() == "1")
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- });
- imgs_container.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_cont = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
- var answers = "";
- $(this).parent().find(".imgs_answers .img_block").each(function(){
- answers += $(this).find("input").val();
- });
- if(tmp_cont.children()[0].tagName == "IMG")
- tmp_cont.removeClass("imgs_answers_green")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_gray");
- else
- if(tmp_cont.children().length == 1){
- if(tmp_cont.children().find("input").val() == "1")
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- }
- });
- container.appendTo("#data");
- }
- }
- }
-}
-
-//example
-function showExample(){
-
- changeStyle("3");
- var tmp_array = [];
-
- var container = $("<div class='cont'>").appendTo("#data");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
-
- $("<input type='hidden' value='1'/>").appendTo(imgs_container);
-
- var img1 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='0'/>").appendTo(img1);
- $("<img src=\"objects/0.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img1);
- var img2 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='0'/>").appendTo(img2);
- $("<img src=\"objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
- var img3 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='0'/>").appendTo(img3);
- $("<img src=\"objects/2.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img3);
- var img4 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='1'/>").appendTo(img4);
- $("<img src=\"objects/3.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img4);
- var img5 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='0'/>").appendTo(img5);
- $("<img src=\"objects/4.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img5);
-
- tmp_array.push(img1, img2, img3, img4, img5);
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++){
- tmp_array[i].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[i].appendTo(imgs_container);
- }
- imgs_answers.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if($(this).children()[0].tagName == "IMG")
- $(this).children().remove();
- else
- $(ui.draggable).parent().append($(this).children());
- $(this).append($(ui.draggable));
- if($(this).children().length == 1){
- if($(this).children().find("input").val() == "1")
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- });
- imgs_container.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_cont = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
- var answers = "";
- $(this).parent().find(".imgs_answers .img_block").each(function(){
- answers += $(this).find("input").val();
- });
- if(tmp_cont.children()[0].tagName == "IMG")
- tmp_cont.removeClass("imgs_answers_green")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_gray");
- else
- if(tmp_cont.children().length == 1){
- if(tmp_cont.children().find("input").val() == "1")
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- }
- });
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
-
-
-//check result
-function checkResult(event)
-{
- var str = "";
- var right_str = $(event.target).find("input").val();
- $(event.target).find(".img_block").each(function(){
- str += $(this).find("input").val() + "*";
- });
- if(str == right_str)
- $(event.target).css("background-color","#9f9");
-}
-
-//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
-
- $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
- var add_img = $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
-
-//add new img block
-function addImgBlock(dest){
- var img_block = $("<div class='img_block img_gray' ondragenter='return false;' ondragleave='$(this).css(\"background-color\",\"\"); return false;' ondragover='$(this).css(\"background-color\",\"#ccc\"); return false;' ondrop='$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);' style='text-align: center; float: left;'></div>").insertBefore(dest);
- $("<div class='close_img'>").appendTo(img_block);
- $("<div class='clear_img'>").appendTo(img_block);
- $("<div class='true_img'>").appendTo(img_block);
- $("<input type='hidden' value='0'/>").appendTo(img_block);
- $("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
-}
-
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
-
-//shuffles an array
-function shuffle( arr )
-{
- var pos, tmp;
-
- for( var i = 0; i < arr.length; i++ )
- {
- pos = Math.round( Math.random() * ( arr.length - 1 ) );
- tmp = arr[pos];
- arr[pos] = arr[i];
- arr[i] = tmp;
- }
- return arr;
-}
-
-
-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;
-}
-
-function onDropTarget(obj, event) {
- $(obj).find("img").remove();
- if (event.dataTransfer) {
- var format = "text/plain";
- var textData = event.dataTransfer.getData(format);
- if (!textData) {
- alert(":(");
- }
- textData = stringToXML(textData);
- var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var tmp_img = $("<img/>").attr("src", tmp);
- $(obj).append(tmp_img);
- setTimeout(function(){
- if(tmp_img.height() >= tmp_img.width())
- tmp_img.attr("height", "120");
- else{
- tmp_img.attr("width","120");
- var h = tmp_img.height();
- tmp_img.attr("height",h);
- tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
- }
- }, 6)
-
- }
- else {
- alert ("Your browser does not support the dataTransfer object.");
- }
-
- if (event.stopPropagation) {
- event.stopPropagation ();
- }
- else {
- event.cancelBubble = true;
- }
- return false;
-}
-
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/img/drop_img.png b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/img/drop_img.png
similarity index 100%
rename from Sankore-3.1/resources/library/interactivities/Ass images.wgt/img/drop_img.png
rename to Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/img/drop_img.png
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/index.html
new file mode 100644
index 0000000..80dad5f
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>D'n'd</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../js/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="../../js/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="js/script.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ start();
+ });
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="data">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/js/script.js b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/js/script.js
new file mode 100644
index 0000000..210ec7e
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/en/js/script.js
@@ -0,0 +1,806 @@
+var sankoreLang = {
+ display: "Display",
+ edit: "Edit",
+ short_desc: "Select the number \"three\".",
+ add: "Add new block",
+ enter: "Enter your instruction here ...",
+ wgt_name: "Associate images",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p> <h2>Associate images</h2> </p>" +
+"<p> <h3>Choose the correct picture</h3> </p>" +
+"<p> Drag and drop the image in the correct area. If the result is incorrect, the area turns in red. If the result is correct, the area turns in green. </p> "+
+"<p> Reload âbuttonâ resets the exercises. </p>" +
+"<p> Enter the âEditâ mode to :</p>" +
+"<ul> <li> choose the theme of the App : pad, slate, or none (by default : none), </li>" +
+"<li> modify the exercise.</li> </ul>" +
+
+"<p>In edition mode : </p>" +
+"<ul><li>click on the text field to change the instruction,</li>" +
+"<li>add picture frames clicking on the â+â,</li>" +
+"<li>drag an drop pictures from your library,</li>" +
+"<li>set the correct image of your activity clicking on the submit button âvâ on the frame,</li>" +
+"<li>delete a frame clicking on the cross button on the frame,</li>" +
+"<li>replace a picture clicking on the reload icon on the frame,</li>" +
+"<li>âDisplayâ button comes back to the activity.</li></ul>",
+ theme: "Theme"
+};
+
+//main function
+function start(){
+
+ $("#wgt_display").text(sankoreLang.display);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_name").text(sankoreLang.wgt_name);
+ $("#wgt_reload").text(sankoreLang.reload);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ if(window.sankore){
+ if(sankore.preference("associer","")){
+ var data = jQuery.parseJSON(sankore.preference("associer",""));
+ importData(data);
+ } else {
+ showExample();
+ }
+ }
+ else
+ showExample();
+ //events
+ if (window.widget) {
+ window.widget.onleave = function(){
+ exportData();
+ }
+ }
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").slideUp("100", function(){
+ tmp.removeClass("open");
+ $("#data").show();
+ });
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ $("#data").hide();
+ $("#help").slideDown("100", function(){
+ tmp.addClass("open");
+ });
+ }
+ });
+
+ $("#wgt_reload").click(function(){
+ if($("#wgt_display").hasClass("selected")){
+ $("#wgt_edit").trigger("click");
+ $("#wgt_display").trigger("click");
+ } else {
+ $("#wgt_display").trigger("click");
+ }
+ });
+
+ $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
+ exportData();
+ });
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display", "none");
+// $(".add_block").remove();
+ $(".cont").each(function(){
+ var container = $(this);
+ var tmp_i = 0;
+ var tmp_array = [];
+
+ container.find(".text_cont").removeAttr("contenteditable");
+ container.find(".add_img").remove();
+// container.find(".close_cont").remove();
+ container.find(".img_block").each(function(){
+ if($(this).find("img").attr("src") != "img/drop_img.png"){
+ $(this).find(".close_img").remove();
+ $(this).find(".clear_img").remove();
+ $(this).find(".true_img").remove();
+ $(this).find(".false_img").remove();
+ $(this).removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop")
+ .addClass("img_gray");
+ } else
+ $(this).remove();
+ });
+ var img_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").insertAfter(container.find(".sub_cont"));
+ container.find(".img_block").each(function(){
+ $(this).css("float","");
+ tmp_array.push($(this));
+ });
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++){
+ tmp_array[i].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[i].appendTo(container.find(".imgs_cont"));
+ }
+
+ img_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+
+ container.find(".imgs_cont").droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+ });
+
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display", "block");
+ $(".cont").each(function(){
+ var container = $(this);
+ container.find(".imgs_answers").find(".img_block").each(function(){
+ $(this).appendTo(container.find(".imgs_cont"))
+ });
+ container.find(".imgs_answers").remove();
+// $("<div class='close_cont'>").appendTo(container);
+ container.find(".text_cont").attr("contenteditable","true");
+
+ var add_img = $("<div class='add_img'>");
+ container.find(".img_block").each(function(){
+ $(this).draggable("destroy");
+ $(this).attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
+ .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
+ .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);")
+ .css("float","left");
+ $("<div class='close_img'>").appendTo($(this));
+ $("<div class='clear_img'>").appendTo($(this));
+ if($(this).find("input").val() == "1"){
+ $("<div class='false_img'>").appendTo($(this));
+ }
+ else{
+ $("<div class='true_img'>").appendTo($(this));
+ }
+ });
+ container.find(".imgs_cont").append(add_img)
+ });
+
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ }
+ }
+ });
+
+ //add new block
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
+
+ //adding new img
+ $(".add_img").live("click", function(){
+ addImgBlock($(this));
+ });
+
+ //deleting a block
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
+
+ //deleting the img block
+ $(".close_img").live("click", function(){
+ var i = 0;
+ var tmp_obj = $(this).parent().parent();
+ $(this).parent().remove();
+ });
+
+ //cleaning an image
+ $(".clear_img").live("click",function(){
+ $(this).parent().find("img").attr("src","img/drop_img.png");
+ });
+
+ //correct image
+ $(".true_img").live("click",function(){
+ $(this).parent().parent().find(".img_block").each(function(){
+ $(this).find("input").val(0);
+ var tmp_div = $(this).find(".false_img");
+ if(tmp_div)
+ tmp_div.removeClass("false_img").addClass("true_img");
+ })
+ $(this).parent().find("input").val(1);
+ $(this).removeClass("true_img").addClass("false_img");
+ });
+
+ //wrong image
+ $(".false_img").live("click",function(){
+ $(this).parent().find("input").val(0);
+ $(this).removeClass("false_img").addClass("true_img");
+ });
+}
+
+//export
+function exportData(){
+ var array_to_export = [];
+ if($("#wgt_edit").hasClass("selected")){
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ cont_obj.text = $(this).find(".text_cont").text();
+ cont_obj.mode = "edit";
+ cont_obj.imgs = [];
+ $(this).find(".img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.ht = $(this).find("img").height();
+ img_obj.wd = $(this).find("img").width();
+ cont_obj.imgs.push(img_obj);
+ });
+ array_to_export.push(cont_obj);
+ });
+ } else {
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ cont_obj.text = $(this).find(".text_cont").text();
+ cont_obj.mode = "display";
+ cont_obj.imgs = [];
+ if($(this).find(".imgs_answers").children()[0].tagName == "DIV"){
+ var tmp_cont = $(this).find(".imgs_answers").find(".img_block");
+ var img_obj = new Object();
+ img_obj.value = tmp_cont.find("input").val();
+ img_obj.link = tmp_cont.find("img").attr("src").replace("../../","");
+ img_obj.ht = tmp_cont.find("img").height();
+ img_obj.wd = tmp_cont.find("img").width();
+ img_obj.cont = "answers";
+ cont_obj.imgs.push(img_obj);
+ }
+ $(this).find(".imgs_cont .img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.ht = $(this).find("img").height();
+ img_obj.wd = $(this).find("img").width();
+ img_obj.cont = "cont";
+ cont_obj.imgs.push(img_obj);
+ });
+ array_to_export.push(cont_obj);
+ });
+ }
+
+ if($(".cont").size() == 0){
+ var cont_obj = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ cont_obj.tmp = "clear";
+ array_to_export.push(cont_obj);
+ }
+
+ if(window.sankore)
+ sankore.setPreference("associer", JSON.stringify(array_to_export));
+}
+
+//import
+function importData(data){
+ for(var i in data){
+ if(data[i].tmp){
+ changeStyle(data[i].style);
+ $("#style_select").val(data[i].style);
+ } else {
+ if(i == 0){
+ changeStyle(data[i].style);
+ $("#style_select").val(data[i].style);
+ }
+ if(data[i].mode == "edit"){
+ var tmp_array = [];
+ var container = $("<div class='cont'>");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
+ var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+
+// var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+ var text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
+
+ for(var j in data[i].imgs){
+ var img_block = $("<div class='img_block img_gray' style='text-align: center;'>");
+ var img = $("<img src='../../" + data[i].imgs[j].link + "' style='display: inline;'>");
+ img.height(data[i].imgs[j].ht);
+ if((120 - data[i].imgs[j].ht) > 0)
+ img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
+ var hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
+ img_block.append(hidden_input).append(img);
+ tmp_array.push(img_block);
+ }
+ tmp_array = shuffle(tmp_array);
+ for(j in tmp_array){
+ tmp_array[j].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[j].appendTo(imgs_container);
+ }
+ imgs_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+ imgs_container.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+ container.appendTo("#data");
+ } else {
+ container = $("<div class='cont'>");
+ sub_container = $("<div class='sub_cont'>").appendTo(container);
+ imgs_answers = $("<div class='imgs_answers'></div>").appendTo(container);
+ $("<img src='img/drop_img.png' style='margin-top: 11px;'/>").appendTo(imgs_answers);
+ imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+
+// number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+ text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
+
+ for(j in data[i].imgs){
+ img_block = $("<div class='img_block img_gray' style='text-align: center;'>");
+ img = $("<img src='../../" + data[i].imgs[j].link + "' style='display: inline;'>");
+ img.height(data[i].imgs[j].ht);
+ if((120 - data[i].imgs[j].ht) > 0)
+ img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
+ hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
+ img_block.append(hidden_input).append(img);
+ img_block.draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ if(data[i].imgs[j].cont == "cont")
+ img_block.appendTo(imgs_container);
+ else{
+ imgs_answers.empty();
+ img_block.appendTo(imgs_answers);
+ if(data[i].imgs[j].value == "1")
+ imgs_answers.addClass("imgs_answers_green");
+ else
+ imgs_answers.addClass("imgs_answers_red");
+ }
+ }
+
+ imgs_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+ imgs_container.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+ container.appendTo("#data");
+ }
+ }
+ }
+}
+
+//example
+function showExample(){
+
+ changeStyle("3");
+ var tmp_array = [];
+
+ var container = $("<div class='cont'>").appendTo("#data");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
+ var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+ var text = $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
+
+ $("<input type='hidden' value='1'/>").appendTo(imgs_container);
+
+ var img1 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='0'/>").appendTo(img1);
+ $("<img src=\"../../objects/0.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img1);
+ var img2 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='0'/>").appendTo(img2);
+ $("<img src=\"../../objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
+ var img3 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='0'/>").appendTo(img3);
+ $("<img src=\"../../objects/2.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img3);
+ var img4 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='1'/>").appendTo(img4);
+ $("<img src=\"../../objects/3.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img4);
+ var img5 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='0'/>").appendTo(img5);
+ $("<img src=\"../../objects/4.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img5);
+
+ tmp_array.push(img1, img2, img3, img4, img5);
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++){
+ tmp_array[i].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[i].appendTo(imgs_container);
+ }
+ imgs_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+ imgs_container.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
+
+
+//check result
+function checkResult(event)
+{
+ var str = "";
+ var right_str = $(event.target).find("input").val();
+ $(event.target).find(".img_block").each(function(){
+ str += $(this).find("input").val() + "*";
+ });
+ if(str == right_str)
+ $(event.target).css("background-color","#9f9");
+}
+
+//add new container
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
+// var add_img = $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
+
+//add new img block
+function addImgBlock(dest){
+ var img_block = $("<div class='img_block img_gray' ondragenter='return false;' ondragleave='$(this).css(\"background-color\",\"\"); return false;' ondragover='$(this).css(\"background-color\",\"#ccc\"); return false;' ondrop='$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);' style='text-align: center; float: left;'></div>").insertBefore(dest);
+ $("<div class='close_img'>").appendTo(img_block);
+ $("<div class='clear_img'>").appendTo(img_block);
+ $("<div class='true_img'>").appendTo(img_block);
+ $("<input type='hidden' value='0'/>").appendTo(img_block);
+ $("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
+}
+
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
+
+//shuffles an array
+function shuffle( arr )
+{
+ var pos, tmp;
+
+ for( var i = 0; i < arr.length; i++ )
+ {
+ pos = Math.round( Math.random() * ( arr.length - 1 ) );
+ tmp = arr[pos];
+ arr[pos] = arr[i];
+ arr[i] = tmp;
+ }
+ return arr;
+}
+
+
+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;
+}
+
+function onDropTarget(obj, event) {
+ $(obj).find("img").remove();
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ var tmp_img = $("<img/>").attr("src", "../../" + tmp);
+ $(obj).append(tmp_img);
+ setTimeout(function(){
+ if(tmp_img.height() >= tmp_img.width())
+ tmp_img.attr("height", "120");
+ else{
+ tmp_img.attr("width","120");
+ var h = tmp_img.height();
+ tmp_img.attr("height",h);
+ tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
+ }
+ }, 6)
+
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
+
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js
index 3895c03..bd04b5e 100644
--- a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/fr/js/script.js
@@ -19,19 +19,16 @@ var sankoreLang = {
"<p>Le bouton âModifierâ vous permet :</p>"+
"<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun), </li>"+
- "<li>de modifier un exercice ou dâen créer de nouveaux dans la même activité.</li></ul>"+
+ "<li>de modifier l'exercice.</li></ul>"+
- "<p>En mode édition, pour créer un nouvel exercice, cliquez sur âNouveau blocâ en bas, puis</p>"+
- "<ul><li>insérez une consigne en cliquant sur le champ de texte âSaisir la consigne ici ...â, </li>"+
+ "<p>En mode édition :</p>"+
+ "<ul><li>changez la consigne en cliquant sur le champ de texte, </li>"+
"<li>ajoutez des zones image en cliquant sur le gros signe + en dessous, </li>"+
"<li>insérez des images dans ces zones par glisser-déposer des images à partir de votre bibliothèque, </li>"+
- "<li>définissez lâimage correcte de lâinteractivité en cliquant sur le bouton valider âvâ situé en bas à droite de lâimage concernée.</li></ul>"+
- "<p>Pour supprimer une zone image, cliquez sur la croix située dans le coin supérieur droit de lâimage.</p>"+
- "<p>Pour changer dâimage, cliquez sur lâicône située au milieu à droite de lâimage.</p>"+
-
- "<p>Pour supprimer un exercice, cliquez sur la croix à gauche du numéro de lâexercice.</p>"+
-
- "<p>Le bouton âAfficherâ vous permet dâutiliser lâactivité.</p>",
+ "<li>définissez lâimage correcte de lâinteractivité en cliquant sur le bouton valider âvâ situé en bas à droite de lâimage concernée,</li>"+
+ "<li>supprimez une zone image, en cliquant sur la croix située dans son coin supérieur droit,</li>"+
+ "<li>changez dâimage en cliquant sur lâicône située au milieu à droite de celle-ci,</li>"+
+ "<li>le bouton âAfficherâ vous permet dâutiliser lâactivité.</li></ul>",
theme: "Thème"
};
@@ -108,7 +105,7 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display", "none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
@@ -116,7 +113,7 @@ function start(){
container.find(".text_cont").removeAttr("contenteditable");
container.find(".add_img").remove();
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".img_block").each(function(){
if($(this).find("img").attr("src") != "img/drop_img.png"){
$(this).find(".close_img").remove();
@@ -218,7 +215,7 @@ function start(){
$(this).appendTo(container.find(".imgs_cont"))
});
container.find(".imgs_answers").remove();
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".text_cont").attr("contenteditable","true");
var add_img = $("<div class='add_img'>");
@@ -241,7 +238,7 @@ function start(){
container.find(".imgs_cont").append(add_img)
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -249,20 +246,20 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
-
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
+//
//adding new img
$(".add_img").live("click", function(){
addImgBlock($(this));
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -357,8 +354,7 @@ function exportData(){
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].tmp){
changeStyle(data[i].style);
@@ -375,7 +371,7 @@ function importData(data){
var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
for(var j in data[i].imgs){
@@ -458,7 +454,7 @@ function importData(data){
$("<img src='img/drop_img.png' style='margin-top: 11px;'/>").appendTo(imgs_answers);
imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
for(j in data[i].imgs){
@@ -556,7 +552,7 @@ function showExample(){
var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
$("<input type='hidden' value='1'/>").appendTo(imgs_container);
@@ -713,19 +709,19 @@ function checkResult(event)
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
-
- $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
- var add_img = $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
+// var add_img = $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
//add new img block
function addImgBlock(dest){
@@ -737,12 +733,12 @@ function addImgBlock(dest){
$("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/ru/js/script.js b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/ru/js/script.js
index 1ada2d4..7d0b955 100644
--- a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/ru/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Ass images.wgt/locales/ru/js/script.js
@@ -88,7 +88,7 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display", "none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
@@ -96,7 +96,7 @@ function start(){
container.find(".text_cont").removeAttr("contenteditable");
container.find(".add_img").remove();
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".img_block").each(function(){
if($(this).find("img").attr("src") != "img/drop_img.png"){
$(this).find(".close_img").remove();
@@ -198,7 +198,7 @@ function start(){
$(this).appendTo(container.find(".imgs_cont"))
});
container.find(".imgs_answers").remove();
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".text_cont").attr("contenteditable","true");
var add_img = $("<div class='add_img'>");
@@ -221,7 +221,7 @@ function start(){
container.find(".imgs_cont").append(add_img)
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -229,20 +229,20 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
-
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
+//
//adding new img
$(".add_img").live("click", function(){
addImgBlock($(this));
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -337,8 +337,7 @@ function exportData(){
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].tmp){
changeStyle(data[i].style);
@@ -355,7 +354,7 @@ function importData(data){
var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
for(var j in data[i].imgs){
@@ -438,7 +437,7 @@ function importData(data){
$("<img src='img/drop_img.png' style='margin-top: 11px;'/>").appendTo(imgs_answers);
imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
for(j in data[i].imgs){
@@ -536,7 +535,7 @@ function showExample(){
var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
$("<input type='hidden' value='1'/>").appendTo(imgs_container);
@@ -693,19 +692,19 @@ function checkResult(event)
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
-
- $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
- var add_img = $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
+// var add_img = $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
//add new img block
function addImgBlock(dest){
@@ -717,12 +716,12 @@ function addImgBlock(dest){
$("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
diff --git a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/config.xml
index b30123b..8dc1299 100644
--- a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/config.xml
@@ -1,16 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets"
- xmlns:ub="http://uniboard.mnemis.com/widgets"
- id="http://uniboard.mnemis.com/widgets/notes"
- version="1.2"
- width="950"
- height="600"
- ub:resizable="true">
-
- <name>Notes</name>
- <author href="http://www.getuniboard.com"
- email="info at mnemis.com">Mnemis SA</author>
- <description>Associer images</description>
-
- <content src="index.html"/>
-</widget>
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets"
+ xmlns:ub="http://uniboard.mnemis.com/widgets"
+ id="http://uniboard.mnemis.com/widgets/notes"
+ version="1.2"
+ width="950"
+ height="560"
+ minimum_height="300"
+ minimum_width="710"
+ ub:resizable="false">
+ <name>Notes</name>
+ <author href="http://www.getuniboard.com"
+ email="info at mnemis.com">Mnemis SA</author>
+ <description>Associer images</description>
+
+ <content src="index.html"/>
+</widget>
diff --git a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/css/basic.css b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/css/basic.css
index d6bfe05..2ac889d 100644
--- a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/css/basic.css
+++ b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/css/basic.css
@@ -1,471 +1,470 @@
-html, body{
- width: 100%;
- height: 100%;
- margin: 0;
- padding: 0;
- border-radius: 35px;
- overflow: hidden;
- font-family: sans-serif;
-}
-
-body{
- background-image: url(../img/bg.png);
-}
-
-.toggle_mode{
- width: 100%;
- height: 25px;
- border-bottom: 1px solid black;
- background-color: #ccc;
- position: fixed;
- top: 0;
- left: 0;
- z-index: 2;
-}
-
-#display_img, #edit_img{
- width: 15px;
- height: 15px;
- margin: 5px 10px;
-}
-
-#display_text, #edit_text{
- height: 19px;
- padding: 3px 0 0 0;
-}
-
-.selected{
-
-}
-
-#display:hover, #edit:hover{
- background-color: #999;
-}
-
-.cont{
- width: 100%;
- border-bottom: 1px solid black;
- margin: 0;
- padding: 0;
- position: relative;
-}
-
-.sub_cont{
- width: 100%;
- padding: 0;
- margin: 20px 0 0 0;
- min-height: 60px;
-}
-
-.imgs_cont{
- width: 100%;
- min-height: 142px;
- margin: 0;
-}
-
-.imgs_answers{
- width: 162px;
- margin: 0 auto;
- margin-bottom: 10px;
- min-height: 142px;
- border: 2px dashed #ccc;
- text-align: center;
-}
-
-.imgs_answers_gray{
-
-}
-
-.imgs_answers_green{
- background-color: #9f9;
-}
-
-.imgs_answers_red{
- background-color: #f99;
-}
-
-.number_cont{
- width: 40px;
- height: 33px;
- margin-left: 40px;
- margin-right: 10px;
- background-image: url(../img/circle.png);
- background-repeat: no-repeat;
- text-align: center;
- float: left;
- font-size: 130%;
- padding-top: 7px;
- font-weight: bold;
-}
-
-.text_cont{
- width: 80%;
- min-height: 40px;
- max-height: 60px;
- float: right;
- background-color: #999;
- border-top-left-radius: 20px;
- border-bottom-left-radius: 20px;
-}
-
-.close_cont{
- width: 20px;
- height: 20px;
- background-image: url(../img/close_cont.png);
- cursor: pointer;
- position: absolute;
- top: -15px;
- left: 5px;
-}
-
-.add_img{
- width: 120px;
- height: 120px;
- margin: 10px 20px;
- background-image: url(../img/add_img.png);
- background-position: center;
- background-repeat: no-repeat;
- cursor: pointer;
- display: inline-block;
-}
-
-.img_block{
- width: 120px;
- height: 120px;
- margin: 10px 20px;
- cursor: pointer;
- display: inline-block;
- position: relative;
-}
-
-.img_gray{
- border: 1px solid #ccc;
- -moz-box-shadow: #ccc -1px 0 4px;
- -webkit-box-shadow: #ccc -1px 0 4px;
- box-shadow: #ccc -1px 0 4px;
-}
-
-.close_img, .true_img, .false_img{
- width: 30px;
- height: 30px;
- background-repeat: no-repeat;
- position: absolute;
- right: -15px;
- cursor: pointer;
-}
-
-.close_img{
- background-image: url(../img/close_img.png);
- top: -15px;
-}
-
-.true_img{
- background-image: url(../img/false.png);
- top: 15px;
-}
-
-.false_img{
- background-image: url(../img/true.png);
- top: 15px;
-}
-
-.add_block{
- margin: 20px 0 0 20px;
- width: 110px;
- height: 25px;
- background-image: url(../img/add_block.png);
- background-repeat: no-repeat;
- padding-left: 40px;
- padding-top: 5px;
- cursor: pointer;
- background-color: #ccc;
- -webkit-border-radius: 15px;
- border-radius: 15px;
-}
-
-.dropHere{
- background-color: #ccc;
-}
-
-.dropBack{
-
-}
-
-.audio_block{
- width: 120px;
- height: 30px;
- padding: 5px 0 5px 10px;
- float: left;
- border-right: 3px solid white;
-}
-
-.audio_gray{
- border-top-left-radius: 15px;
- border-bottom-left-radius: 15px;
- background-color: white;
-}
-
-.audio_desc{
- width: 73%;
- max-height: 40px;
- overflow-x: hidden;
- float: right;
- margin-left: 20px;
- word-break: break-all;
-}
-
-.play, .stop{
- height: 30px;
- width: 70px;
- float: left;
- cursor: pointer;
-}
-
-.play{
- background-image: url(../img/play.png);
-}
-
-.stop{
- background-image: url(../img/stop.png);
-}
-
-.replay{
- height: 30px;
- width: 32px;
- margin-left: 10px;
- float: left;
- background-image: url(../img/replay.png);
- background-repeat: no-repeat;
- cursor: pointer;
-}
-
-.gray{
- background-color: #ccc;
-}
-
-/*new design*/
-
-.body_table{
- width: 100%;
- height: 100%;
- border-spacing: 0;
-}
-
-/*top*/
-
-.b_top_left{
- width: 54px;
- background-image: url(../img/top_left.png);
- background-repeat: no-repeat;
-}
-
-.b_top_right{
- width: 54px;
- background-image: url(../img/top_right.png);
- background-repeat: no-repeat;
-}
-
-.b_top_center{
- height: 54px;
- background-image: url(../img/top.png);
- background-repeat: repeat-x;
-}
-
-/*bottom*/
-
-.b_bottom_left{
- width: 54px;
- background-image: url(../img/bottom_left.png);
- background-repeat: no-repeat;
-}
-
-.b_bottom_right{
- width: 54px;
- background-image: url(../img/bottom_right.png);
- background-repeat: no-repeat;
-}
-
-.b_bottom_center{
- background-image: url(../img/bottom.png);
- background-repeat: repeat-x;
-}
-
-/*center*/
-
-.b_center_left{
- width: 54px;
- background-image: url(../img/left.png);
- background-repeat: repeat-y;
-}
-
-.b_center_right{
- width: 54px;
- background-image: url(../img/right.png);
- background-repeat: repeat-y;
-}
-
-#data{
- width: 100%;
- height: 100%;
- min-height: 250px;
- overflow: auto;
-}
-
-#wgt_name{
- height: 44px;
- margin: 10px 10px 0 10px;
- padding: 0;
- float: left;
- font-family: sans-serif;
- font-size: 24px;
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
-}
-
-#wgt_reload, #wgt_edit, #wgt_display, #wgt_help{
- cursor: pointer;
- margin: 10px 10px 0 0;
- float: right;
- font-family: sans-serif;
- font-size: 24px;
- line-height: 32px;
-}
-
-#wgt_display{
- padding-left: 35px;
- background: url(../img/toolbar-edit.png) left -32px no-repeat;
- color: white;
- display: none;
-}
-
-#wgt_edit{
- padding-left: 35px;
- background: url(../img/slate-toolbar-edit.png) left top no-repeat;
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
-}
-
-#wgt_reload{
- padding-left: 35px;
- background: url(../img/slate-toolbar-reload.png) left top no-repeat;
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
-}
-
-.btl_pad{
- background-image: url(../img/pad-top-left.png) !important;
-}
-
-.btc_pad{
- background-image: url(../img/pad-top.png) !important;
-}
-
-.btr_pad{
- background-image: url(../img/pad-top-right.png) !important;
-}
-
-.bcl_pad{
- background-image: url(../img/pad-left.png) !important;
-}
-
-.bcr_pad{
- background-image: url(../img/pad-right.png) !important;
-}
-
-.bbl_pad{
- background-image: url(../img/pad-bottom-left.png) !important;
-}
-
-.bbc_pad{
- background-image: url(../img/pad-bottom.png) !important;
-}
-
-.bbr_pad{
- background-image: url(../img/pad-bottom-right.png) !important;
-}
-
-.without_radius{
- border-radius: 0 !important;
-}
-
-.without_back{
- background: none !important;
-}
-
-.pad_color{
- color: #FC9 !important;
- text-shadow: none !important;
-}
-
-.pad_reload{
- background: url(../img/toolbar-reload.png) left top no-repeat !important;
-}
-
-.pad_edit{
- background: url(../img/toolbar-edit.png) left top no-repeat !important;
-}
-
-.pad_help{
- background: url(../img/toolbar-help.png) left top no-repeat !important;
-}
-
-.help_wood{
- background: url(../img/slate-toolbar-help.png) left -32px no-repeat !important;
- color: white !important;
- text-shadow: #7F613F 0 -1px 0 !important;
-}
-
-.help_pad{
- background: url(../img/toolbar-help.png) left -32px no-repeat !important;
- color: white !important;
-}
-
-#wgt_help{
- padding-left: 35px;
- background: url(../img/slate-toolbar-help.png) left top no-repeat;
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
-}
-
-#help{
- height: 100%;
- overflow: auto;
- display: none;
- background-color: #ccc;
- padding: 5px;
-}
-
-.open{
-
-}
-
-#parameters{
- display: none;
- padding: 10px 20px;
- background: url("../img/parameters-bg.png");
- border-radius: 4px 4px 0 0;
-}
-
-.inline{
- display: inline-block;
- font-family: sans-serif;
- font-size: 14px;
- color: #666;
-}
-
-#parameters label {
- font-style: italic;
-}
-
-#style_select{
- margin-left: 10px;
-}
-
-.display_wood{
- background: url(../img/slate-toolbar-edit.png) left -32px no-repeat !important;
- text-shadow: #7F613F 0 -1px 0;
-}
-
-.radius_ft{
- border-radius: 45px !important;
+html, body{
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ border-radius: 35px;
+ overflow: hidden;
+ font-family: sans-serif;
+}
+
+body{
+ background-image: url(../img/bg.png);
+}
+
+.toggle_mode{
+ width: 100%;
+ height: 25px;
+ border-bottom: 1px solid black;
+ background-color: #ccc;
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 2;
+}
+
+#display_img, #edit_img{
+ width: 15px;
+ height: 15px;
+ margin: 5px 10px;
+}
+
+#display_text, #edit_text{
+ height: 19px;
+ padding: 3px 0 0 0;
+}
+
+.selected{
+
+}
+
+#display:hover, #edit:hover{
+ background-color: #999;
+}
+
+.cont{
+ width: 100%;
+ border-bottom: 1px solid black;
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+
+.sub_cont{
+ width: 100%;
+ padding: 0;
+ margin: 20px 0 0 0;
+ min-height: 60px;
+}
+
+.imgs_cont{
+ width: 100%;
+ min-height: 142px;
+ margin: 0;
+}
+
+.imgs_answers{
+ width: 162px;
+ margin: 0 auto;
+ margin-bottom: 10px;
+ min-height: 142px;
+ border: 2px dashed #ccc;
+ text-align: center;
+}
+
+.imgs_answers_gray{
+
+}
+
+.imgs_answers_green{
+ background-color: #9f9;
+}
+
+.imgs_answers_red{
+ background-color: #f99;
+}
+
+.number_cont{
+ width: 40px;
+ height: 33px;
+ margin-left: 40px;
+ margin-right: 10px;
+ background-image: url(../img/circle.png);
+ background-repeat: no-repeat;
+ text-align: center;
+ float: left;
+ font-size: 130%;
+ padding-top: 7px;
+ font-weight: bold;
+}
+
+.text_cont{
+ width: 80%;
+ min-height: 40px;
+ max-height: 60px;
+ float: right;
+ background-color: #999;
+ border-top-left-radius: 20px;
+ border-bottom-left-radius: 20px;
+}
+
+.close_cont{
+ width: 20px;
+ height: 20px;
+ background-image: url(../img/close_cont.png);
+ cursor: pointer;
+ position: absolute;
+ top: -15px;
+ left: 5px;
+}
+
+.add_img{
+ width: 120px;
+ height: 120px;
+ margin: 10px 20px;
+ background-image: url(../img/add_img.png);
+ background-position: center;
+ background-repeat: no-repeat;
+ cursor: pointer;
+ display: inline-block;
+}
+
+.img_block{
+ width: 120px;
+ height: 120px;
+ margin: 10px 20px;
+ cursor: pointer;
+ display: inline-block;
+ position: relative;
+}
+
+.img_gray{
+ border: 1px solid #ccc;
+ -moz-box-shadow: #ccc -1px 0 4px;
+ -webkit-box-shadow: #ccc -1px 0 4px;
+ box-shadow: #ccc -1px 0 4px;
+}
+
+.close_img, .true_img, .false_img{
+ width: 30px;
+ height: 30px;
+ background-repeat: no-repeat;
+ position: absolute;
+ right: -15px;
+ cursor: pointer;
+}
+
+.close_img{
+ background-image: url(../img/close_img.png);
+ top: -15px;
+}
+
+.true_img{
+ background-image: url(../img/false.png);
+ top: 15px;
+}
+
+.false_img{
+ background-image: url(../img/true.png);
+ top: 15px;
+}
+
+.add_block{
+ margin: 20px 0 0 20px;
+ width: 110px;
+ height: 25px;
+ background-image: url(../img/add_block.png);
+ background-repeat: no-repeat;
+ padding-left: 40px;
+ padding-top: 5px;
+ cursor: pointer;
+ background-color: #ccc;
+ -webkit-border-radius: 15px;
+ border-radius: 15px;
+}
+
+.dropHere{
+ background-color: #ccc;
+}
+
+.dropBack{
+
+}
+
+.audio_block{
+ width: 120px;
+ height: 30px;
+ padding: 5px 0 5px 10px;
+ float: left;
+ border-right: 3px solid white;
+}
+
+.audio_gray{
+ border-top-left-radius: 15px;
+ border-bottom-left-radius: 15px;
+ background-color: white;
+}
+
+.audio_desc{
+ width: 70%;
+ max-height: 40px;
+ overflow-x: hidden;
+ float: right;
+ word-break: break-all;
+}
+
+.play, .stop{
+ height: 30px;
+ width: 70px;
+ float: left;
+ cursor: pointer;
+}
+
+.play{
+ background-image: url(../img/play.png);
+}
+
+.stop{
+ background-image: url(../img/stop.png);
+}
+
+.replay{
+ height: 30px;
+ width: 32px;
+ margin-left: 10px;
+ float: left;
+ background-image: url(../img/replay.png);
+ background-repeat: no-repeat;
+ cursor: pointer;
+}
+
+.gray{
+ background-color: #ccc;
+}
+
+/*new design*/
+
+.body_table{
+ width: 100%;
+ height: 100%;
+ border-spacing: 0;
+}
+
+/*top*/
+
+.b_top_left{
+ width: 54px;
+ background-image: url(../img/top_left.png);
+ background-repeat: no-repeat;
+}
+
+.b_top_right{
+ width: 54px;
+ background-image: url(../img/top_right.png);
+ background-repeat: no-repeat;
+}
+
+.b_top_center{
+ height: 54px;
+ background-image: url(../img/top.png);
+ background-repeat: repeat-x;
+}
+
+/*bottom*/
+
+.b_bottom_left{
+ width: 54px;
+ background-image: url(../img/bottom_left.png);
+ background-repeat: no-repeat;
+}
+
+.b_bottom_right{
+ width: 54px;
+ background-image: url(../img/bottom_right.png);
+ background-repeat: no-repeat;
+}
+
+.b_bottom_center{
+ background-image: url(../img/bottom.png);
+ background-repeat: repeat-x;
+}
+
+/*center*/
+
+.b_center_left{
+ width: 54px;
+ background-image: url(../img/left.png);
+ background-repeat: repeat-y;
+}
+
+.b_center_right{
+ width: 54px;
+ background-image: url(../img/right.png);
+ background-repeat: repeat-y;
+}
+
+#data{
+ width: 100%;
+ height: 100%;
+ min-height: 250px;
+ overflow: auto;
+}
+
+#wgt_name{
+ height: 44px;
+ margin: 10px 10px 0 10px;
+ padding: 0;
+ float: left;
+ font-family: sans-serif;
+ font-size: 24px;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
+}
+
+#wgt_reload, #wgt_edit, #wgt_display, #wgt_help{
+ cursor: pointer;
+ margin: 10px 10px 0 0;
+ float: right;
+ font-family: sans-serif;
+ font-size: 24px;
+ line-height: 32px;
+}
+
+#wgt_display{
+ padding-left: 35px;
+ background: url(../img/toolbar-edit.png) left -32px no-repeat;
+ color: white;
+ display: none;
+}
+
+#wgt_edit{
+ padding-left: 35px;
+ background: url(../img/slate-toolbar-edit.png) left top no-repeat;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
+}
+
+#wgt_reload{
+ padding-left: 35px;
+ background: url(../img/slate-toolbar-reload.png) left top no-repeat;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
+}
+
+.btl_pad{
+ background-image: url(../img/pad-top-left.png) !important;
+}
+
+.btc_pad{
+ background-image: url(../img/pad-top.png) !important;
+}
+
+.btr_pad{
+ background-image: url(../img/pad-top-right.png) !important;
+}
+
+.bcl_pad{
+ background-image: url(../img/pad-left.png) !important;
+}
+
+.bcr_pad{
+ background-image: url(../img/pad-right.png) !important;
+}
+
+.bbl_pad{
+ background-image: url(../img/pad-bottom-left.png) !important;
+}
+
+.bbc_pad{
+ background-image: url(../img/pad-bottom.png) !important;
+}
+
+.bbr_pad{
+ background-image: url(../img/pad-bottom-right.png) !important;
+}
+
+.without_radius{
+ border-radius: 0 !important;
+}
+
+.without_back{
+ background: none !important;
+}
+
+.pad_color{
+ color: #FC9 !important;
+ text-shadow: none !important;
+}
+
+.pad_reload{
+ background: url(../img/toolbar-reload.png) left top no-repeat !important;
+}
+
+.pad_edit{
+ background: url(../img/toolbar-edit.png) left top no-repeat !important;
+}
+
+.pad_help{
+ background: url(../img/toolbar-help.png) left top no-repeat !important;
+}
+
+.help_wood{
+ background: url(../img/slate-toolbar-help.png) left -32px no-repeat !important;
+ color: white !important;
+ text-shadow: #7F613F 0 -1px 0 !important;
+}
+
+.help_pad{
+ background: url(../img/toolbar-help.png) left -32px no-repeat !important;
+ color: white !important;
+}
+
+#wgt_help{
+ padding-left: 35px;
+ background: url(../img/slate-toolbar-help.png) left top no-repeat;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
+}
+
+#help{
+ height: 100%;
+ overflow: auto;
+ display: none;
+ background-color: #ccc;
+ padding: 5px;
+}
+
+.open{
+
+}
+
+#parameters{
+ display: none;
+ padding: 10px 20px;
+ background: url("../img/parameters-bg.png");
+ border-radius: 4px 4px 0 0;
+}
+
+.inline{
+ display: inline-block;
+ font-family: sans-serif;
+ font-size: 14px;
+ color: #666;
+}
+
+#parameters label {
+ font-style: italic;
+}
+
+#style_select{
+ margin-left: 10px;
+}
+
+.display_wood{
+ background: url(../img/slate-toolbar-edit.png) left -32px no-repeat !important;
+ text-shadow: #7F613F 0 -1px 0;
+}
+
+.radius_ft{
+ border-radius: 45px !important;
}
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/index.html
index 7cc9040..67a98ea 100644
--- a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/index.html
@@ -3,86 +3,30 @@
<head>
<title>D'n'd</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- start();
- }
- else{
- returnStatus(lang);
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- start();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ $.ajax({
+ type: 'POST',
+ url:'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="data">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/js/script.js b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/js/script.js
deleted file mode 100644
index 2c1849d..0000000
--- a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/js/script.js
+++ /dev/null
@@ -1,923 +0,0 @@
-var sankoreLang = {
- display: "Display",
- edit: "Edit",
- short_desc: "How many signals do you hear?",
- add: "Add new block",
- enter: "Enter your instruction here ...",
- wgt_name: "Associate to the audio",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p> <h2>Associate to the audio</h2> </p>" +
-"<p> <h3> Match a picture to a sound</h3> </p>" +
-"<p> Drag and drop the image in the correct area. If the result is incorrect, the area turns in red. If the result is correct, the area turns in green. </p> "+
-"<p> Reload âbuttonâ resets the exercises. </p>" +
-"<p> Enter the âEditâ mode to : </ p>" +
-"<ul> <li> choose the theme of the App : pad, slate, or none (by default : none), </li>" +
-"<li> modify an exercise or to create a new one.</li> </ul>" +
-
-"<p>To create a new exercise : </p>" +
-"<ul> <li> click on âNew blockâ,</li>" +
-"<li>insert an instruction the field dragging an audio file from your library, </li>" +
-"<li>add picture frames clicking on the â+â,</ li>" +
-"<li>drag an drop pictures from your library,</ li>" +
-"<li>set the correct image of your activity clicking on the submit button âvâ on the frame. </li> </ul>" +
-"<p> To delete a frame, click on the cross button on the frame. </p>" +
-"<p> To replace an audio file, drag a new one from your library. </p>" +
-"<p> To replace a picture, drag a new one from your library. </p>" +
-
-"<p> To delete a whole block, click on the cross on the left.</p>" +
-
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-//main function
-function start(){
-
- $("#wgt_display").text(sankoreLang.display);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_name").text(sankoreLang.wgt_name);
- $("#wgt_reload").text(sankoreLang.reload);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- if(window.sankore){
- if(sankore.preference("associer_sound","")){
- var data = jQuery.parseJSON(sankore.preference("associer_sound",""));
- importData(data);
- }
- else
- showExample();
- if(sankore.preference("as_snd_style","")){
- changeStyle(sankore.preference("as_snd_style",""));
- $("#style_select").val(sankore.preference("as_snd_style",""));
- } else
- changeStyle("3")
- }
- else
- showExample();
-
- //events
- if (window.widget) {
- window.widget.onleave = function(){
- exportData();
- sankore.setPreference("as_snd_style", $("#style_select").find("option:selected").val());
- }
- }
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").slideUp("100", function(){
- tmp.removeClass("open");
- $("#data").show();
- });
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- $("#data").hide();
- $("#help").slideDown("100", function(){
- tmp.addClass("open");
- });
- }
- });
-
- $("#wgt_reload").click(function(){
- if($("#wgt_display").hasClass("selected")){
- $("#wgt_edit").trigger("click");
- $("#wgt_display").trigger("click");
- } else {
- $("#wgt_display").trigger("click");
- }
- });
-
- $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
- exportData();
- });
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display", "none");
- $(".add_block").remove();
- $(".cont").each(function(){
- var container = $(this);
- var tmp_i = 0;
- var tmp_array = [];
-
- container.find(".text_cont .audio_desc").removeAttr("contenteditable");
- container.find(".audio_block").removeAttr("ondragenter")
- .removeAttr("ondragleave")
- .removeAttr("ondragover")
- .removeAttr("ondrop")
- container.find(".add_img").remove();
- container.find(".close_cont").remove();
- container.find(".img_block").each(function(){
- if($(this).find("img").attr("src") != "img/drop_img.png"){
- $(this).find(".close_img").remove();
- $(this).find(".true_img").remove();
- $(this).find(".false_img").remove();
- $(this).removeAttr("ondragenter")
- .removeAttr("ondragleave")
- .removeAttr("ondragover")
- .removeAttr("ondrop")
- .addClass("img_gray");
- } else
- $(this).remove();
- });
- var img_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").insertAfter(container.find(".sub_cont"));
- container.find(".img_block").each(function(){
- $(this).css("float","");
- tmp_array.push($(this));
- });
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++){
- tmp_array[i].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[i].appendTo(container.find(".imgs_cont"));
- }
-
- img_answers.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if($(this).children()[0].tagName == "IMG")
- $(this).children().remove();
- else
- $(ui.draggable).parent().append($(this).children());
- $(this).append($(ui.draggable));
- if($(this).children().length == 1){
- if($(this).children().find("input").val() == "1")
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- });
-
- container.find(".imgs_cont").droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_cont = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
- var answers = "";
- $(this).parent().find(".imgs_answers .img_block").each(function(){
- answers += $(this).find("input").val();
- });
- if(tmp_cont.children()[0].tagName == "IMG")
- tmp_cont.removeClass("imgs_answers_green")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_gray");
- else
- if(tmp_cont.children().length == 1){
- if(tmp_cont.children().find("input").val() == "1")
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- }
- });
- });
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- }
- } else {
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(true);
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display", "block");
-
- $(".cont").each(function(){
- var container = $(this);
- container.find(".imgs_answers").find(".img_block").each(function(){
- $(this).appendTo(container.find(".imgs_cont"))
- });
- container.find(".imgs_answers").remove();
- $("<div class='close_cont'>").appendTo(container);
- container.find(".imgs_cont").css("background-color", "");
- container.find(".text_cont .audio_desc").attr("contenteditable","true");
- container.find(".audio_block").attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
- .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
- .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
- var add_img = $("<div class='add_img'>");
- container.find(".img_block").each(function(){
- $(this).draggable("destroy");
- $(this).attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);")
- .css("float","left");
- $("<div class='close_img'>").appendTo($(this));
- if($(this).find("input").val() == "1"){
- $("<div class='false_img'>").appendTo($(this));
- }
- else{
- $("<div class='true_img'>").appendTo($(this));
- }
- });
- container.find(".imgs_cont").append(add_img)
- });
-
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- }
- }
-
- $("audio").each(function(){
- this.pause();
- $(this).parent().find(":first-child").removeClass("stop").addClass("play");
- });
-
- });
-
- //add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
-
- //adding new img
- $(".add_img").live("click", function(){
- addImgBlock($(this));
- });
-
- //deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
-
- //deleting the img block
- $(".close_img").live("click", function(){
- var i = 0;
- var tmp_obj = $(this).parent().parent();
- $(this).parent().remove();
- });
-
- //correct image
- $(".true_img").live("click",function(){
- $(this).parent().parent().find(".img_block").each(function(){
- $(this).find("input").val(0);
- var tmp_div = $(this).find(".false_img");
- if(tmp_div)
- tmp_div.removeClass("false_img").addClass("true_img");
- })
- $(this).parent().find("input").val(1);
- $(this).removeClass("true_img").addClass("false_img");
- });
-
- //wrong image
- $(".false_img").live("click",function(){
- $(this).parent().find("input").val(0);
- $(this).removeClass("false_img").addClass("true_img");
- });
-
- //play/pause event
- $(".play, .stop").live("click", function(){
- var tmp_audio = $(this);
- var audio = tmp_audio.parent().find("audio").get(0);
- if($(this).hasClass("play")){
- if(tmp_audio.parent().find("source").attr("src")){
- tmp_audio.removeClass("play").addClass("stop");
- var id = setInterval(function(){
- if(audio.currentTime == audio.duration){
- clearInterval(id);
- tmp_audio.removeClass("stop").addClass("play");
- }
- }, 10);
- tmp_audio.parent().find("input").val(id);
- audio.play();
- }
- } else {
- $(this).removeClass("stop").addClass("play");
- clearInterval( tmp_audio.parent().find("input").val())
- audio.pause();
- }
- });
-
- $(".replay").live("click", function(){
- var tmp_audio = $(this).prev();
- var audio = $(this).parent().find("audio").get(0);
- if(tmp_audio.parent().find("source").attr("src")){
- $(this).prev().removeClass("play").addClass("stop");
- clearInterval($(this).parent().find("input").val());
- var id = setInterval(function(){
- if(audio.currentTime == audio.duration){
- clearInterval(id);
- tmp_audio.removeClass("stop").addClass("play");
- }
- }, 10);
- tmp_audio.parent().find("input").val(id);
- audio.currentTime = 0;
- audio.play();
- }
- });
-}
-
-//export
-function exportData(){
- var array_to_export = [];
- if($("#wgt_edit").hasClass("selected")){
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.text = $(this).find(".audio_desc").text();
- cont_obj.audio = $(this).find("source").attr("src");
- cont_obj.mode = "edit";
- cont_obj.imgs = [];
- $(this).find(".img_block").each(function(){
- var img_obj = new Object();
- img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src");
- img_obj.ht = $(this).find("img").height();
- img_obj.wd = $(this).find("img").width();
- cont_obj.imgs.push(img_obj);
- });
- array_to_export.push(cont_obj);
- });
- } else {
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.text = $(this).find(".audio_desc").text();
- cont_obj.audio = $(this).find("source").attr("src");
- cont_obj.mode = "display";
- cont_obj.imgs = [];
- if($(this).find(".imgs_answers").children()[0].tagName == "DIV"){
- var tmp_cont = $(this).find(".imgs_answers").find(".img_block");
- var img_obj = new Object();
- img_obj.value = tmp_cont.find("input").val();
- img_obj.link = tmp_cont.find("img").attr("src");
- img_obj.ht = tmp_cont.find("img").height();
- img_obj.wd = tmp_cont.find("img").width();
- img_obj.cont = "answers";
- cont_obj.imgs.push(img_obj);
- }
- $(this).find(".imgs_cont .img_block").each(function(){
- var img_obj = new Object();
- img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src");
- img_obj.ht = $(this).find("img").height();
- img_obj.wd = $(this).find("img").width();
- img_obj.cont = "cont";
- cont_obj.imgs.push(img_obj);
- });
- array_to_export.push(cont_obj);
- });
- }
- if(window.sankore)
- sankore.setPreference("associer_sound", JSON.stringify(array_to_export));
-}
-
-//import
-function importData(data){
-
- var tmp = 0;
- for(var i in data){
- if(data[i].mode == "edit"){
- var tmp_array = [];
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", data[i].audio);
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- $("<div class='audio_desc'>" + data[i].text + "</div>").appendTo(text);
-
- for(var j in data[i].imgs){
- var img_block = $("<div class='img_block img_gray' style='text-align: center;'>");
- var img = $("<img src='" + data[i].imgs[j].link + "' style='display: inline;'>");
- img.height(data[i].imgs[j].ht);
- if((120 - data[i].imgs[j].ht) > 0)
- img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
- var hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
- img_block.append(hidden_input).append(img);
- tmp_array.push(img_block);
- }
- tmp_array = shuffle(tmp_array);
- for(j in tmp_array){
- tmp_array[j].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[j].appendTo(imgs_container);
- }
- imgs_answers.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if($(this).children()[0].tagName == "IMG")
- $(this).children().remove();
- else
- $(ui.draggable).parent().append($(this).children());
- $(this).append($(ui.draggable));
- if($(this).children().length == 1){
- if($(this).children().find("input").val() == "1")
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- });
- imgs_container.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_cont = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
- var answers = "";
- $(this).parent().find(".imgs_answers .img_block").each(function(){
- answers += $(this).find("input").val();
- });
- if(tmp_cont.children()[0].tagName == "IMG")
- tmp_cont.removeClass("imgs_answers_green")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_gray");
- else
- if(tmp_cont.children().length == 1){
- if(tmp_cont.children().find("input").val() == "1")
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- }
- });
- container.appendTo("#data");
- } else {
- container = $("<div class='cont'>");
- sub_container = $("<div class='sub_cont'>").appendTo(container);
- imgs_answers = $("<div class='imgs_answers'></div>").appendTo(container);
- $("<img src='img/drop_img.png' style='margin-top: 11px;'/>").appendTo(imgs_answers);
- imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
- text = $("<div class='text_cont'>").appendTo(sub_container);
- audio_block = $("<div class='audio_block'>").appendTo(text);
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- source = $("<source/>").attr("src", data[i].audio);
- audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- $("<div class='audio_desc'>" + data[i].text + "</div>").appendTo(text);
-
- for(j in data[i].imgs){
- img_block = $("<div class='img_block img_gray' style='text-align: center;'>");
- img = $("<img src='" + data[i].imgs[j].link + "' style='display: inline;'>");
- img.height(data[i].imgs[j].ht);
- if((120 - data[i].imgs[j].ht) > 0)
- img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
- hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
- img_block.append(hidden_input).append(img);
- img_block.draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- if(data[i].imgs[j].cont == "cont")
- img_block.appendTo(imgs_container);
- else{
- imgs_answers.empty();
- img_block.appendTo(imgs_answers);
- if(data[i].imgs[j].value == "1")
- imgs_answers.addClass("imgs_answers_green");
- else
- imgs_answers.addClass("imgs_answers_red");
- }
- }
-
- imgs_answers.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if($(this).children()[0].tagName == "IMG")
- $(this).children().remove();
- else
- $(ui.draggable).parent().append($(this).children());
- $(this).append($(ui.draggable));
- if($(this).children().length == 1){
- if($(this).children().find("input").val() == "1")
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- });
- imgs_container.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_cont = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
- var answers = "";
- $(this).parent().find(".imgs_answers .img_block").each(function(){
- answers += $(this).find("input").val();
- });
- if(tmp_cont.children()[0].tagName == "IMG")
- tmp_cont.removeClass("imgs_answers_green")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_gray");
- else
- if(tmp_cont.children().length == 1){
- if(tmp_cont.children().find("input").val() == "1")
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- }
- });
- container.appendTo("#data");
- }
- }
-}
-
-//example
-function showExample(){
-
- var tmp_array = [];
-
- var container = $("<div class='cont'>").appendTo("#data");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "objects/beep.wav");
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- var audio_desc = $("<div class='audio_desc'>" + sankoreLang.short_desc + "</div>").appendTo(text);
-
- $("<input type='hidden' value='1'/>").appendTo(imgs_container);
-
- var img1 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='0'/>").appendTo(img1);
- $("<img src=\"objects/0.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img1);
- var img2 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='1'/>").appendTo(img2);
- $("<img src=\"objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
- var img3 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='0'/>").appendTo(img3);
- $("<img src=\"objects/2.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img3);
- var img4 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='0'/>").appendTo(img4);
- $("<img src=\"objects/3.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img4);
- var img5 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
- $("<input type='hidden' value='0'/>").appendTo(img5);
- $("<img src=\"objects/4.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img5);
-
- tmp_array.push(img1, img2, img3, img4, img5);
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++){
- tmp_array[i].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[i].appendTo(imgs_container);
- }
- imgs_answers.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if($(this).children()[0].tagName == "IMG")
- $(this).children().remove();
- else
- $(ui.draggable).parent().append($(this).children());
- $(this).append($(ui.draggable));
- if($(this).children().length == 1){
- if($(this).children().find("input").val() == "1")
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- $(this).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- });
- imgs_container.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_cont = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
- var answers = "";
- $(this).parent().find(".imgs_answers .img_block").each(function(){
- answers += $(this).find("input").val();
- });
- if(tmp_cont.children()[0].tagName == "IMG")
- tmp_cont.removeClass("imgs_answers_green")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_gray");
- else
- if(tmp_cont.children().length == 1){
- if(tmp_cont.children().find("input").val() == "1")
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- tmp_cont.removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_red");
- }
- }
- }
- }
- });
-}
-
-//check result
-function checkResult(event)
-{
- var str = "";
- var right_str = $(event.target).find("input").val();
- $(event.target).find(".img_block").each(function(){
- str += $(this).find("input").val() + "*";
- });
- if(str == right_str)
- $(event.target).css("background-color","#9f9");
-}
-
-//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- audio_block.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
- .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
- .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "");
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- var audio_desc = $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
-
- $("<input type='hidden' value='1'/>").appendTo(imgs_container);
- var add_img = $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
-
-//add new img block
-function addImgBlock(dest){
- var img_block = $("<div class='img_block img_gray' ondragenter='return false;' ondragleave='$(this).css(\"background-color\",\"\"); return false;' ondragover='$(this).css(\"background-color\",\"#ccc\"); return false;' ondrop='$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);' style='text-align: center; float: left;'></div>").insertBefore(dest);
- $("<div class='close_img'>").appendTo(img_block);
- $("<div class='true_img'>").appendTo(img_block);
- $("<input type='hidden' value='0'/>").appendTo(img_block);
- $("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
-}
-
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
-
-//shuffles an array
-function shuffle( arr )
-{
- var pos, tmp;
-
- for( var i = 0; i < arr.length; i++ )
- {
- pos = Math.round( Math.random() * ( arr.length - 1 ) );
- tmp = arr[pos];
- arr[pos] = arr[i];
- arr[i] = tmp;
- }
- return arr;
-}
-
-
-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;
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
-
-function onDropTarget(obj, event) {
- $(obj).find("img").remove();
- if (event.dataTransfer) {
- var format = "text/plain";
- var textData = event.dataTransfer.getData(format);
- if (!textData) {
- alert(":(");
- }
- textData = stringToXML(textData);
- var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var tmp_img = $("<img/>").attr("src", tmp);
- $(obj).append(tmp_img);
- setTimeout(function(){
- if(tmp_img.height() >= tmp_img.width())
- tmp_img.attr("height", "120");
- else{
- tmp_img.attr("width","120");
- var h = tmp_img.height();
- tmp_img.attr("height",h);
- tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
- }
- }, 6)
- }
- else {
- alert ("Your browser does not support the dataTransfer object.");
- }
-
- if (event.stopPropagation) {
- event.stopPropagation ();
- }
- else {
- event.cancelBubble = true;
- }
- return false;
-}
-
-function onDropAudio(obj, event) {
- if (event.dataTransfer) {
- var format = "text/plain";
- var textData = event.dataTransfer.getData(format);
- if (!textData) {
- alert(":(");
- }
- textData = stringToXML(textData);
- var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
- if(tmp_type.substr(0, 5) == "audio"){
- var audio_block = $(obj);
- $(obj).find("audio").remove();
- audio_block.find(":first-child").removeClass("stop").addClass("play");
- var source = $("<source/>").attr("src", tmp);
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- }
- }
- else {
- alert ("Your browser does not support the dataTransfer object.");
- }
-
- if (event.stopPropagation) {
- event.stopPropagation ();
- }
- else {
- event.cancelBubble = true;
- }
- return false;
-}
-
-if (window.widget) {
- window.widget.onremove = function(){
- $("audio").each(function(){
- this.pause();
- $(this).parent().find(":first-child").removeClass("stop").addClass("play");
- });
- }
-}
diff --git a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/img/drop_img.png b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/img/drop_img.png
similarity index 100%
rename from Sankore-3.1/resources/library/interactivities/Ass sons.wgt/img/drop_img.png
rename to Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/img/drop_img.png
diff --git a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/index.html
new file mode 100644
index 0000000..3bb0d93
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>D'n'd</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../js/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="../../js/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="js/script.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ start();
+ });
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="data">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/js/script.js b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/js/script.js
new file mode 100644
index 0000000..4f851f2
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/en/js/script.js
@@ -0,0 +1,918 @@
+var sankoreLang = {
+ display: "Display",
+ edit: "Edit",
+ short_desc: "How many signals do you hear?",
+ add: "Add new block",
+ enter: "Enter your instruction here ...",
+ wgt_name: "Associate to the audio",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p> <h2>Associate to the audio</h2> </p>" +
+"<p> <h3> Match a picture to a sound</h3> </p>" +
+"<p> Drag and drop the image in the correct area. If the result is incorrect, the area turns in red. If the result is correct, the area turns in green. </p> "+
+"<p> Reload âbuttonâ resets the exercises. </p>" +
+"<p> Enter the âEditâ mode to : </ p>" +
+"<ul> <li> choose the theme of the App : pad, slate, or none (by default : none), </li>" +
+"<li> modify the exercise.</li> </ul>" +
+
+"<p>In edition mode : </p>" +
+"<ul><li>modify the instruction clicking on the field,</li>" +
+"<li>replace the audio file, dragging and dropping a new one from your library,</li>" +
+"<li>add picture frames clicking on the â+â,</li>" +
+"<li>drag an drop pictures from your library,</li>" +
+"<li>set the correct image of your activity clicking on the submit button âvâ on the frame,</li>" +
+"<li>delete a frame clicking on the cross button on the frame,</li>" +
+"<li>replace a picture, dragging a new one from your library,</li>" +
+"<li>âDisplayâ button comes back to the activity.</li></ul>",
+ theme: "Theme"
+};
+
+//main function
+function start(){
+
+ $("#wgt_display").text(sankoreLang.display);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_name").text(sankoreLang.wgt_name);
+ $("#wgt_reload").text(sankoreLang.reload);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ if(window.sankore){
+ if(sankore.preference("associer_sound","")){
+ var data = jQuery.parseJSON(sankore.preference("associer_sound",""));
+ importData(data);
+ }
+ else
+ showExample();
+ if(sankore.preference("as_snd_style","")){
+ changeStyle(sankore.preference("as_snd_style",""));
+ $("#style_select").val(sankore.preference("as_snd_style",""));
+ } else
+ changeStyle("3")
+ }
+ else
+ showExample();
+
+ //events
+ if (window.widget) {
+ window.widget.onleave = function(){
+ exportData();
+ sankore.setPreference("as_snd_style", $("#style_select").find("option:selected").val());
+ }
+ }
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").slideUp("100", function(){
+ tmp.removeClass("open");
+ $("#data").show();
+ });
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ $("#data").hide();
+ $("#help").slideDown("100", function(){
+ tmp.addClass("open");
+ });
+ }
+ });
+
+ $("#wgt_reload").click(function(){
+ if($("#wgt_display").hasClass("selected")){
+ $("#wgt_edit").trigger("click");
+ $("#wgt_display").trigger("click");
+ } else {
+ $("#wgt_display").trigger("click");
+ }
+ });
+
+ $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
+ exportData();
+ });
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display", "none");
+// $(".add_block").remove();
+ $(".cont").each(function(){
+ var container = $(this);
+ var tmp_i = 0;
+ var tmp_array = [];
+
+ container.find(".text_cont .audio_desc").removeAttr("contenteditable");
+ container.find(".audio_block").removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop")
+ container.find(".add_img").remove();
+// container.find(".close_cont").remove();
+ container.find(".img_block").each(function(){
+ if($(this).find("img").attr("src") != "img/drop_img.png"){
+ $(this).find(".close_img").remove();
+ $(this).find(".true_img").remove();
+ $(this).find(".false_img").remove();
+ $(this).removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop")
+ .addClass("img_gray");
+ } else
+ $(this).remove();
+ });
+ var img_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").insertAfter(container.find(".sub_cont"));
+ container.find(".img_block").each(function(){
+ $(this).css("float","");
+ tmp_array.push($(this));
+ });
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++){
+ tmp_array[i].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[i].appendTo(container.find(".imgs_cont"));
+ }
+
+ img_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+
+ container.find(".imgs_cont").droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+ });
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display", "block");
+
+ $(".cont").each(function(){
+ var container = $(this);
+ container.find(".imgs_answers").find(".img_block").each(function(){
+ $(this).appendTo(container.find(".imgs_cont"))
+ });
+ container.find(".imgs_answers").remove();
+// $("<div class='close_cont'>").appendTo(container);
+ container.find(".imgs_cont").css("background-color", "");
+ container.find(".text_cont .audio_desc").attr("contenteditable","true");
+ container.find(".audio_block").attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
+ .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
+ .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
+ var add_img = $("<div class='add_img'>");
+ container.find(".img_block").each(function(){
+ $(this).draggable("destroy");
+ $(this).attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
+ .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
+ .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);")
+ .css("float","left");
+ $("<div class='close_img'>").appendTo($(this));
+ if($(this).find("input").val() == "1"){
+ $("<div class='false_img'>").appendTo($(this));
+ }
+ else{
+ $("<div class='true_img'>").appendTo($(this));
+ }
+ });
+ container.find(".imgs_cont").append(add_img)
+ });
+
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ }
+ }
+
+ $("audio").each(function(){
+ this.pause();
+ $(this).parent().find(":first-child").removeClass("stop").addClass("play");
+ });
+
+ });
+
+ //add new block
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
+
+ //adding new img
+ $(".add_img").live("click", function(){
+ addImgBlock($(this));
+ });
+
+ //deleting a block
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
+
+ //deleting the img block
+ $(".close_img").live("click", function(){
+ var i = 0;
+ var tmp_obj = $(this).parent().parent();
+ $(this).parent().remove();
+ });
+
+ //correct image
+ $(".true_img").live("click",function(){
+ $(this).parent().parent().find(".img_block").each(function(){
+ $(this).find("input").val(0);
+ var tmp_div = $(this).find(".false_img");
+ if(tmp_div)
+ tmp_div.removeClass("false_img").addClass("true_img");
+ })
+ $(this).parent().find("input").val(1);
+ $(this).removeClass("true_img").addClass("false_img");
+ });
+
+ //wrong image
+ $(".false_img").live("click",function(){
+ $(this).parent().find("input").val(0);
+ $(this).removeClass("false_img").addClass("true_img");
+ });
+
+ //play/pause event
+ $(".play, .stop").live("click", function(){
+ var tmp_audio = $(this);
+ var audio = tmp_audio.parent().find("audio").get(0);
+ if($(this).hasClass("play")){
+ if(tmp_audio.parent().find("source").attr("src")){
+ tmp_audio.removeClass("play").addClass("stop");
+ var id = setInterval(function(){
+ if(audio.currentTime == audio.duration){
+ clearInterval(id);
+ tmp_audio.removeClass("stop").addClass("play");
+ }
+ }, 10);
+ tmp_audio.parent().find("input").val(id);
+ audio.play();
+ }
+ } else {
+ $(this).removeClass("stop").addClass("play");
+ clearInterval( tmp_audio.parent().find("input").val())
+ audio.pause();
+ }
+ });
+
+ $(".replay").live("click", function(){
+ var tmp_audio = $(this).prev();
+ var audio = $(this).parent().find("audio").get(0);
+ if(tmp_audio.parent().find("source").attr("src")){
+ $(this).prev().removeClass("play").addClass("stop");
+ clearInterval($(this).parent().find("input").val());
+ var id = setInterval(function(){
+ if(audio.currentTime == audio.duration){
+ clearInterval(id);
+ tmp_audio.removeClass("stop").addClass("play");
+ }
+ }, 10);
+ tmp_audio.parent().find("input").val(id);
+ audio.currentTime = 0;
+ audio.play();
+ }
+ });
+}
+
+//export
+function exportData(){
+ var array_to_export = [];
+ if($("#wgt_edit").hasClass("selected")){
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.text = $(this).find(".audio_desc").text();
+ cont_obj.audio = $(this).find("source").attr("src").replace("../../","");;
+ cont_obj.mode = "edit";
+ cont_obj.imgs = [];
+ $(this).find(".img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.ht = $(this).find("img").height();
+ img_obj.wd = $(this).find("img").width();
+ cont_obj.imgs.push(img_obj);
+ });
+ array_to_export.push(cont_obj);
+ });
+ } else {
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.text = $(this).find(".audio_desc").text();
+ cont_obj.audio = $(this).find("source").attr("src").replace("../../","");
+ cont_obj.mode = "display";
+ cont_obj.imgs = [];
+ if($(this).find(".imgs_answers").children()[0].tagName == "DIV"){
+ var tmp_cont = $(this).find(".imgs_answers").find(".img_block");
+ var img_obj = new Object();
+ img_obj.value = tmp_cont.find("input").val();
+ img_obj.link = tmp_cont.find("img").attr("src").replace("../../","");
+ img_obj.ht = tmp_cont.find("img").height();
+ img_obj.wd = tmp_cont.find("img").width();
+ img_obj.cont = "answers";
+ cont_obj.imgs.push(img_obj);
+ }
+ $(this).find(".imgs_cont .img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.ht = $(this).find("img").height();
+ img_obj.wd = $(this).find("img").width();
+ img_obj.cont = "cont";
+ cont_obj.imgs.push(img_obj);
+ });
+ array_to_export.push(cont_obj);
+ });
+ }
+ if(window.sankore)
+ sankore.setPreference("associer_sound", JSON.stringify(array_to_export));
+}
+
+//import
+function importData(data){
+
+ for(var i in data){
+ if(data[i].mode == "edit"){
+ var tmp_array = [];
+ var container = $("<div class='cont'>");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
+ var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+
+// var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+ var text = $("<div class='text_cont'>").appendTo(sub_container);
+ var audio_block = $("<div class='audio_block'>").appendTo(text);
+ $("<div class='play'>").appendTo(audio_block);
+ $("<div class='replay'>").appendTo(audio_block);
+ var source = $("<source/>").attr("src", "../../" + data[i].audio);
+ var audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ $("<input type='hidden'/>").appendTo(audio_block);
+ $("<div class='audio_desc'>" + data[i].text + "</div>").appendTo(text);
+
+ for(var j in data[i].imgs){
+ var img_block = $("<div class='img_block img_gray' style='text-align: center;'>");
+ var img = $("<img src='../../" + data[i].imgs[j].link + "' style='display: inline;'>");
+ img.height(data[i].imgs[j].ht);
+ if((120 - data[i].imgs[j].ht) > 0)
+ img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
+ var hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
+ img_block.append(hidden_input).append(img);
+ tmp_array.push(img_block);
+ }
+ tmp_array = shuffle(tmp_array);
+ for(j in tmp_array){
+ tmp_array[j].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[j].appendTo(imgs_container);
+ }
+ imgs_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+ imgs_container.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+ container.appendTo("#data");
+ } else {
+ container = $("<div class='cont'>");
+ sub_container = $("<div class='sub_cont'>").appendTo(container);
+ imgs_answers = $("<div class='imgs_answers'></div>").appendTo(container);
+ $("<img src='img/drop_img.png' style='margin-top: 11px;'/>").appendTo(imgs_answers);
+ imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+
+// number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+ text = $("<div class='text_cont'>").appendTo(sub_container);
+ audio_block = $("<div class='audio_block'>").appendTo(text);
+ $("<div class='play'>").appendTo(audio_block);
+ $("<div class='replay'>").appendTo(audio_block);
+ source = $("<source/>").attr("src", "../../" + data[i].audio);
+ audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ $("<input type='hidden'/>").appendTo(audio_block);
+ $("<div class='audio_desc'>" + data[i].text + "</div>").appendTo(text);
+
+ for(j in data[i].imgs){
+ img_block = $("<div class='img_block img_gray' style='text-align: center;'>");
+ img = $("<img src='../../" + data[i].imgs[j].link + "' style='display: inline;'>");
+ img.height(data[i].imgs[j].ht);
+ if((120 - data[i].imgs[j].ht) > 0)
+ img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
+ hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
+ img_block.append(hidden_input).append(img);
+ img_block.draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ if(data[i].imgs[j].cont == "cont")
+ img_block.appendTo(imgs_container);
+ else{
+ imgs_answers.empty();
+ img_block.appendTo(imgs_answers);
+ if(data[i].imgs[j].value == "1")
+ imgs_answers.addClass("imgs_answers_green");
+ else
+ imgs_answers.addClass("imgs_answers_red");
+ }
+ }
+
+ imgs_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+ imgs_container.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+ container.appendTo("#data");
+ }
+ }
+}
+
+//example
+function showExample(){
+
+ var tmp_array = [];
+
+ var container = $("<div class='cont'>").appendTo("#data");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
+ var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+ var text = $("<div class='text_cont'>").appendTo(sub_container);
+ var audio_block = $("<div class='audio_block'>").appendTo(text);
+ $("<div class='play'>").appendTo(audio_block);
+ $("<div class='replay'>").appendTo(audio_block);
+ var source = $("<source/>").attr("src", "../../objects/beep.wav");
+ var audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ $("<input type='hidden'/>").appendTo(audio_block);
+ var audio_desc = $("<div class='audio_desc'>" + sankoreLang.short_desc + "</div>").appendTo(text);
+
+ $("<input type='hidden' value='1'/>").appendTo(imgs_container);
+
+ var img1 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='0'/>").appendTo(img1);
+ $("<img src=\"../../objects/0.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img1);
+ var img2 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='1'/>").appendTo(img2);
+ $("<img src=\"../../objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
+ var img3 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='0'/>").appendTo(img3);
+ $("<img src=\"../../objects/2.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img3);
+ var img4 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='0'/>").appendTo(img4);
+ $("<img src=\"../../objects/3.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img4);
+ var img5 = $("<div class='img_block img_gray' style='text-align: center;'></div>");
+ $("<input type='hidden' value='0'/>").appendTo(img5);
+ $("<img src=\"../../objects/4.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img5);
+
+ tmp_array.push(img1, img2, img3, img4, img5);
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++){
+ tmp_array[i].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[i].appendTo(imgs_container);
+ }
+ imgs_answers.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if($(this).children()[0].tagName == "IMG")
+ $(this).children().remove();
+ else
+ $(ui.draggable).parent().append($(this).children());
+ $(this).append($(ui.draggable));
+ if($(this).children().length == 1){
+ if($(this).children().find("input").val() == "1")
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(this).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ });
+ imgs_container.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_cont = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ tmp_cont.append("<img src='img/drop_img.png' style='margin-top: 11px;'/>");
+ var answers = "";
+ $(this).parent().find(".imgs_answers .img_block").each(function(){
+ answers += $(this).find("input").val();
+ });
+ if(tmp_cont.children()[0].tagName == "IMG")
+ tmp_cont.removeClass("imgs_answers_green")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_gray");
+ else
+ if(tmp_cont.children().length == 1){
+ if(tmp_cont.children().find("input").val() == "1")
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ tmp_cont.removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_red");
+ }
+ }
+ }
+ }
+ });
+}
+
+//check result
+function checkResult(event)
+{
+ var str = "";
+ var right_str = $(event.target).find("input").val();
+ $(event.target).find(".img_block").each(function(){
+ str += $(this).find("input").val() + "*";
+ });
+ if(str == right_str)
+ $(event.target).css("background-color","#9f9");
+}
+
+//add new container
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont'>").appendTo(sub_container);
+// var audio_block = $("<div class='audio_block'>").appendTo(text);
+// audio_block.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
+// .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
+// .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
+// $("<div class='play'>").appendTo(audio_block);
+// $("<div class='replay'>").appendTo(audio_block);
+// var source = $("<source/>").attr("src", "");
+// var audio = $("<audio>").appendTo(audio_block);
+// audio.append(source);
+// $("<input type='hidden'/>").appendTo(audio_block);
+// var audio_desc = $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
+//
+// $("<input type='hidden' value='1'/>").appendTo(imgs_container);
+// var add_img = $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
+
+//add new img block
+function addImgBlock(dest){
+ var img_block = $("<div class='img_block img_gray' ondragenter='return false;' ondragleave='$(this).css(\"background-color\",\"\"); return false;' ondragover='$(this).css(\"background-color\",\"#ccc\"); return false;' ondrop='$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);' style='text-align: center; float: left;'></div>").insertBefore(dest);
+ $("<div class='close_img'>").appendTo(img_block);
+ $("<div class='true_img'>").appendTo(img_block);
+ $("<input type='hidden' value='0'/>").appendTo(img_block);
+ $("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
+}
+
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
+
+//shuffles an array
+function shuffle( arr )
+{
+ var pos, tmp;
+
+ for( var i = 0; i < arr.length; i++ )
+ {
+ pos = Math.round( Math.random() * ( arr.length - 1 ) );
+ tmp = arr[pos];
+ arr[pos] = arr[i];
+ arr[i] = tmp;
+ }
+ return arr;
+}
+
+
+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;
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
+
+function onDropTarget(obj, event) {
+ $(obj).find("img").remove();
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ var tmp_img = $("<img/>").attr("src", "../../" + tmp);
+ $(obj).append(tmp_img);
+ setTimeout(function(){
+ if(tmp_img.height() >= tmp_img.width())
+ tmp_img.attr("height", "120");
+ else{
+ tmp_img.attr("width","120");
+ var h = tmp_img.height();
+ tmp_img.attr("height",h);
+ tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
+ }
+ }, 6)
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
+
+function onDropAudio(obj, event) {
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
+ if(tmp_type.substr(0, 5) == "audio"){
+ var audio_block = $(obj);
+ $(obj).find("audio").remove();
+ audio_block.find(":first-child").removeClass("stop").addClass("play");
+ var source = $("<source/>").attr("src", "../../" + tmp);
+ var audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ }
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
+
+if (window.widget) {
+ window.widget.onremove = function(){
+ $("audio").each(function(){
+ this.pause();
+ $(this).parent().find(":first-child").removeClass("stop").addClass("play");
+ });
+ }
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/fr/js/script.js b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/fr/js/script.js
index 1b3c594..5e9432c 100644
--- a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/fr/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/fr/js/script.js
@@ -19,23 +19,16 @@ var sankoreLang = {
"<p>Le bouton âModifierâ vous permet : </p>"+
"<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun),</li>"+
- "<li>de modifier un exercice ou dâen créer de nouveaux dans la même activité.</li></ul>"+
+ "<li>de modifier l'exercice.</li></ul>"+
-
-"<p>En mode édition, pour créer un nouvel exercice, cliquez sur âNouveau blocâ en bas, puis </p>"+
-"<ul><li>insérez une consigne en cliquant sur le champ de texte âSaisir votre description ici ...â,"+
-"<li>insérez un son dans la zone à gauche de la consigne par glisser-déposer dâun son à partir de votre bibliothèque,</li>"+
+"<p>En mode édition :</p>"+
+"<ul><li>modifiez la consigne en cliquant sur le champ de texte,"+
+"<li>remplacez le son dans la zone à gauche de la consigne par glisser-déposer dâun son à partir de votre bibliothèque,</li>"+
"<li>ajoutez des zones image(s) en cliquant sur le gros signe + en dessous,</li>"+
"<li>insérez des images par glisser-déposer des images à partir de votre bibliothèque,</li>"+
-"<li>définissez lâimage correcte de lâinteractivité en cliquant sur le bouton valider âvâ situé en bas à droite de lâimage concernée.</li></ul>"+
-"<p>Pour supprimer une zone image, cliquez sur la croix située dans le coin supérieur droit de lâimage.</p>"+
-"<p>Pour remplacer un son, glissez-déposez simplement un nouveau son.</p>"+
-
-
-
- "<p>Pour supprimer un exercice, cliquez sur la croix à gauche du numéro de lâexercice.</p>"+
-
- "<p>Le bouton âAfficherâ vous permet dâutiliser lâactivité.</p>",
+"<li>définissez lâimage correcte de lâinteractivité en cliquant sur le bouton valider âvâ situé en bas à droite de lâimage concernée,</li>"+
+"<li>supprimez une zone image, en cliquant sur la croix située dans son coin supérieur droit,</li>"+
+"<li>le bouton âAfficherâ vous permet dâutiliser lâactivité.</li></ul>",
theme: "Thème"
};
@@ -121,7 +114,7 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display", "none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
@@ -133,7 +126,7 @@ function start(){
.removeAttr("ondragover")
.removeAttr("ondrop")
container.find(".add_img").remove();
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".img_block").each(function(){
if($(this).find("img").attr("src") != "img/drop_img.png"){
$(this).find(".close_img").remove();
@@ -226,7 +219,7 @@ function start(){
sankore.enableDropOnWidget(true);
$(this).addClass("selected");
$("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
+ $("#parameters").css("display", "block");
$(".cont").each(function(){
var container = $(this);
@@ -234,7 +227,7 @@ function start(){
$(this).appendTo(container.find(".imgs_cont"))
});
container.find(".imgs_answers").remove();
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".imgs_cont").css("background-color", "");
container.find(".text_cont .audio_desc").attr("contenteditable","true");
container.find(".audio_block").attr("ondragenter", "return false;")
@@ -260,7 +253,7 @@ function start(){
container.find(".imgs_cont").append(add_img)
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -274,9 +267,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
@@ -284,13 +277,15 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
- $(".close_img").live("click", function(){
+ $(".close_img").live("click", function(){
+ var i = 0;
+ var tmp_obj = $(this).parent().parent();
$(this).parent().remove();
});
@@ -361,7 +356,7 @@ function exportData(){
$(".cont").each(function(){
var cont_obj = new Object();
cont_obj.text = $(this).find(".audio_desc").text();
- cont_obj.audio = $(this).find("source").attr("src").replace("../../","");
+ cont_obj.audio = $(this).find("source").attr("src").replace("../../","");;
cont_obj.mode = "edit";
cont_obj.imgs = [];
$(this).find(".img_block").each(function(){
@@ -403,13 +398,13 @@ function exportData(){
array_to_export.push(cont_obj);
});
}
- sankore.setPreference("associer_sound", JSON.stringify(array_to_export));
+ if(window.sankore)
+ sankore.setPreference("associer_sound", JSON.stringify(array_to_export));
}
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].mode == "edit"){
var tmp_array = [];
@@ -418,12 +413,12 @@ function importData(data){
var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>").appendTo(sub_container);
var audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src","../../" + data[i].audio);
+ var source = $("<source/>").attr("src", "../../" + data[i].audio);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden'/>").appendTo(audio_block);
@@ -509,12 +504,12 @@ function importData(data){
$("<img src='img/drop_img.png' style='margin-top: 11px;'/>").appendTo(imgs_answers);
imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
text = $("<div class='text_cont'>").appendTo(sub_container);
audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
- source = $("<source/>").attr("src","../../" + data[i].audio);
+ source = $("<source/>").attr("src", "../../" + data[i].audio);
audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden'/>").appendTo(audio_block);
@@ -613,7 +608,7 @@ function showExample(){
var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>").appendTo(sub_container);
var audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
@@ -707,33 +702,45 @@ function showExample(){
});
}
-//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- audio_block.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
- .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
- .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "");
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- var audio_desc = $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
-
- $("<input type='hidden' value='1'/>").appendTo(imgs_container);
- var add_img = $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
+//check result
+function checkResult(event)
+{
+ var str = "";
+ var right_str = $(event.target).find("input").val();
+ $(event.target).find(".img_block").each(function(){
+ str += $(this).find("input").val() + "*";
+ });
+ if(str == right_str)
+ $(event.target).css("background-color","#9f9");
}
+//add new container
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont'>").appendTo(sub_container);
+// var audio_block = $("<div class='audio_block'>").appendTo(text);
+// audio_block.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
+// .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
+// .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
+// $("<div class='play'>").appendTo(audio_block);
+// $("<div class='replay'>").appendTo(audio_block);
+// var source = $("<source/>").attr("src", "");
+// var audio = $("<audio>").appendTo(audio_block);
+// audio.append(source);
+// $("<input type='hidden'/>").appendTo(audio_block);
+// var audio_desc = $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
+//
+// $("<input type='hidden' value='1'/>").appendTo(imgs_container);
+// var add_img = $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
+
//add new img block
function addImgBlock(dest){
var img_block = $("<div class='img_block img_gray' ondragenter='return false;' ondragleave='$(this).css(\"background-color\",\"\"); return false;' ondragover='$(this).css(\"background-color\",\"#ccc\"); return false;' ondrop='$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);' style='text-align: center; float: left;'></div>").insertBefore(dest);
@@ -743,12 +750,12 @@ function addImgBlock(dest){
$("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
@@ -845,7 +852,7 @@ function onDropTarget(obj, event) {
}
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var tmp_img = $("<img/>").attr("src","../../" + tmp);
+ var tmp_img = $("<img/>").attr("src", "../../" + tmp);
$(obj).append(tmp_img);
setTimeout(function(){
if(tmp_img.height() >= tmp_img.width())
@@ -881,7 +888,7 @@ function onDropAudio(obj, event) {
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
- if(tmp_type.substr(0, 5) == "audio"){
+ if(tmp_type.substr(0, 5) == "audio"){
var audio_block = $(obj);
$(obj).find("audio").remove();
audio_block.find(":first-child").removeClass("stop").addClass("play");
diff --git a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/ru/js/script.js b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/ru/js/script.js
index 911c3af..45179e8 100644
--- a/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/ru/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Ass sons.wgt/locales/ru/js/script.js
@@ -95,7 +95,7 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display", "none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
@@ -107,7 +107,7 @@ function start(){
.removeAttr("ondragover")
.removeAttr("ondrop")
container.find(".add_img").remove();
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".img_block").each(function(){
if($(this).find("img").attr("src") != "img/drop_img.png"){
$(this).find(".close_img").remove();
@@ -200,7 +200,7 @@ function start(){
sankore.enableDropOnWidget(true);
$(this).addClass("selected");
$("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
+ $("#parameters").css("display", "block");
$(".cont").each(function(){
var container = $(this);
@@ -208,7 +208,7 @@ function start(){
$(this).appendTo(container.find(".imgs_cont"))
});
container.find(".imgs_answers").remove();
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".imgs_cont").css("background-color", "");
container.find(".text_cont .audio_desc").attr("contenteditable","true");
container.find(".audio_block").attr("ondragenter", "return false;")
@@ -234,7 +234,7 @@ function start(){
container.find(".imgs_cont").append(add_img)
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -248,9 +248,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
@@ -258,13 +258,15 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
- $(".close_img").live("click", function(){
+ $(".close_img").live("click", function(){
+ var i = 0;
+ var tmp_obj = $(this).parent().parent();
$(this).parent().remove();
});
@@ -335,7 +337,7 @@ function exportData(){
$(".cont").each(function(){
var cont_obj = new Object();
cont_obj.text = $(this).find(".audio_desc").text();
- cont_obj.audio = $(this).find("source").attr("src").replace("../../","");
+ cont_obj.audio = $(this).find("source").attr("src").replace("../../","");;
cont_obj.mode = "edit";
cont_obj.imgs = [];
$(this).find(".img_block").each(function(){
@@ -377,13 +379,13 @@ function exportData(){
array_to_export.push(cont_obj);
});
}
- sankore.setPreference("associer_sound", JSON.stringify(array_to_export));
+ if(window.sankore)
+ sankore.setPreference("associer_sound", JSON.stringify(array_to_export));
}
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].mode == "edit"){
var tmp_array = [];
@@ -392,12 +394,12 @@ function importData(data){
var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>").appendTo(sub_container);
var audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src","../../" + data[i].audio);
+ var source = $("<source/>").attr("src", "../../" + data[i].audio);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden'/>").appendTo(audio_block);
@@ -483,12 +485,12 @@ function importData(data){
$("<img src='img/drop_img.png' style='margin-top: 11px;'/>").appendTo(imgs_answers);
imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
text = $("<div class='text_cont'>").appendTo(sub_container);
audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
- source = $("<source/>").attr("src","../../" + data[i].audio);
+ source = $("<source/>").attr("src", "../../" + data[i].audio);
audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden'/>").appendTo(audio_block);
@@ -587,7 +589,7 @@ function showExample(){
var imgs_answers = $("<div class='imgs_answers imgs_answers_gray'><img src='img/drop_img.png' style='margin-top: 11px;'/></div>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>").appendTo(sub_container);
var audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
@@ -681,33 +683,45 @@ function showExample(){
});
}
-//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- audio_block.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
- .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
- .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "");
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- var audio_desc = $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
-
- $("<input type='hidden' value='1'/>").appendTo(imgs_container);
- var add_img = $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
+//check result
+function checkResult(event)
+{
+ var str = "";
+ var right_str = $(event.target).find("input").val();
+ $(event.target).find(".img_block").each(function(){
+ str += $(this).find("input").val() + "*";
+ });
+ if(str == right_str)
+ $(event.target).css("background-color","#9f9");
}
+//add new container
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont'>").appendTo(sub_container);
+// var audio_block = $("<div class='audio_block'>").appendTo(text);
+// audio_block.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
+// .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
+// .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
+// $("<div class='play'>").appendTo(audio_block);
+// $("<div class='replay'>").appendTo(audio_block);
+// var source = $("<source/>").attr("src", "");
+// var audio = $("<audio>").appendTo(audio_block);
+// audio.append(source);
+// $("<input type='hidden'/>").appendTo(audio_block);
+// var audio_desc = $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
+//
+// $("<input type='hidden' value='1'/>").appendTo(imgs_container);
+// var add_img = $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
+
//add new img block
function addImgBlock(dest){
var img_block = $("<div class='img_block img_gray' ondragenter='return false;' ondragleave='$(this).css(\"background-color\",\"\"); return false;' ondragover='$(this).css(\"background-color\",\"#ccc\"); return false;' ondrop='$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);' style='text-align: center; float: left;'></div>").insertBefore(dest);
@@ -717,12 +731,12 @@ function addImgBlock(dest){
$("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
@@ -819,7 +833,7 @@ function onDropTarget(obj, event) {
}
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var tmp_img = $("<img/>").attr("src","../../" + tmp);
+ var tmp_img = $("<img/>").attr("src", "../../" + tmp);
$(obj).append(tmp_img);
setTimeout(function(){
if(tmp_img.height() >= tmp_img.width())
@@ -855,7 +869,7 @@ function onDropAudio(obj, event) {
textData = stringToXML(textData);
var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
- if(tmp_type.substr(0, 5) == "audio"){
+ if(tmp_type.substr(0, 5) == "audio"){
var audio_block = $(obj);
$(obj).find("audio").remove();
audio_block.find(":first-child").removeClass("stop").addClass("play");
diff --git a/Sankore-3.1/resources/library/interactivities/Balance.wgt/css/ubw-main.css b/Sankore-3.1/resources/library/interactivities/Balance.wgt/css/ubw-main.css
index 66280eb..ac5c3b0 100644
--- a/Sankore-3.1/resources/library/interactivities/Balance.wgt/css/ubw-main.css
+++ b/Sankore-3.1/resources/library/interactivities/Balance.wgt/css/ubw-main.css
@@ -1,308 +1,309 @@
html, body {
- margin:0;
- padding: 0;
- font-family: "helvetica neue";
- font-size: 14px;
- color: #666666;
+ margin:0;
+ padding: 0;
+ font-family: "helvetica neue";
+ font-size: 14px;
+ color: #666666;
}
#ubwidget {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- background: url("images/bg.png");
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: url("images/bg.png");
}
.theme-pad #ubwidget {
- border-radius: 40px;
- border-width: 52px;
-
- -webkit-border-image: url("images/pad-bd.png") 52 repeat;
- -moz-border-image: url("images/pad-bd.png") 52 repeat;
- border-image: url("images/pad-bd.png") 52 repeat;
+ border-radius: 40px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/pad-bd.png") 52 repeat;
+ -moz-border-image: url("images/pad-bd.png") 52 repeat;
+ border-image: url("images/pad-bd.png") 52 repeat;
}
.theme-slate #ubwidget {
- border-radius: 44px;
- border-width: 52px;
-
- -webkit-border-image: url("images/slate-bd.png") 52 repeat;
- -moz-border-image: url("images/slate-bd.png") 52 repeat;
- border-image: url("images/slate-bd.png") 52 repeat;
+ border-radius: 44px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/slate-bd.png") 52 repeat;
+ -moz-border-image: url("images/slate-bd.png") 52 repeat;
+ border-image: url("images/slate-bd.png") 52 repeat;
}
#ubwidget > .wrapper {
- position: absolute;
- top: 0px;
- bottom: 0px;
- left: 0px;
- right: 0px;
- overflow: hidden;
+ position: absolute;
+ top: 0px;
+ bottom: 0px;
+ left: 0px;
+ right: 0px;
+ overflow: hidden;
}
.theme-slate #ubwidget > .wrapper, .theme-pad #ubwidget > .wrapper {
- position: absolute;
- top: -49px;
- bottom: -5px;
- left: -5px;
- right: -5px;
- overflow: hidden;
+ position: absolute;
+ top: -49px;
+ bottom: -5px;
+ left: -5px;
+ right: -5px;
+ overflow: hidden;
}
#toolbar {
- display: table;
- width: 100%;
- height: 44px;
- font-size: 24px;
- color: #FFCC99;
- padding:0 10px;
+ display: table;
+ width: 100%;
+ height: 44px;
+ font-size: 24px;
+ color: #FFCC99;
+ padding:0 10px;
}
.theme-pad #toolbar, .theme-slate #toolbar {
- height: 38px;
- padding: 6px 0 0;
+ height: 38px;
+ padding: 6px 0 0;
}
.theme-slate #toolbar {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
}
#toolbar > * {
- display: table-cell;
- height: 100%;
- vertical-align: middle;
+ display: table-cell;
+ height: 100%;
+ vertical-align: middle;
}
#toolbar .actions {
- text-align: right;
+ text-align: right;
}
#toolbar button, h1 {
- font-weight: normal;
- font-size: 24px;
- color: #FFCC99;
- margin: 0;
+ font-weight: normal;
+ font-size: 24px;
+ color: #FFCC99;
+ margin: 0;
}
.theme-slate #toolbar button, .theme-slate h1 {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
}
#toolbar button {
- border: none;
- padding: none;
- outline: none;
- background: none;
-
- cursor: pointer;
- padding-left: 34px;
- margin-left: 10px;
- height: 32px;
+ border: none;
+ padding: none;
+ outline: none;
+ background: none;
+
+ cursor: pointer;
+ padding-left: 34px;
+ margin-left: 10px;
+ height: 32px;
}
#toolbar button span {
- display: block;
- line-height: 32px;
+ display: block;
+ line-height: 32px;
}
#toolbar button[role='edit'] {
- background: url("images/toolbar-edit.png") left top no-repeat;
+ background: url("images/toolbar-edit.png") left top no-repeat;
}
#toolbar button[role='view'] {
- display: none;
- color: #FFF;
- background: url("images/toolbar-edit.png") left -32px no-repeat;
+ display: none;
+ color: #FFF;
+ background: url("images/toolbar-edit.png") left -32px no-repeat;
}
#toolbar button[role='reload'] {
- background: url("images/toolbar-reload.png") left top no-repeat;
+ background: url("images/toolbar-reload.png") left top no-repeat;
}
#toolbar button[role='help'] {
- background: url("images/toolbar-help.png") left top no-repeat;
- display: none;
+ background: url("images/toolbar-help.png") left top no-repeat;
+ display: none;
}
.hasHelp #toolbar button[role='help'] {
- display: inline-block;
+ display: inline-block;
}
.showHelp #toolbar button[role='help'] {
- color: #FFF;
- background-position: left -32px;
+ color: #FFF;
+ background-position: left -32px;
}
.theme-slate #toolbar button[role='edit'] {
- background-image: url("images/slate-toolbar-edit.png");
+ background-image: url("images/slate-toolbar-edit.png");
}
.theme-slate #toolbar button[role='view'] {
- text-shadow: #7F613F 0 -1px 0;
- background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
+ text-shadow: #7F613F 0 -1px 0;
+ background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
}
.theme-slate #toolbar button[role='reload'] {
- background-image: url("images/slate-toolbar-reload.png");
+ background-image: url("images/slate-toolbar-reload.png");
}
.theme-slate #toolbar button[role='help'] {
- background-image: url("images/slate-toolbar-help.png");
+ background-image: url("images/slate-toolbar-help.png");
}
.showHelp.theme-slate #toolbar button[role='help'] {
- text-shadow: #7F613F 0 -1px 0;
+ text-shadow: #7F613F 0 -1px 0;
}
.onEdit #toolbar button[role='view'] {
- display: inline-block;
+ display: inline-block;
}
.onEdit #toolbar button[role='edit'] {
- display: none;
+ display: none;
}
#help {
- width: 300px;
- height: 400px;
- position: absolute;
- margin-top: 10px;
- right: 10px;
- z-index: 10000;
- display: none;
+ width: 300px;
+ height: 400px;
+ position: absolute;
+ margin-top: 10px;
+ right: 10px;
+ z-index: 10000;
+ display: none;
}
.showHelp #help {
- display: block;
+ display: block;
}
#content {
- position: absolute;
- top: 44px;
- bottom: 0;
- overflow: auto;
- left: 0;
- right: 0;
+ position: absolute;
+ top: 44px;
+ bottom: 0;
+ overflow: auto;
+ left: 0;
+ right: 0;
- background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
}
#parameters {
- display:none;
- padding: 10px 20px;
- background: url("images/parameters-bg.png");
-
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- -mz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
+ display:none;
+ padding: 10px 20px;
+ background: url("images/parameters-bg.png");
+
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -mz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
}
#parameters label {
- font-style: italic;
+ font-style: italic;
}
#parameters label > select, #parameters label > input{
- margin-left: 10px;
+ margin-left: 10px;
+ width: 80px;
}
#parameters > div.inline {
- display: inline-block;
+ display: inline-block;
}
#parameters > div.inline+div.inline {
- margin-left: 20px;
+ margin-left: 20px;
}
#parameters input[type=text],
#parameters input[type=number] {
- height: 26px;
- border: 1px solid #BBB;
- background-color: #FFF;
-
- padding: 0 4px;
-
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- -ms-border-radius: 4px;
- border-radius: 4px;
-
- -webkit-box-shadow: 0 1px 0 #FFF;
- -moz-box-shadow: 0 1px 0 #FFF;
- -ms-box-shadow: 0 1px 0 #FFF;
- box-shadow: 0 1px 0 #FFF;
+ height: 26px;
+ border: 1px solid #BBB;
+ background-color: #FFF;
+
+ padding: 0 4px;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ border-radius: 4px;
+
+ -webkit-box-shadow: 0 1px 0 #FFF;
+ -moz-box-shadow: 0 1px 0 #FFF;
+ -ms-box-shadow: 0 1px 0 #FFF;
+ box-shadow: 0 1px 0 #FFF;
}
#parameters input.tiny {
- width: 40px;
+ width: 40px;
}
#parameters input.small {
- width: 80px;
+ width: 80px;
}
#parameters input.medium {
- width: 120px;
+ width: 120px;
}
#parameters input.long {
- width: 160px;
+ width: 160px;
}
#scene {
- padding: 20px;
+ padding: 20px;
}
#scene > * {
- margin: 0 auto;
+ margin: 0 auto;
}
.onEdit #scene {
}
.onEdit #parameters {
- display: block;
+ display: block;
}
/*
.card-container {
- -webkit-perspective: 600px;
- width:100%;
- height: 100%;
+ -webkit-perspective: 600px;
+ width:100%;
+ height: 100%;
}
.card {
- position: relative;
- width:100%;
- height: 100%;
+ position: relative;
+ width:100%;
+ height: 100%;
}
.card > div {
- position: absolute;
- width:100%;
- height: 100%;
- -webkit-transform-style: preserve-3d;
- -webkit-transition: all .5s ease-in-out;
- -webkit-backface-visibility: hidden;
+ position: absolute;
+ width:100%;
+ height: 100%;
+ -webkit-transform-style: preserve-3d;
+ -webkit-transition: all .5s ease-in-out;
+ -webkit-backface-visibility: hidden;
}
.card > div:first-child {
- -webkit-transform: rotateY( 0deg );
+ -webkit-transform: rotateY( 0deg );
}
.card > div:last-child {
- -webkit-transform: rotateY( -180deg );
+ -webkit-transform: rotateY( -180deg );
}
.card.flip > div:first-child {
- -webkit-transform: rotateY( 180deg );
+ -webkit-transform: rotateY( 180deg );
}
.card.flip > div:last-child {
- -webkit-transform: rotateY( 0deg );
+ -webkit-transform: rotateY( 0deg );
}
*/
diff --git a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/config.xml
index 1e34149..aa98b4c 100644
--- a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/config.xml
@@ -4,7 +4,7 @@
id="http://www.njin.fr/sankore/apps/Cadran opératoire"
version="1.0"
width="800"
- height="700"
+ height="580"
ub:resizable="false">
<name>Cadran opératoire</name>
diff --git a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/css/main.css b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/css/main.css
index 95b3bdb..4234af5 100644
--- a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/css/main.css
+++ b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/css/main.css
@@ -132,7 +132,7 @@
position: relative;
overflow: hidden;
height: 100%;
- width: 120px;
+ width: 140px;
}
#result > div > div {
position: absolute;
diff --git a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/css/ubw-main.css b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/css/ubw-main.css
index 66280eb..ac5c3b0 100644
--- a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/css/ubw-main.css
+++ b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/css/ubw-main.css
@@ -1,308 +1,309 @@
html, body {
- margin:0;
- padding: 0;
- font-family: "helvetica neue";
- font-size: 14px;
- color: #666666;
+ margin:0;
+ padding: 0;
+ font-family: "helvetica neue";
+ font-size: 14px;
+ color: #666666;
}
#ubwidget {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- background: url("images/bg.png");
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: url("images/bg.png");
}
.theme-pad #ubwidget {
- border-radius: 40px;
- border-width: 52px;
-
- -webkit-border-image: url("images/pad-bd.png") 52 repeat;
- -moz-border-image: url("images/pad-bd.png") 52 repeat;
- border-image: url("images/pad-bd.png") 52 repeat;
+ border-radius: 40px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/pad-bd.png") 52 repeat;
+ -moz-border-image: url("images/pad-bd.png") 52 repeat;
+ border-image: url("images/pad-bd.png") 52 repeat;
}
.theme-slate #ubwidget {
- border-radius: 44px;
- border-width: 52px;
-
- -webkit-border-image: url("images/slate-bd.png") 52 repeat;
- -moz-border-image: url("images/slate-bd.png") 52 repeat;
- border-image: url("images/slate-bd.png") 52 repeat;
+ border-radius: 44px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/slate-bd.png") 52 repeat;
+ -moz-border-image: url("images/slate-bd.png") 52 repeat;
+ border-image: url("images/slate-bd.png") 52 repeat;
}
#ubwidget > .wrapper {
- position: absolute;
- top: 0px;
- bottom: 0px;
- left: 0px;
- right: 0px;
- overflow: hidden;
+ position: absolute;
+ top: 0px;
+ bottom: 0px;
+ left: 0px;
+ right: 0px;
+ overflow: hidden;
}
.theme-slate #ubwidget > .wrapper, .theme-pad #ubwidget > .wrapper {
- position: absolute;
- top: -49px;
- bottom: -5px;
- left: -5px;
- right: -5px;
- overflow: hidden;
+ position: absolute;
+ top: -49px;
+ bottom: -5px;
+ left: -5px;
+ right: -5px;
+ overflow: hidden;
}
#toolbar {
- display: table;
- width: 100%;
- height: 44px;
- font-size: 24px;
- color: #FFCC99;
- padding:0 10px;
+ display: table;
+ width: 100%;
+ height: 44px;
+ font-size: 24px;
+ color: #FFCC99;
+ padding:0 10px;
}
.theme-pad #toolbar, .theme-slate #toolbar {
- height: 38px;
- padding: 6px 0 0;
+ height: 38px;
+ padding: 6px 0 0;
}
.theme-slate #toolbar {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
}
#toolbar > * {
- display: table-cell;
- height: 100%;
- vertical-align: middle;
+ display: table-cell;
+ height: 100%;
+ vertical-align: middle;
}
#toolbar .actions {
- text-align: right;
+ text-align: right;
}
#toolbar button, h1 {
- font-weight: normal;
- font-size: 24px;
- color: #FFCC99;
- margin: 0;
+ font-weight: normal;
+ font-size: 24px;
+ color: #FFCC99;
+ margin: 0;
}
.theme-slate #toolbar button, .theme-slate h1 {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
}
#toolbar button {
- border: none;
- padding: none;
- outline: none;
- background: none;
-
- cursor: pointer;
- padding-left: 34px;
- margin-left: 10px;
- height: 32px;
+ border: none;
+ padding: none;
+ outline: none;
+ background: none;
+
+ cursor: pointer;
+ padding-left: 34px;
+ margin-left: 10px;
+ height: 32px;
}
#toolbar button span {
- display: block;
- line-height: 32px;
+ display: block;
+ line-height: 32px;
}
#toolbar button[role='edit'] {
- background: url("images/toolbar-edit.png") left top no-repeat;
+ background: url("images/toolbar-edit.png") left top no-repeat;
}
#toolbar button[role='view'] {
- display: none;
- color: #FFF;
- background: url("images/toolbar-edit.png") left -32px no-repeat;
+ display: none;
+ color: #FFF;
+ background: url("images/toolbar-edit.png") left -32px no-repeat;
}
#toolbar button[role='reload'] {
- background: url("images/toolbar-reload.png") left top no-repeat;
+ background: url("images/toolbar-reload.png") left top no-repeat;
}
#toolbar button[role='help'] {
- background: url("images/toolbar-help.png") left top no-repeat;
- display: none;
+ background: url("images/toolbar-help.png") left top no-repeat;
+ display: none;
}
.hasHelp #toolbar button[role='help'] {
- display: inline-block;
+ display: inline-block;
}
.showHelp #toolbar button[role='help'] {
- color: #FFF;
- background-position: left -32px;
+ color: #FFF;
+ background-position: left -32px;
}
.theme-slate #toolbar button[role='edit'] {
- background-image: url("images/slate-toolbar-edit.png");
+ background-image: url("images/slate-toolbar-edit.png");
}
.theme-slate #toolbar button[role='view'] {
- text-shadow: #7F613F 0 -1px 0;
- background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
+ text-shadow: #7F613F 0 -1px 0;
+ background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
}
.theme-slate #toolbar button[role='reload'] {
- background-image: url("images/slate-toolbar-reload.png");
+ background-image: url("images/slate-toolbar-reload.png");
}
.theme-slate #toolbar button[role='help'] {
- background-image: url("images/slate-toolbar-help.png");
+ background-image: url("images/slate-toolbar-help.png");
}
.showHelp.theme-slate #toolbar button[role='help'] {
- text-shadow: #7F613F 0 -1px 0;
+ text-shadow: #7F613F 0 -1px 0;
}
.onEdit #toolbar button[role='view'] {
- display: inline-block;
+ display: inline-block;
}
.onEdit #toolbar button[role='edit'] {
- display: none;
+ display: none;
}
#help {
- width: 300px;
- height: 400px;
- position: absolute;
- margin-top: 10px;
- right: 10px;
- z-index: 10000;
- display: none;
+ width: 300px;
+ height: 400px;
+ position: absolute;
+ margin-top: 10px;
+ right: 10px;
+ z-index: 10000;
+ display: none;
}
.showHelp #help {
- display: block;
+ display: block;
}
#content {
- position: absolute;
- top: 44px;
- bottom: 0;
- overflow: auto;
- left: 0;
- right: 0;
+ position: absolute;
+ top: 44px;
+ bottom: 0;
+ overflow: auto;
+ left: 0;
+ right: 0;
- background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
}
#parameters {
- display:none;
- padding: 10px 20px;
- background: url("images/parameters-bg.png");
-
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- -mz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
+ display:none;
+ padding: 10px 20px;
+ background: url("images/parameters-bg.png");
+
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -mz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
}
#parameters label {
- font-style: italic;
+ font-style: italic;
}
#parameters label > select, #parameters label > input{
- margin-left: 10px;
+ margin-left: 10px;
+ width: 80px;
}
#parameters > div.inline {
- display: inline-block;
+ display: inline-block;
}
#parameters > div.inline+div.inline {
- margin-left: 20px;
+ margin-left: 20px;
}
#parameters input[type=text],
#parameters input[type=number] {
- height: 26px;
- border: 1px solid #BBB;
- background-color: #FFF;
-
- padding: 0 4px;
-
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- -ms-border-radius: 4px;
- border-radius: 4px;
-
- -webkit-box-shadow: 0 1px 0 #FFF;
- -moz-box-shadow: 0 1px 0 #FFF;
- -ms-box-shadow: 0 1px 0 #FFF;
- box-shadow: 0 1px 0 #FFF;
+ height: 26px;
+ border: 1px solid #BBB;
+ background-color: #FFF;
+
+ padding: 0 4px;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ border-radius: 4px;
+
+ -webkit-box-shadow: 0 1px 0 #FFF;
+ -moz-box-shadow: 0 1px 0 #FFF;
+ -ms-box-shadow: 0 1px 0 #FFF;
+ box-shadow: 0 1px 0 #FFF;
}
#parameters input.tiny {
- width: 40px;
+ width: 40px;
}
#parameters input.small {
- width: 80px;
+ width: 80px;
}
#parameters input.medium {
- width: 120px;
+ width: 120px;
}
#parameters input.long {
- width: 160px;
+ width: 160px;
}
#scene {
- padding: 20px;
+ padding: 20px;
}
#scene > * {
- margin: 0 auto;
+ margin: 0 auto;
}
.onEdit #scene {
}
.onEdit #parameters {
- display: block;
+ display: block;
}
/*
.card-container {
- -webkit-perspective: 600px;
- width:100%;
- height: 100%;
+ -webkit-perspective: 600px;
+ width:100%;
+ height: 100%;
}
.card {
- position: relative;
- width:100%;
- height: 100%;
+ position: relative;
+ width:100%;
+ height: 100%;
}
.card > div {
- position: absolute;
- width:100%;
- height: 100%;
- -webkit-transform-style: preserve-3d;
- -webkit-transition: all .5s ease-in-out;
- -webkit-backface-visibility: hidden;
+ position: absolute;
+ width:100%;
+ height: 100%;
+ -webkit-transform-style: preserve-3d;
+ -webkit-transition: all .5s ease-in-out;
+ -webkit-backface-visibility: hidden;
}
.card > div:first-child {
- -webkit-transform: rotateY( 0deg );
+ -webkit-transform: rotateY( 0deg );
}
.card > div:last-child {
- -webkit-transform: rotateY( -180deg );
+ -webkit-transform: rotateY( -180deg );
}
.card.flip > div:first-child {
- -webkit-transform: rotateY( 180deg );
+ -webkit-transform: rotateY( 180deg );
}
.card.flip > div:last-child {
- -webkit-transform: rotateY( 0deg );
+ -webkit-transform: rotateY( 0deg );
}
*/
diff --git a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/index.html
index 2f3983a..a53889f 100644
--- a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/index.html
@@ -1,75 +1,90 @@
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-
- <link rel="stylesheet" href="css/ubw-main.css">
- <link rel="stylesheet" href="css/main.css">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <script src="js/templates.js" type="text/javascript" charset="utf-8"></script>
-
- <script src="js/lib/modernizr.js" type="text/javascript"></script>
- <script src="js/lib/jquery-1.7.1.min.js" type="text/javascript"></script>
- <script src="js/lib/jquery-css-transform.js" type="text/javascript"></script>
- <script src="js/lib/jquery.i18n.properties-min-1.0.9.js" type="text/javascript" charset="utf-8"></script>
- <script src="js/lib/mustache.js" type="text/javascript"></script>
- <script src="js/lib/ubw-main.js" type="text/javascript"></script>
- <script src="js/main.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
+ <link rel="stylesheet" href="css/ubw-main.css">
+ <link rel="stylesheet" href="css/main.css">
-<body class="hasHelp">
- <div id="ubwidget" data-themes="pad">
- <div class="wrapper">
- <div id="toolbar">
- </div>
- <div id="help">
- <iframe src="help.html" width="100%" height="100%" frameborder="0"></iframe>
- </div>
- <div id="content">
- <div id="parameters">
- </div>
- <div id="scene">
- <div id="disc">
- <div class="circle result hide">
- <div>
- <div id="result">
- <div>
- <div class="front">?</div>
- <div class="back">12</div>
- </div>
- </div>
- </div>
- </div>
- <div class="circle numbers">
- <div><div>0</div></div>
- <div><div>1</div></div>
- <div><div>2</div></div>
- <div><div>3</div></div>
- <div><div>4</div></div>
- <div><div>5</div></div>
- <div><div>6</div></div>
- <div><div>7</div></div>
- <div><div>8</div></div>
- <div><div>9</div></div>
- <div><div>10</div></div>
- <div><div>11</div></div>
- </div>
- <div class="circle operators">
- <div><div>+</div></div>
- <div><div>*</div></div>
- <div><div>-</div></div>
- <div><div>/</div></div>
- </div>
- <div class="circle input">
- <div></div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-</body>
+ <script src="js/templates.js" type="text/javascript" charset="utf-8"></script>
-</html>
+ <script src="js/lib/modernizr.js" type="text/javascript"></script>
+ <script src="js/lib/jquery-1.7.1.min.js" type="text/javascript"></script>
+ <script src="js/lib/jquery-css-transform.js" type="text/javascript"></script>
+ <script src="js/lib/jquery.i18n.properties-min-1.0.9.js" type="text/javascript" charset="utf-8"></script>
+ <script src="js/lib/mustache.js" type="text/javascript"></script>
+ <script src="js/lib/ubw-main.js" type="text/javascript"></script>
+ <script src="js/main.js" type="text/javascript" charset="utf-8"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ $(".circle.input>div").keydown(function(){
+ if((event.keyCode < 48 || event.keyCode > 57) && event.keyCode != 189 && event.keyCode != 46 && event.keyCode != 8 && event.keyCode != 37 && event.keyCode != 39)
+ return false;
+ if(event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39)
+ return true;
+ else{
+ if(this.innerHTML != "<br>")
+ return (this.innerHTML.charAt(0) == '-')?(this.innerHTML.length > 2)?false:true:(this.innerHTML.length > 1)?(event.keyCode == 189)?true:false:true;
+ else
+ return true;
+ }
+ })
+ })
+ </script>
+ </head>
+
+ <body class="hasHelp">
+ <div id="ubwidget" data-themes="pad">
+ <div class="wrapper">
+ <div id="toolbar">
+ </div>
+ <div id="help">
+ <iframe src="help.html" width="100%" height="100%" frameborder="0"></iframe>
+ </div>
+ <div id="content">
+ <div id="parameters">
+ </div>
+ <div id="scene">
+ <div id="disc">
+ <div class="circle result hide">
+ <div>
+ <div id="result">
+ <div>
+ <div class="front">?</div>
+ <div class="back">12</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="circle numbers">
+ <div><div>0</div></div>
+ <div><div>1</div></div>
+ <div><div>2</div></div>
+ <div><div>3</div></div>
+ <div><div>4</div></div>
+ <div><div>5</div></div>
+ <div><div>6</div></div>
+ <div><div>7</div></div>
+ <div><div>8</div></div>
+ <div><div>9</div></div>
+ <div><div>10</div></div>
+ <div><div>11</div></div>
+ </div>
+ <div class="circle operators">
+ <div><div>+</div></div>
+ <div><div>*</div></div>
+ <div><div>-</div></div>
+ <div><div>/</div></div>
+ </div>
+ <div class="circle input">
+ <div></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+
+ </html>
diff --git a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/js/help-template.js b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/js/help-template.js
index fa6dab9..29db73f 100644
--- a/Sankore-3.1/resources/library/interactivities/Cadran.wgt/js/help-template.js
+++ b/Sankore-3.1/resources/library/interactivities/Cadran.wgt/js/help-template.js
@@ -10,4 +10,5 @@
<p> To change the number in the center, click and replace it.</p>
-<p>"Display" button comes back to the activity.</p>
\ No newline at end of file
+<p>"Display" button comes back to the activity.</p>
+
diff --git a/Sankore-3.1/resources/library/interactivities/Calcul.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Calcul.wgt/config.xml
index 350fa89..e9cf3da 100644
--- a/Sankore-3.1/resources/library/interactivities/Calcul.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Calcul.wgt/config.xml
@@ -5,7 +5,7 @@
version="1.0"
width="800"
height="600"
- ub:resizable="true">
+ ub:resizable="false">
<name>Calcul rapide</name>
<author href="http://www.njin.fr" email="contact at njin.fr">njin</author>
diff --git a/Sankore-3.1/resources/library/interactivities/Calcul.wgt/css/ubw-main.css b/Sankore-3.1/resources/library/interactivities/Calcul.wgt/css/ubw-main.css
index 66280eb..dbe76fb 100644
--- a/Sankore-3.1/resources/library/interactivities/Calcul.wgt/css/ubw-main.css
+++ b/Sankore-3.1/resources/library/interactivities/Calcul.wgt/css/ubw-main.css
@@ -1,308 +1,310 @@
html, body {
- margin:0;
- padding: 0;
- font-family: "helvetica neue";
- font-size: 14px;
- color: #666666;
+ margin:0;
+ padding: 0;
+ font-family: "helvetica neue";
+ font-size: 14px;
+ color: #666666;
}
#ubwidget {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- background: url("images/bg.png");
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: url("images/bg.png");
}
.theme-pad #ubwidget {
- border-radius: 40px;
- border-width: 52px;
-
- -webkit-border-image: url("images/pad-bd.png") 52 repeat;
- -moz-border-image: url("images/pad-bd.png") 52 repeat;
- border-image: url("images/pad-bd.png") 52 repeat;
+ border-radius: 40px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/pad-bd.png") 52 repeat;
+ -moz-border-image: url("images/pad-bd.png") 52 repeat;
+ border-image: url("images/pad-bd.png") 52 repeat;
}
.theme-slate #ubwidget {
- border-radius: 44px;
- border-width: 52px;
-
- -webkit-border-image: url("images/slate-bd.png") 52 repeat;
- -moz-border-image: url("images/slate-bd.png") 52 repeat;
- border-image: url("images/slate-bd.png") 52 repeat;
+ border-radius: 44px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/slate-bd.png") 52 repeat;
+ -moz-border-image: url("images/slate-bd.png") 52 repeat;
+ border-image: url("images/slate-bd.png") 52 repeat;
}
#ubwidget > .wrapper {
- position: absolute;
- top: 0px;
- bottom: 0px;
- left: 0px;
- right: 0px;
- overflow: hidden;
+ position: absolute;
+ top: 0px;
+ bottom: 0px;
+ left: 0px;
+ right: 0px;
+ overflow: hidden;
}
.theme-slate #ubwidget > .wrapper, .theme-pad #ubwidget > .wrapper {
- position: absolute;
- top: -49px;
- bottom: -5px;
- left: -5px;
- right: -5px;
- overflow: hidden;
+ position: absolute;
+ top: -49px;
+ bottom: -5px;
+ left: -5px;
+ right: -5px;
+ overflow: hidden;
}
#toolbar {
- display: table;
- width: 100%;
- height: 44px;
- font-size: 24px;
- color: #FFCC99;
- padding:0 10px;
+ display: table;
+ width: 100%;
+ height: 44px;
+ font-size: 24px;
+ color: #FFCC99;
+ padding:0 10px;
}
.theme-pad #toolbar, .theme-slate #toolbar {
- height: 38px;
- padding: 6px 0 0;
+ height: 38px;
+ padding: 6px 0 0;
}
.theme-slate #toolbar {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
}
#toolbar > * {
- display: table-cell;
- height: 100%;
- vertical-align: middle;
+ display: table-cell;
+ height: 100%;
+ vertical-align: middle;
}
#toolbar .actions {
- text-align: right;
+ text-align: right;
}
#toolbar button, h1 {
- font-weight: normal;
- font-size: 24px;
- color: #FFCC99;
- margin: 0;
+ font-weight: normal;
+ font-size: 24px;
+ color: #FFCC99;
+ margin: 0;
}
.theme-slate #toolbar button, .theme-slate h1 {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
}
#toolbar button {
- border: none;
- padding: none;
- outline: none;
- background: none;
-
- cursor: pointer;
- padding-left: 34px;
- margin-left: 10px;
- height: 32px;
+ border: none;
+ padding: none;
+ outline: none;
+ background: none;
+
+ cursor: pointer;
+ padding-left: 34px;
+ margin-left: 10px;
+ height: 32px;
}
#toolbar button span {
- display: block;
- line-height: 32px;
+ display: block;
+ line-height: 32px;
}
#toolbar button[role='edit'] {
- background: url("images/toolbar-edit.png") left top no-repeat;
+ background: url("images/toolbar-edit.png") left top no-repeat;
}
#toolbar button[role='view'] {
- display: none;
- color: #FFF;
- background: url("images/toolbar-edit.png") left -32px no-repeat;
+ display: none;
+ color: #FFF;
+ background: url("images/toolbar-edit.png") left -32px no-repeat;
}
#toolbar button[role='reload'] {
- background: url("images/toolbar-reload.png") left top no-repeat;
+ background: url("images/toolbar-reload.png") left top no-repeat;
}
#toolbar button[role='help'] {
- background: url("images/toolbar-help.png") left top no-repeat;
- display: none;
+ background: url("images/toolbar-help.png") left top no-repeat;
+ display: none;
}
.hasHelp #toolbar button[role='help'] {
- display: inline-block;
+ display: inline-block;
}
.showHelp #toolbar button[role='help'] {
- color: #FFF;
- background-position: left -32px;
+ color: #FFF;
+ background-position: left -32px;
}
.theme-slate #toolbar button[role='edit'] {
- background-image: url("images/slate-toolbar-edit.png");
+ background-image: url("images/slate-toolbar-edit.png");
}
.theme-slate #toolbar button[role='view'] {
- text-shadow: #7F613F 0 -1px 0;
- background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
+ text-shadow: #7F613F 0 -1px 0;
+ background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
}
.theme-slate #toolbar button[role='reload'] {
- background-image: url("images/slate-toolbar-reload.png");
+ background-image: url("images/slate-toolbar-reload.png");
}
.theme-slate #toolbar button[role='help'] {
- background-image: url("images/slate-toolbar-help.png");
+ background-image: url("images/slate-toolbar-help.png");
}
.showHelp.theme-slate #toolbar button[role='help'] {
- text-shadow: #7F613F 0 -1px 0;
+ text-shadow: #7F613F 0 -1px 0;
}
.onEdit #toolbar button[role='view'] {
- display: inline-block;
+ display: inline-block;
}
.onEdit #toolbar button[role='edit'] {
- display: none;
+ display: none;
}
#help {
- width: 300px;
- height: 400px;
- position: absolute;
- margin-top: 10px;
- right: 10px;
- z-index: 10000;
- display: none;
+ width: 300px;
+ height: 400px;
+ position: absolute;
+ margin-top: 10px;
+ right: 10px;
+ z-index: 10000;
+ display: none;
}
.showHelp #help {
- display: block;
+ display: block;
}
#content {
- position: absolute;
- top: 44px;
- bottom: 0;
- overflow: auto;
- left: 0;
- right: 0;
+ position: absolute;
+ top: 44px;
+ bottom: 0;
+ overflow: auto;
+ left: 0;
+ right: 0;
- background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
}
#parameters {
- display:none;
- padding: 10px 20px;
- background: url("images/parameters-bg.png");
-
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- -mz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
+ display:none;
+ padding: 10px 20px;
+ background: url("images/parameters-bg.png");
+
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -mz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
}
#parameters label {
- font-style: italic;
+ font-style: italic;
}
#parameters label > select, #parameters label > input{
- margin-left: 10px;
+ margin-left: 10px;
+ width: 80px;
}
#parameters > div.inline {
- display: inline-block;
+ display: inline-block;
+ margin-right: 20px;
}
#parameters > div.inline+div.inline {
- margin-left: 20px;
+ margin-right: 20px;
}
#parameters input[type=text],
#parameters input[type=number] {
- height: 26px;
- border: 1px solid #BBB;
- background-color: #FFF;
-
- padding: 0 4px;
-
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- -ms-border-radius: 4px;
- border-radius: 4px;
-
- -webkit-box-shadow: 0 1px 0 #FFF;
- -moz-box-shadow: 0 1px 0 #FFF;
- -ms-box-shadow: 0 1px 0 #FFF;
- box-shadow: 0 1px 0 #FFF;
+ height: 26px;
+ border: 1px solid #BBB;
+ background-color: #FFF;
+
+ padding: 0 4px;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ border-radius: 4px;
+
+ -webkit-box-shadow: 0 1px 0 #FFF;
+ -moz-box-shadow: 0 1px 0 #FFF;
+ -ms-box-shadow: 0 1px 0 #FFF;
+ box-shadow: 0 1px 0 #FFF;
}
#parameters input.tiny {
- width: 40px;
+ width: 40px;
}
#parameters input.small {
- width: 80px;
+ width: 80px;
}
#parameters input.medium {
- width: 120px;
+ width: 120px;
}
#parameters input.long {
- width: 160px;
+ width: 160px;
}
#scene {
- padding: 20px;
+ padding: 20px;
}
#scene > * {
- margin: 0 auto;
+ margin: 0 auto;
}
.onEdit #scene {
}
.onEdit #parameters {
- display: block;
+ display: block;
}
/*
.card-container {
- -webkit-perspective: 600px;
- width:100%;
- height: 100%;
+ -webkit-perspective: 600px;
+ width:100%;
+ height: 100%;
}
.card {
- position: relative;
- width:100%;
- height: 100%;
+ position: relative;
+ width:100%;
+ height: 100%;
}
.card > div {
- position: absolute;
- width:100%;
- height: 100%;
- -webkit-transform-style: preserve-3d;
- -webkit-transition: all .5s ease-in-out;
- -webkit-backface-visibility: hidden;
+ position: absolute;
+ width:100%;
+ height: 100%;
+ -webkit-transform-style: preserve-3d;
+ -webkit-transition: all .5s ease-in-out;
+ -webkit-backface-visibility: hidden;
}
.card > div:first-child {
- -webkit-transform: rotateY( 0deg );
+ -webkit-transform: rotateY( 0deg );
}
.card > div:last-child {
- -webkit-transform: rotateY( -180deg );
+ -webkit-transform: rotateY( -180deg );
}
.card.flip > div:first-child {
- -webkit-transform: rotateY( 180deg );
+ -webkit-transform: rotateY( 180deg );
}
.card.flip > div:last-child {
- -webkit-transform: rotateY( 0deg );
+ -webkit-transform: rotateY( 0deg );
}
*/
diff --git a/Sankore-3.1/resources/library/interactivities/Calcul.wgt/js/help-template.js b/Sankore-3.1/resources/library/interactivities/Calcul.wgt/js/help-template.js
index f78ca09..0965d77 100644
--- a/Sankore-3.1/resources/library/interactivities/Calcul.wgt/js/help-template.js
+++ b/Sankore-3.1/resources/library/interactivities/Calcul.wgt/js/help-template.js
@@ -11,7 +11,7 @@
<li> operation (addition, subtraction, multiplication),</li>
<li> magnitude of proposed numbers,</li>
<li> number of elements (2-4),</li>
-<li> number of operations (1-5). </li> </ul>
+<li> number of operations (2-10). </li> </ul>
<p> Results are automatically calculated by the interactivity. </p>
<p>"Display" button comes back to the activity.</p>
diff --git a/Sankore-3.1/resources/library/interactivities/Calcul.wgt/js/help_fr-template.js b/Sankore-3.1/resources/library/interactivities/Calcul.wgt/js/help_fr-template.js
index 1c64700..cc4b395 100644
--- a/Sankore-3.1/resources/library/interactivities/Calcul.wgt/js/help_fr-template.js
+++ b/Sankore-3.1/resources/library/interactivities/Calcul.wgt/js/help_fr-template.js
@@ -11,6 +11,6 @@
<li>lâopération à effectuer (addition, soustraction, multiplication),</li>
<li>lâordre de grandeur des nombres proposés,</li>
<li>le nombre d'éléments de lâopération (2 à 4),</li>
-<li>le nombre dâopérations (1 à 5).</li></ul>
+<li>le nombre dâopérations (2 à 10).</li></ul>
<p>Le résultat des opérations nâest pas à inscrire dans le mode "Edition", il est calculé automatiquement par lâinteractivité.</p>
diff --git a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/config.xml
index 60aa658..748916d 100644
--- a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/config.xml
@@ -5,7 +5,7 @@
version="1.2"
width="950"
height="700"
- ub:resizable="true">
+ ub:resizable="false">
<name>Notes</name>
<author href="http://www.getuniboard.com"
diff --git a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/index.html
index e79952a..cc33b21 100644
--- a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/index.html
@@ -3,86 +3,30 @@
<head>
<title>D'n'd</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- start();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- start();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url:'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="data">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/js/script.js b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/js/script.js
deleted file mode 100644
index 666d71e..0000000
--- a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/js/script.js
+++ /dev/null
@@ -1,815 +0,0 @@
-var sankoreLang = {
- display: "Display",
- edit: "Edit",
- first_desc: "Odd numbers",
- second_desc: "Even numbers",
- enter: "Enter your category name here ...",
- add: "Add new block",
- wgt_name: "Categorize pictures",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p> <h2> Categorize pictures </h2> </p>" +
-"<p> <h3> Sort pictures according to the name of the category</h3> </p>" +
-
-"<p> Drag and drop pictures in the corresponding category. All pictures should be placed to get a feed back from interactivity. If the result is incorrect, the area turns in red. If the result is correct, the area turns in green.</p> "+
-
-"<p> âReloadâ button resets the exercises. </p>" +
-
-"<p> Enter the âEditâ mode to : </p>" +
-"<ul> <li> choose the theme of interactivity : pad, slate or none (none by default),</li>" +
-"<li> modify an exercise or create a new one.</li> </ul>" +
-
-
-"<p>To create a new exercise : </p>" +
-"<ul> <li> click on âNew blockâ,</li>" +
-"<li> edit the category clicking on the text field âEnter your category name here ...â,</li>" +
-"<li> add an another category clicking on the â+â,</li>" +
-"<li> drag and drop pictures from your library on the correct category.</li> </ul>" +
-"<p> To delete a picture, click on the cross button on the frame.</p>" +
-"<p> To remove a category, click on the â-â sign on the right.</p>" +
-"<p> To delete a whole block, click on the cross on the left.</p>" +
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-//main function
-function start(){
-
- $("#wgt_display").text(sankoreLang.display);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_name").text(sankoreLang.wgt_name);
- $("#wgt_reload").text(sankoreLang.reload);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- if(window.sankore){
- if(sankore.preference("categoriser_images","")){
- var data = jQuery.parseJSON(sankore.preference("categoriser_images",""));
- importData(data);
- } else {
- showExample();
- }
- }
- else
- showExample();
-
- if (window.widget) {
- window.widget.onleave = function(){
- exportData();
- }
- }
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").slideUp("100", function(){
- tmp.removeClass("open");
- $("#data").show();
- });
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- $("#data").hide();
- $("#help").slideDown("100", function(){
- tmp.addClass("open");
- });
- }
- });
-
- $("#wgt_reload").click(function(){
- if($("#wgt_display").hasClass("selected")){
- $("#wgt_edit").trigger("click");
- $("#wgt_display").trigger("click");
- } else {
- $("#wgt_display").trigger("click");
- }
- });
-
- $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
- exportData();
- });
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display","none");
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- $(".add_block").remove();
- $(".cont").each(function(){
- var container = $(this);
- var tmp_i = 0;
- var tmp_right = "";
- var tmp_array = [];
-
- container.find(".close_cont").remove();
- container.find(".imgs_cont").each(function(){
- $(this).find(".del_category").remove();
- $(this).find(".add_category").remove();
- $(this).removeAttr("ondragenter")
- .removeAttr("ondragleave")
- .removeAttr("ondragover")
- .removeAttr("ondrop")
- .find(".cat_desc").attr("disabled","disabled");
- var tmp_count = $(this).find(".img_block").size();
- $(this).find("input[name='count']").val(tmp_count);
- $(this).find(".img_block").each(function(){
- $(this).find(".close_img").remove();
- tmp_array.push($(this));
- $(this).remove();
- });
- $(this).droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
- $(this).removeAttr("style");
- });
-
- var all_imgs = $("<div class='all_imgs'>").appendTo(container);
-
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++){
- tmp_array[i].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[i].appendTo(all_imgs);
- }
-
- all_imgs.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- }
- });
- });
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- }
- } else {
- if(!$(this).hasClass("selected")){
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
- if(window.sankore)
- sankore.enableDropOnWidget(true);
- $(".cont").each(function(){
- var container = $(this);
-
- $("<div class='close_cont'>").appendTo(container);
- container.find(".imgs_cont").each(function(){
- $("<button class='del_category'></button>").appendTo($(this));
- $("<button class='add_category'></button>").appendTo($(this));
- $(this).attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"#E6F6FF\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#C3E9FF\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"#E6F6FF\"); return onDropTarget(this,event);")
- .removeClass("red_cont")
- .removeClass("green_cont")
- .addClass("def_cont")
- .droppable("destroy")
- .find(".cat_desc").removeAttr("disabled");
- var tmp_img_cont = $(this);
- var tmp_mask = $(this).find("input[name='mask']").val();
- container.find(".img_block").each(function(){
- if($(this).find("input").val() == tmp_mask){
- $("<div class='close_img'>").appendTo($(this));
- $(this).appendTo(tmp_img_cont);
- }
- });
- });
- container.find(".all_imgs").remove();
- });
-
-
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- }
- }
- });
-
- //add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
-
- //adding new img
- $(".add_img").live("click", function(){
- addImgBlock($(this));
- });
-
- //deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
-
- //deleting the img block
- $(".close_img").live("click", function(){
- $(this).parent().remove();
- });
-
- //adding new category
- $(".add_category").live("click",function(){
- addCategory($(this).parent());
- });
-
- //deleting the category
- $(".del_category").live("click",function(){
- if($(this).parent().parent().find(".imgs_cont").size() == 1){
- $(this).parent().find(".img_block").remove();
- $(this).parent().find(".cat_desc").val(sankoreLang.enter);
- } else {
- $(this).parent().remove();
- }
- });
-}
-
-//export
-function exportData(){
- var array_to_export = [];
- if($("#wgt_edit").hasClass("selected")){
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- cont_obj.mode = "edit";
- cont_obj.conts = [];
- $(this).find(".imgs_cont").each(function(){
- var img_cont = new Object();
- img_cont.mask = $(this).find("input[name='mask']").val();
- img_cont.count = $(this).find(".img_block").size();
- img_cont.text = $(this).find(".cat_desc").val();
- img_cont.imgs = [];
- $(this).find(".img_block").each(function(){
- var img_obj = new Object();
- img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src");
- img_obj.ht = $(this).find("img").height();
- img_obj.wd = $(this).find("img").width();
- img_cont.imgs.push(img_obj);
- });
- cont_obj.conts.push(img_cont);
- });
- array_to_export.push(cont_obj);
- });
- } else {
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- cont_obj.mode = "display";
- cont_obj.conts = [];
- $(this).find(".imgs_cont").each(function(){
- var img_cont = new Object();
- img_cont.mask = $(this).find("input[name='mask']").val();
- img_cont.count = $(this).find("input[name='count']").val();
- img_cont.text = $(this).find(".cat_desc").val();
- img_cont.imgs = [];
- $(this).find(".img_block").each(function(){
- var img_obj = new Object();
- img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src");
- img_obj.ht = $(this).find("img").height();
- img_obj.wd = $(this).find("img").width();
- img_cont.imgs.push(img_obj);
- });
- cont_obj.conts.push(img_cont);
- });
- cont_obj.all_imgs = [];
- $(this).find(".all_imgs .img_block").each(function(){
- var img = new Object();
- img.value = $(this).find("input").val();
- img.link = $(this).find("img").attr("src");
- img.ht = $(this).find("img").height();
- img.wd = $(this).find("img").width();
- cont_obj.all_imgs.push(img);
- });
- array_to_export.push(cont_obj);
- });
- }
-
- if($(".cont").size() == 0){
- var cont_obj = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- cont_obj.tmp = "clear";
- array_to_export.push(cont_obj);
- }
- if(window.sankore)
- sankore.setPreference("categoriser_images", JSON.stringify(array_to_export));
-}
-
-//import
-function importData(data){
-
- var tmp = 0;
- for(var i in data){
- if(data[i].tmp){
- changeStyle(data[i].style);
- $("#style_select").val(data[i].style);
- } else {
- if(i == 0){
- changeStyle(data[i].style);
- $("#style_select").val(data[i].style);
- }
- if(data[i].mode == "edit"){
- var tmp_array = [];
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
-
- for(var j in data[i].conts){
- var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
-
- $("<input type='hidden' name='mask' value='" + data[i].conts[j].mask + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value='" + data[i].conts[j].count + "'/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + data[i].conts[j].text + "' disabled/>").appendTo(tmp_div);
- for(var k in data[i].conts[j].imgs){
- var block_img = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
- var img = $("<img src=\"" + data[i].conts[j].imgs[k].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
- img.height(data[i].conts[j].imgs[k].ht);
- if((120 - data[i].conts[j].imgs[k].ht) > 0)
- img.css("margin",(120 - data[i].conts[j].imgs[k].ht)/2 + "px 0");
- tmp_array.push(block_img);
- }
-
- imgs_container.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
- }
-
- var all_imgs = $("<div class='all_imgs'>").appendTo(container);
-
- tmp_array = shuffle(tmp_array);
- for(j in tmp_array){
- tmp_array[j].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[j].appendTo(all_imgs);
- }
-
- all_imgs.sortable();
-
- all_imgs.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- }
- });
-
- container.appendTo("#data");
- } else {
- container = $("<div class='cont'>");
- sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
-
- for(j in data[i].conts){
- var tmp_img_array = [];
- imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
- $("<input type='hidden' name='mask' value='" + data[i].conts[j].mask + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value='" + data[i].conts[j].count + "'/>").appendTo(imgs_container);
- tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + data[i].conts[j].text + "' disabled/>").appendTo(tmp_div);
- for(k in data[i].conts[j].imgs){
- block_img = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
- img = $("<img src=\"" + data[i].conts[j].imgs[k].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
- img.height(data[i].conts[j].imgs[k].ht);
- if((120 - data[i].conts[j].imgs[k].ht) > 0)
- img.css("margin",(120 - data[i].conts[j].imgs[k].ht)/2 + "px 0");
- tmp_img_array.push(block_img);
- }
-
- tmp_img_array = shuffle(tmp_img_array);
- for(k in tmp_img_array){
- tmp_img_array[k].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_img_array[k].appendTo(imgs_container);
- }
-
- imgs_container.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
- }
-
- all_imgs = $("<div class='all_imgs'>").appendTo(container);
- var all_imgs_arr = [];
- for(j in data[i].all_imgs){
- block_img = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='" + data[i].all_imgs[j].value + "'/>").appendTo(block_img);
- img = $("<img src=\"" + data[i].all_imgs[j].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
- img.height(data[i].all_imgs[j].ht);
- if((120 - data[i].all_imgs[j].ht) > 0)
- img.css("margin",(120 - data[i].all_imgs[j].ht)/2 + "px 0");
- all_imgs_arr.push(block_img);
- }
-
- all_imgs_arr = shuffle(all_imgs_arr);
- for(k in all_imgs_arr){
- all_imgs_arr[k].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- all_imgs_arr[k].appendTo(all_imgs);
- }
-
- all_imgs.sortable();
-
- all_imgs.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- }
- });
- container.appendTo("#data");
- checkCorrectness(all_imgs);
- }
- }
- }
-}
-
-//example
-function showExample(){
-
- changeStyle("3");
- var tmp_array = [];
-
- var container = $("<div class='cont'>").appendTo("#data");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container_one = $("<div class='imgs_cont def_cont'>").appendTo(container);
- var imgs_container_two = $("<div class='imgs_cont def_cont'>").appendTo(container);
- var all_imgs = $("<div class='all_imgs'>").appendTo(container);
-
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
-
- $("<input type='hidden' name='mask' value='1'/>").appendTo(imgs_container_one);
- $("<input type='hidden' name='count' value='2'/>").appendTo(imgs_container_one);
- var tmp_div_one = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container_one);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.first_desc + "' disabled/>").appendTo(tmp_div_one);
-
- $("<input type='hidden' name='mask' value='2'/>").appendTo(imgs_container_two);
- $("<input type='hidden' name='count' value='3'/>").appendTo(imgs_container_two);
- var tmp_div_two = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container_two);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.second_desc + "' disabled/>").appendTo(tmp_div_two);
-
- var img1 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='2'/>").appendTo(img1);
- $("<img src=\"objects/0.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img1);
- var img2 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='1'/>").appendTo(img2);
- $("<img src=\"objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
- var img3 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='2'/>").appendTo(img3);
- $("<img src=\"objects/2.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img3);
- var img4 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='1'/>").appendTo(img4);
- $("<img src=\"objects/3.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img4);
- var img5 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='2'/>").appendTo(img5);
- $("<img src=\"objects/4.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img5);
-
- tmp_array.push(img1, img2, img3, img4, img5);
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++){
- tmp_array[i].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[i].appendTo(all_imgs);
- }
- all_imgs.sortable();
-
- imgs_container_one.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
-
- imgs_container_two.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
-
- all_imgs.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- }
- });
-}
-
-//function that allows to add new category
-function addCategory(obj){
- var imgs_container = $("<div class='imgs_cont def_cont'>").insertAfter(obj);
- $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'>").appendTo(tmp_div);
- $("<button class='del_category'></button>").appendTo(imgs_container);
- $("<button class='add_category'></button>").appendTo(imgs_container);
- imgs_container.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);");
-}
-
-//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
-
- $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
- $("<button class='del_category'></button>").appendTo(imgs_container);
- $("<button class='add_category'></button>").appendTo(imgs_container);
- imgs_container.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);");
- container.insertBefore($(".add_block"));
-}
-
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
-
-//shuffles an array
-function shuffle( arr )
-{
- var pos, tmp;
-
- for( var i = 0; i < arr.length; i++ )
- {
- pos = Math.round( Math.random() * ( arr.length - 1 ) );
- tmp = arr[pos];
- arr[pos] = arr[i];
- arr[i] = tmp;
- }
- return arr;
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
-
-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;
-}
-
-//return id
-function returnId(){
- var tmp = Math.random().toString();
- return tmp.substr(2);
-}
-
-//a func for checking when smth will drop
-function checkOnDrop(dest){
- var tmp_count = dest.find("input[name='count']").val();
- var tmp_mask = dest.find("input[name='mask']").val();
- if(dest.find(".img_block").size() == tmp_count){
- var tmp_right = true;
- dest.find(".img_block").each(function(){
- if($(this).find("input").val() != tmp_mask)
- tmp_right = false;
- });
- if(tmp_right)
- dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont");
- else
- dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont");
- } else
- dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont");
-}
-
-//checking source on correctness
-function checkCorrectness(source){
- if(!source.hasClass("all_imgs")){
- if(source.parent().find(".all_imgs").find(".img_block").size() == 0){
- source.parent().find(".imgs_cont").each(function(){
- checkOnDrop($(this))
- })
- } else {
- source.parent().find(".imgs_cont").each(function(){
- $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont");
- })
- }
- } else {
- if(source.find(".img_block").size() > 0){
- source.parent().find(".imgs_cont").each(function(){
- $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont");
- })
- } else {
- source.parent().find(".imgs_cont").each(function(){
- checkOnDrop($(this))
- })
- }
- }
-}
-
-function onDropTarget(obj, event) {
- if (event.dataTransfer) {
- var format = "text/plain";
- var textData = event.dataTransfer.getData(format);
- if (!textData) {
- alert(":(");
- }
- textData = stringToXML(textData);
- if(textData.getElementsByTagName("ready")[0].firstChild.textContent == "true"){
- var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var img_block = $("<div class='img_block' style='text-align: center;'>");
- $("<div class='close_img'>").appendTo(img_block);
- $("<input type='hidden' value='" + $(obj).find("input[name='mask']").val() + "'/>").appendTo(img_block);
- var tmp_img = $("<img style='display: inline;'/>").attr("src", tmp).appendTo(img_block);
- img_block.draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- $(obj).append(img_block);
-
- if(tmp_img.height() == 0){
- var tmp_id = setInterval(function(){
- if(tmp_img.height() != 0){
- if(tmp_img.height() >= tmp_img.width())
- tmp_img.attr("height", "120");
- else{
- tmp_img.attr("width","120");
- var h = tmp_img.height();
- tmp_img.attr("height",h);
- tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
- }
- clearInterval(tmp_id);
- }
- }, 10);
- } else {
- if(tmp_img.height() >= tmp_img.width())
- tmp_img.attr("height", "120");
- else{
- tmp_img.attr("width","120");
- var h = tmp_img.height();
- tmp_img.attr("height",h);
- tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
- }
- }
- }
- }
- else {
- alert ("Your browser does not support the dataTransfer object.");
- }
-
- if (event.stopPropagation) {
- event.stopPropagation ();
- }
- else {
- event.cancelBubble = true;
- }
- return false;
-}
diff --git a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/en/index.html
new file mode 100644
index 0000000..f21b641
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/en/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>D'n'd</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../js/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="../../js/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="js/script.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ start();
+ });
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="data">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/en/js/script.js b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/en/js/script.js
new file mode 100644
index 0000000..b02c750
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/en/js/script.js
@@ -0,0 +1,811 @@
+var sankoreLang = {
+ display: "Display",
+ edit: "Edit",
+ first_desc: "Odd numbers",
+ second_desc: "Even numbers",
+ enter: "Enter your category name here ...",
+ add: "Add new block",
+ wgt_name: "Categorize pictures",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p> <h2> Categorize pictures </h2> </p>" +
+"<p> <h3> Sort pictures according to the name of the category</h3> </p>" +
+
+"<p> Drag and drop pictures in the corresponding category. All pictures should be placed to get a feed back from interactivity. If the result is incorrect, the area turns in red. If the result is correct, the area turns in green.</p> "+
+
+"<p> âReloadâ button resets the exercises. </p>" +
+
+"<p> Enter the âEditâ mode to : </p>" +
+"<ul> <li> choose the theme of interactivity : pad, slate or none (none by default),</li>" +
+"<li> modify the exercise.</li> </ul>" +
+
+"<p>In edition mode : </p>" +
+"<ul> <li> edit the category clicking on the text field,</li>" +
+"<li> add an another category clicking on the â+â,</li>" +
+"<li> drag and drop pictures from your library on the correct category,</li>" +
+"<li> delete a picture clicking on the cross button on the frame,</li>" +
+"<li> remove a category clicking on the â-â sign on the right,</li>" +
+"<li>âDisplayâ button comes back to the activity.</li></ul>",
+ theme: "Theme"
+};
+
+//main function
+function start(){
+
+ $("#wgt_display").text(sankoreLang.display);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_name").text(sankoreLang.wgt_name);
+ $("#wgt_reload").text(sankoreLang.reload);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ if(window.sankore){
+ if(sankore.preference("categoriser_images","")){
+ var data = jQuery.parseJSON(sankore.preference("categoriser_images",""));
+ importData(data);
+ } else {
+ showExample();
+ }
+ }
+ else
+ showExample();
+
+ if (window.widget) {
+ window.widget.onleave = function(){
+ exportData();
+ }
+ }
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").slideUp("100", function(){
+ tmp.removeClass("open");
+ $("#data").show();
+ });
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ $("#data").hide();
+ $("#help").slideDown("100", function(){
+ tmp.addClass("open");
+ });
+ }
+ });
+
+ $("#wgt_reload").click(function(){
+ if($("#wgt_display").hasClass("selected")){
+ $("#wgt_edit").trigger("click");
+ $("#wgt_display").trigger("click");
+ } else {
+ $("#wgt_display").trigger("click");
+ }
+ });
+
+ $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
+ exportData();
+ });
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display","none");
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+// $(".add_block").remove();
+ $(".cont").each(function(){
+ var container = $(this);
+ var tmp_i = 0;
+ var tmp_right = "";
+ var tmp_array = [];
+
+// container.find(".close_cont").remove();
+ container.find(".imgs_cont").each(function(){
+ $(this).find(".del_category").remove();
+ $(this).find(".add_category").remove();
+ $(this).removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop")
+ .find(".cat_desc").attr("disabled","disabled");
+ var tmp_count = $(this).find(".img_block").size();
+ $(this).find("input[name='count']").val(tmp_count);
+ $(this).find(".img_block").each(function(){
+ $(this).find(".close_img").remove();
+ tmp_array.push($(this));
+ $(this).remove();
+ });
+ $(this).droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+ $(this).removeAttr("style");
+ });
+
+ var all_imgs = $("<div class='all_imgs'>").appendTo(container);
+
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++){
+ tmp_array[i].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[i].appendTo(all_imgs);
+ }
+
+ all_imgs.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ }
+ });
+ });
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display","block");
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
+ $(".cont").each(function(){
+ var container = $(this);
+
+// $("<div class='close_cont'>").appendTo(container);
+ container.find(".imgs_cont").each(function(){
+ $("<button class='del_category'></button>").appendTo($(this));
+ $("<button class='add_category'></button>").appendTo($(this));
+ $(this).attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).css(\"background-color\",\"#E6F6FF\"); return false;")
+ .attr("ondragover", "$(this).css(\"background-color\",\"#C3E9FF\"); return false;")
+ .attr("ondrop", "$(this).css(\"background-color\",\"#E6F6FF\"); return onDropTarget(this,event);")
+ .removeClass("red_cont")
+ .removeClass("green_cont")
+ .addClass("def_cont")
+ .droppable("destroy")
+ .find(".cat_desc").removeAttr("disabled");
+ var tmp_img_cont = $(this);
+ var tmp_mask = $(this).find("input[name='mask']").val();
+ container.find(".img_block").each(function(){
+ if($(this).find("input").val() == tmp_mask){
+ $("<div class='close_img'>").appendTo($(this));
+ $(this).appendTo(tmp_img_cont);
+ }
+ });
+ });
+ container.find(".all_imgs").remove();
+ });
+
+
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ }
+ }
+ });
+
+ //add new block
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
+
+ //adding new img
+ $(".add_img").live("click", function(){
+ addImgBlock($(this));
+ });
+
+ //deleting a block
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
+
+ //deleting the img block
+ $(".close_img").live("click", function(){
+ $(this).parent().remove();
+ });
+
+ //adding new category
+ $(".add_category").live("click",function(){
+ addCategory($(this).parent());
+ });
+
+ //deleting the category
+ $(".del_category").live("click",function(){
+ if($(this).parent().parent().find(".imgs_cont").size() == 1){
+ $(this).parent().find(".img_block").remove();
+ $(this).parent().find(".cat_desc").val(sankoreLang.enter);
+ } else {
+ $(this).parent().remove();
+ }
+ });
+}
+
+//export
+function exportData(){
+ var array_to_export = [];
+ if($("#wgt_edit").hasClass("selected")){
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ cont_obj.mode = "edit";
+ cont_obj.conts = [];
+ $(this).find(".imgs_cont").each(function(){
+ var img_cont = new Object();
+ img_cont.mask = $(this).find("input[name='mask']").val();
+ img_cont.count = $(this).find(".img_block").size();
+ img_cont.text = $(this).find(".cat_desc").val();
+ img_cont.imgs = [];
+ $(this).find(".img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.ht = $(this).find("img").height();
+ img_obj.wd = $(this).find("img").width();
+ img_cont.imgs.push(img_obj);
+ });
+ cont_obj.conts.push(img_cont);
+ });
+ array_to_export.push(cont_obj);
+ });
+ } else {
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ cont_obj.mode = "display";
+ cont_obj.conts = [];
+ $(this).find(".imgs_cont").each(function(){
+ var img_cont = new Object();
+ img_cont.mask = $(this).find("input[name='mask']").val();
+ img_cont.count = $(this).find("input[name='count']").val();
+ img_cont.text = $(this).find(".cat_desc").val();
+ img_cont.imgs = [];
+ $(this).find(".img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.ht = $(this).find("img").height();
+ img_obj.wd = $(this).find("img").width();
+ img_cont.imgs.push(img_obj);
+ });
+ cont_obj.conts.push(img_cont);
+ });
+ cont_obj.all_imgs = [];
+ $(this).find(".all_imgs .img_block").each(function(){
+ var img = new Object();
+ img.value = $(this).find("input").val();
+ img.link = $(this).find("img").attr("src").replace("../../","");
+ img.ht = $(this).find("img").height();
+ img.wd = $(this).find("img").width();
+ cont_obj.all_imgs.push(img);
+ });
+ array_to_export.push(cont_obj);
+ });
+ }
+
+ if($(".cont").size() == 0){
+ var cont_obj = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ cont_obj.tmp = "clear";
+ array_to_export.push(cont_obj);
+ }
+ if(window.sankore)
+ sankore.setPreference("categoriser_images", JSON.stringify(array_to_export));
+}
+
+//import
+function importData(data){
+
+ for(var i in data){
+ if(data[i].tmp){
+ changeStyle(data[i].style);
+ $("#style_select").val(data[i].style);
+ } else {
+ if(i == 0){
+ changeStyle(data[i].style);
+ $("#style_select").val(data[i].style);
+ }
+ if(data[i].mode == "edit"){
+ var tmp_array = [];
+ var container = $("<div class='cont'>");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+
+ for(var j in data[i].conts){
+ var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+
+ $("<input type='hidden' name='mask' value='" + data[i].conts[j].mask + "'/>").appendTo(imgs_container);
+ $("<input type='hidden' name='count' value='" + data[i].conts[j].count + "'/>").appendTo(imgs_container);
+ var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+ $("<input type='text' class='cat_desc' value='" + data[i].conts[j].text + "' disabled/>").appendTo(tmp_div);
+ for(var k in data[i].conts[j].imgs){
+ var block_img = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
+ var img = $("<img src=\"../../" + data[i].conts[j].imgs[k].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
+ img.height(data[i].conts[j].imgs[k].ht);
+ if((120 - data[i].conts[j].imgs[k].ht) > 0)
+ img.css("margin",(120 - data[i].conts[j].imgs[k].ht)/2 + "px 0");
+ tmp_array.push(block_img);
+ }
+
+ imgs_container.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+ }
+
+ var all_imgs = $("<div class='all_imgs'>").appendTo(container);
+
+ tmp_array = shuffle(tmp_array);
+ for(j in tmp_array){
+ tmp_array[j].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[j].appendTo(all_imgs);
+ }
+
+ all_imgs.sortable();
+
+ all_imgs.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ }
+ });
+
+ container.appendTo("#data");
+ } else {
+ container = $("<div class='cont'>");
+ sub_container = $("<div class='sub_cont'>").appendTo(container);
+// $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
+
+ for(j in data[i].conts){
+ var tmp_img_array = [];
+ imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+ $("<input type='hidden' name='mask' value='" + data[i].conts[j].mask + "'/>").appendTo(imgs_container);
+ $("<input type='hidden' name='count' value='" + data[i].conts[j].count + "'/>").appendTo(imgs_container);
+ tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+ $("<input type='text' class='cat_desc' value='" + data[i].conts[j].text + "' disabled/>").appendTo(tmp_div);
+ for(k in data[i].conts[j].imgs){
+ block_img = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
+ img = $("<img src=\"../../" + data[i].conts[j].imgs[k].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
+ img.height(data[i].conts[j].imgs[k].ht);
+ if((120 - data[i].conts[j].imgs[k].ht) > 0)
+ img.css("margin",(120 - data[i].conts[j].imgs[k].ht)/2 + "px 0");
+ tmp_img_array.push(block_img);
+ }
+
+ tmp_img_array = shuffle(tmp_img_array);
+ for(k in tmp_img_array){
+ tmp_img_array[k].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_img_array[k].appendTo(imgs_container);
+ }
+
+ imgs_container.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+ }
+
+ all_imgs = $("<div class='all_imgs'>").appendTo(container);
+ var all_imgs_arr = [];
+ for(j in data[i].all_imgs){
+ block_img = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='" + data[i].all_imgs[j].value + "'/>").appendTo(block_img);
+ img = $("<img src=\"../../" + data[i].all_imgs[j].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
+ img.height(data[i].all_imgs[j].ht);
+ if((120 - data[i].all_imgs[j].ht) > 0)
+ img.css("margin",(120 - data[i].all_imgs[j].ht)/2 + "px 0");
+ all_imgs_arr.push(block_img);
+ }
+
+ all_imgs_arr = shuffle(all_imgs_arr);
+ for(k in all_imgs_arr){
+ all_imgs_arr[k].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ all_imgs_arr[k].appendTo(all_imgs);
+ }
+
+ all_imgs.sortable();
+
+ all_imgs.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ }
+ });
+ container.appendTo("#data");
+ checkCorrectness(all_imgs);
+ }
+ }
+ }
+}
+
+//example
+function showExample(){
+
+ changeStyle("3");
+ var tmp_array = [];
+
+ var container = $("<div class='cont'>").appendTo("#data");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_container_one = $("<div class='imgs_cont def_cont'>").appendTo(container);
+ var imgs_container_two = $("<div class='imgs_cont def_cont'>").appendTo(container);
+ var all_imgs = $("<div class='all_imgs'>").appendTo(container);
+
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+
+ $("<input type='hidden' name='mask' value='1'/>").appendTo(imgs_container_one);
+ $("<input type='hidden' name='count' value='2'/>").appendTo(imgs_container_one);
+ var tmp_div_one = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container_one);
+ $("<input type='text' class='cat_desc' value='" + sankoreLang.first_desc + "' disabled/>").appendTo(tmp_div_one);
+
+ $("<input type='hidden' name='mask' value='2'/>").appendTo(imgs_container_two);
+ $("<input type='hidden' name='count' value='3'/>").appendTo(imgs_container_two);
+ var tmp_div_two = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container_two);
+ $("<input type='text' class='cat_desc' value='" + sankoreLang.second_desc + "' disabled/>").appendTo(tmp_div_two);
+
+ var img1 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='2'/>").appendTo(img1);
+ $("<img src=\"../../objects/0.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img1);
+ var img2 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='1'/>").appendTo(img2);
+ $("<img src=\"../../objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
+ var img3 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='2'/>").appendTo(img3);
+ $("<img src=\"../../objects/2.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img3);
+ var img4 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='1'/>").appendTo(img4);
+ $("<img src=\"../../objects/3.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img4);
+ var img5 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='2'/>").appendTo(img5);
+ $("<img src=\"../../objects/4.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img5);
+
+ tmp_array.push(img1, img2, img3, img4, img5);
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++){
+ tmp_array[i].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[i].appendTo(all_imgs);
+ }
+ all_imgs.sortable();
+
+ imgs_container_one.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+
+ imgs_container_two.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+
+ all_imgs.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ }
+ });
+}
+
+//function that allows to add new category
+function addCategory(obj){
+ var imgs_container = $("<div class='imgs_cont def_cont'>").insertAfter(obj);
+ $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
+ $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
+ var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+ $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'>").appendTo(tmp_div);
+ $("<button class='del_category'></button>").appendTo(imgs_container);
+ $("<button class='add_category'></button>").appendTo(imgs_container);
+ imgs_container.attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;")
+ .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;")
+ .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);");
+}
+
+//add new container
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
+// $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
+// var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+// $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
+// $("<button class='del_category'></button>").appendTo(imgs_container);
+// $("<button class='add_category'></button>").appendTo(imgs_container);
+// imgs_container.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;")
+// .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;")
+// .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);");
+// container.insertBefore($(".add_block"));
+//}
+
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
+
+//shuffles an array
+function shuffle( arr )
+{
+ var pos, tmp;
+
+ for( var i = 0; i < arr.length; i++ )
+ {
+ pos = Math.round( Math.random() * ( arr.length - 1 ) );
+ tmp = arr[pos];
+ arr[pos] = arr[i];
+ arr[i] = tmp;
+ }
+ return arr;
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
+
+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;
+}
+
+//return id
+function returnId(){
+ var tmp = Math.random().toString();
+ return tmp.substr(2);
+}
+
+//a func for checking when smth will drop
+function checkOnDrop(dest){
+ var tmp_count = dest.find("input[name='count']").val();
+ var tmp_mask = dest.find("input[name='mask']").val();
+ if(dest.find(".img_block").size() == tmp_count){
+ var tmp_right = true;
+ dest.find(".img_block").each(function(){
+ if($(this).find("input").val() != tmp_mask)
+ tmp_right = false;
+ });
+ if(tmp_right)
+ dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont");
+ else
+ dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont");
+ } else
+ dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont");
+}
+
+//checking source on correctness
+function checkCorrectness(source){
+ if(!source.hasClass("all_imgs")){
+ if(source.parent().find(".all_imgs").find(".img_block").size() == 0){
+ source.parent().find(".imgs_cont").each(function(){
+ checkOnDrop($(this))
+ })
+ } else {
+ source.parent().find(".imgs_cont").each(function(){
+ $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont");
+ })
+ }
+ } else {
+ if(source.find(".img_block").size() > 0){
+ source.parent().find(".imgs_cont").each(function(){
+ $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont");
+ })
+ } else {
+ source.parent().find(".imgs_cont").each(function(){
+ checkOnDrop($(this))
+ })
+ }
+ }
+}
+
+function onDropTarget(obj, event) {
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ if(textData.getElementsByTagName("ready")[0].firstChild.textContent == "true"){
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ var img_block = $("<div class='img_block' style='text-align: center;'>");
+ $("<div class='close_img'>").appendTo(img_block);
+ $("<input type='hidden' value='" + $(obj).find("input[name='mask']").val() + "'/>").appendTo(img_block);
+ var tmp_img = $("<img style='display: inline;'/>").attr("src", "../../" + tmp).appendTo(img_block);
+ img_block.draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ $(obj).append(img_block);
+
+ if(tmp_img.height() == 0){
+ var tmp_id = setInterval(function(){
+ if(tmp_img.height() != 0){
+ if(tmp_img.height() >= tmp_img.width())
+ tmp_img.attr("height", "120");
+ else{
+ tmp_img.attr("width","120");
+ var h = tmp_img.height();
+ tmp_img.attr("height",h);
+ tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
+ }
+ clearInterval(tmp_id);
+ }
+ }, 10);
+ } else {
+ if(tmp_img.height() >= tmp_img.width())
+ tmp_img.attr("height", "120");
+ else{
+ tmp_img.attr("width","120");
+ var h = tmp_img.height();
+ tmp_img.attr("height",h);
+ tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
+ }
+ }
+ }
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/fr/img/drop_img.png b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/fr/img/drop_img.png
deleted file mode 100644
index 231d0b2..0000000
Binary files a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/fr/img/drop_img.png and /dev/null differ
diff --git a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/fr/js/script.js b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/fr/js/script.js
index 08afbca..0178c9d 100644
--- a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/fr/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/fr/js/script.js
@@ -19,18 +19,15 @@ var sankoreLang = {
"<p>Le bouton âModifierâ vous permet :</p>"+
"<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun) ,</li>"+
- "<li>de modifier un exercice ou dâen créer de nouveaux dans la même activité.</li></ul>"+
+ "<li>de modifier l'exercice.</li></ul>"+
- "<p>En mode édition, pour créer un nouvel exercice, cliquez sur âNouveau blocâ en bas, une zone bleue apparaît, câest une catégorie, puis</p>"+
- "<ul><li>insérez le nom de la catégorie (par exemple âfruitsâ, âlégumesâ, âmammifèresâ...) en cliquant dans le champ de texte âSaisir le nom de la catégorie ici â¦â,</li>"+
+ "<p>En mode édition :</p>"+
+ "<ul><li>modifiez le nom de la catégorie (par exemple âfruitsâ, âlégumesâ, âmammifèresâ...) en cliquant dans le champ de texte,</li>"+
"<li>insérez des images dans la catégorie par glisser-déposer des images à partir de votre bibliothèque,</li>"+
- "<li>ajoutez ensuite une catégorie (ou plusieurs) en cliquant sur le signe â+â situé à droite de la catégorie, complétez par son nom et ajoutez des images.</li></ul>"+
- "<p>Pour supprimer une image, cliquez sur la croix située dans le coin supérieur droit de lâimage.</p>"+
- "<p>Pour supprimer une catégorie, cliquez sur le signe â-â situé à droite de celle-ci.</p>"+
-
- "<p>Pour supprimer un exercice, cliquez sur la croix à gauche du numéro de lâexercice.</p>"+
-
- "<p>Le bouton âAfficherâ vous permet dâutiliser lâactivité.</p>",
+ "<li>ajoutez ensuite une catégorie (ou plusieurs) en cliquant sur le signe â+â situé à droite de la catégorie, complétez par son nom et ajoutez des images,</li>"+
+ "<li>supprimez une image, en cliquant sur la croix située dans son coin supérieur droit,</li>"+
+ "<li>supprimez une catégorie, en cliquant sur le signe â-â situé à droite de celle-ci,</li>"+
+ "<li>le bouton âAfficherâ vous permet dâutiliser lâactivité.</li></ul>",
theme: "Thème"
};
@@ -106,15 +103,16 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- sankore.enableDropOnWidget(false);
- $(".add_block").remove();
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
var tmp_right = "";
var tmp_array = [];
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".imgs_cont").each(function(){
$(this).find(".del_category").remove();
$(this).find(".add_category").remove();
@@ -176,11 +174,12 @@ function start(){
$(this).addClass("selected");
$("#wgt_display").removeClass("selected");
$("#parameters").css("display","block");
- sankore.enableDropOnWidget(true);
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".imgs_cont").each(function(){
$("<button class='del_category'></button>").appendTo($(this));
$("<button class='add_category'></button>").appendTo($(this));
@@ -206,7 +205,7 @@ function start(){
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -214,9 +213,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
@@ -224,10 +223,10 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -268,7 +267,7 @@ function exportData(){
$(this).find(".img_block").each(function(){
var img_obj = new Object();
img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
img_obj.ht = $(this).find("img").height();
img_obj.wd = $(this).find("img").width();
img_cont.imgs.push(img_obj);
@@ -292,7 +291,7 @@ function exportData(){
$(this).find(".img_block").each(function(){
var img_obj = new Object();
img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
img_obj.ht = $(this).find("img").height();
img_obj.wd = $(this).find("img").width();
img_cont.imgs.push(img_obj);
@@ -303,7 +302,7 @@ function exportData(){
$(this).find(".all_imgs .img_block").each(function(){
var img = new Object();
img.value = $(this).find("input").val();
- img.link = $(this).find("img").attr("src").replace("../../","");
+ img.link = $(this).find("img").attr("src").replace("../../","");
img.ht = $(this).find("img").height();
img.wd = $(this).find("img").width();
cont_obj.all_imgs.push(img);
@@ -318,14 +317,13 @@ function exportData(){
cont_obj.tmp = "clear";
array_to_export.push(cont_obj);
}
-
- sankore.setPreference("categoriser_images", JSON.stringify(array_to_export));
+ if(window.sankore)
+ sankore.setPreference("categoriser_images", JSON.stringify(array_to_export));
}
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].tmp){
changeStyle(data[i].style);
@@ -339,7 +337,7 @@ function importData(data){
var tmp_array = [];
var container = $("<div class='cont'>");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
for(var j in data[i].conts){
var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
@@ -351,7 +349,7 @@ function importData(data){
for(var k in data[i].conts[j].imgs){
var block_img = $("<div class='img_block' style='text-align: center;'></div>");
$("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
- var img = $("<img src=\"../../" + data[i].conts[j].imgs[k].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
+ var img = $("<img src=\"../../" + data[i].conts[j].imgs[k].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
img.height(data[i].conts[j].imgs[k].ht);
if((120 - data[i].conts[j].imgs[k].ht) > 0)
img.css("margin",(120 - data[i].conts[j].imgs[k].ht)/2 + "px 0");
@@ -367,7 +365,7 @@ function importData(data){
checkCorrectness(tmp_ui);
}
}
- });
+ });
}
var all_imgs = $("<div class='all_imgs'>").appendTo(container);
@@ -401,7 +399,7 @@ function importData(data){
} else {
container = $("<div class='cont'>");
sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
+// $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
for(j in data[i].conts){
var tmp_img_array = [];
@@ -439,8 +437,7 @@ function importData(data){
checkCorrectness(tmp_ui);
}
}
- });
- checkCorrectness(imgs_container);
+ });
}
all_imgs = $("<div class='all_imgs'>").appendTo(container);
@@ -498,7 +495,7 @@ function showExample(){
var imgs_container_two = $("<div class='imgs_cont def_cont'>").appendTo(container);
var all_imgs = $("<div class='all_imgs'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
$("<input type='hidden' name='mask' value='1'/>").appendTo(imgs_container_one);
$("<input type='hidden' name='count' value='2'/>").appendTo(imgs_container_one);
@@ -590,33 +587,33 @@ function addCategory(obj){
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
-
- $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
- $("<button class='del_category'></button>").appendTo(imgs_container);
- $("<button class='add_category'></button>").appendTo(imgs_container);
- imgs_container.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);");
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
+// $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
+// var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+// $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
+// $("<button class='del_category'></button>").appendTo(imgs_container);
+// $("<button class='add_category'></button>").appendTo(imgs_container);
+// imgs_container.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;")
+// .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;")
+// .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);");
+// container.insertBefore($(".add_block"));
+//}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
@@ -633,19 +630,6 @@ function shuffle( arr )
return arr;
}
-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;
-}
-
-
//changing the style
function changeStyle(val){
switch(val){
@@ -703,6 +687,18 @@ function changeStyle(val){
}
}
+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;
+}
+
//return id
function returnId(){
var tmp = Math.random().toString();
@@ -798,7 +794,6 @@ function onDropTarget(obj, event) {
}
}
}
- exportData();
}
else {
alert ("Your browser does not support the dataTransfer object.");
diff --git a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/ru/img/drop_img.png b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/ru/img/drop_img.png
deleted file mode 100644
index 2796c02..0000000
Binary files a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/ru/img/drop_img.png and /dev/null differ
diff --git a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/ru/js/script.js b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/ru/js/script.js
index 0684401..ad841e8 100644
--- a/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/ru/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Cat images.wgt/locales/ru/js/script.js
@@ -87,15 +87,16 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- sankore.enableDropOnWidget(false);
- $(".add_block").remove();
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
var tmp_right = "";
var tmp_array = [];
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".imgs_cont").each(function(){
$(this).find(".del_category").remove();
$(this).find(".add_category").remove();
@@ -157,11 +158,12 @@ function start(){
$(this).addClass("selected");
$("#wgt_display").removeClass("selected");
$("#parameters").css("display","block");
- sankore.enableDropOnWidget(true);
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".imgs_cont").each(function(){
$("<button class='del_category'></button>").appendTo($(this));
$("<button class='add_category'></button>").appendTo($(this));
@@ -187,7 +189,7 @@ function start(){
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -195,9 +197,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
@@ -205,10 +207,10 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -249,7 +251,7 @@ function exportData(){
$(this).find(".img_block").each(function(){
var img_obj = new Object();
img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
img_obj.ht = $(this).find("img").height();
img_obj.wd = $(this).find("img").width();
img_cont.imgs.push(img_obj);
@@ -273,7 +275,7 @@ function exportData(){
$(this).find(".img_block").each(function(){
var img_obj = new Object();
img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
img_obj.ht = $(this).find("img").height();
img_obj.wd = $(this).find("img").width();
img_cont.imgs.push(img_obj);
@@ -284,7 +286,7 @@ function exportData(){
$(this).find(".all_imgs .img_block").each(function(){
var img = new Object();
img.value = $(this).find("input").val();
- img.link = $(this).find("img").attr("src").replace("../../","");
+ img.link = $(this).find("img").attr("src").replace("../../","");
img.ht = $(this).find("img").height();
img.wd = $(this).find("img").width();
cont_obj.all_imgs.push(img);
@@ -299,14 +301,13 @@ function exportData(){
cont_obj.tmp = "clear";
array_to_export.push(cont_obj);
}
-
- sankore.setPreference("categoriser_images", JSON.stringify(array_to_export));
+ if(window.sankore)
+ sankore.setPreference("categoriser_images", JSON.stringify(array_to_export));
}
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].tmp){
changeStyle(data[i].style);
@@ -320,7 +321,7 @@ function importData(data){
var tmp_array = [];
var container = $("<div class='cont'>");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
for(var j in data[i].conts){
var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
@@ -332,7 +333,7 @@ function importData(data){
for(var k in data[i].conts[j].imgs){
var block_img = $("<div class='img_block' style='text-align: center;'></div>");
$("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
- var img = $("<img src=\"../../" + data[i].conts[j].imgs[k].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
+ var img = $("<img src=\"../../" + data[i].conts[j].imgs[k].link + "\" style=\"display: inline;\"/>").appendTo(block_img);
img.height(data[i].conts[j].imgs[k].ht);
if((120 - data[i].conts[j].imgs[k].ht) > 0)
img.css("margin",(120 - data[i].conts[j].imgs[k].ht)/2 + "px 0");
@@ -348,7 +349,7 @@ function importData(data){
checkCorrectness(tmp_ui);
}
}
- });
+ });
}
var all_imgs = $("<div class='all_imgs'>").appendTo(container);
@@ -382,7 +383,7 @@ function importData(data){
} else {
container = $("<div class='cont'>");
sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
+// $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
for(j in data[i].conts){
var tmp_img_array = [];
@@ -420,8 +421,7 @@ function importData(data){
checkCorrectness(tmp_ui);
}
}
- });
- checkCorrectness(imgs_container);
+ });
}
all_imgs = $("<div class='all_imgs'>").appendTo(container);
@@ -479,7 +479,7 @@ function showExample(){
var imgs_container_two = $("<div class='imgs_cont def_cont'>").appendTo(container);
var all_imgs = $("<div class='all_imgs'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
$("<input type='hidden' name='mask' value='1'/>").appendTo(imgs_container_one);
$("<input type='hidden' name='count' value='2'/>").appendTo(imgs_container_one);
@@ -571,33 +571,33 @@ function addCategory(obj){
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
-
- $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
- $("<button class='del_category'></button>").appendTo(imgs_container);
- $("<button class='add_category'></button>").appendTo(imgs_container);
- imgs_container.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);");
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
+// $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
+// var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+// $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
+// $("<button class='del_category'></button>").appendTo(imgs_container);
+// $("<button class='add_category'></button>").appendTo(imgs_container);
+// imgs_container.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).css(\"background-color\",\"#e6f6ff\"); return false;")
+// .attr("ondragover", "$(this).css(\"background-color\",\"#c3e9ff\"); return false;")
+// .attr("ondrop", "$(this).css(\"background-color\",\"#e6f6ff\"); return onDropTarget(this,event);");
+// container.insertBefore($(".add_block"));
+//}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
@@ -614,19 +614,6 @@ function shuffle( arr )
return arr;
}
-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;
-}
-
-
//changing the style
function changeStyle(val){
switch(val){
@@ -684,6 +671,18 @@ function changeStyle(val){
}
}
+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;
+}
+
//return id
function returnId(){
var tmp = Math.random().toString();
@@ -779,7 +778,6 @@ function onDropTarget(obj, event) {
}
}
}
- exportData();
}
else {
alert ("Your browser does not support the dataTransfer object.");
@@ -792,4 +790,4 @@ function onDropTarget(obj, event) {
event.cancelBubble = true;
}
return false;
-}
\ No newline at end of file
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/config.xml
index 10d1fb0..9c4ca87 100644
--- a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/config.xml
@@ -4,8 +4,8 @@
id="http://uniboard.mnemis.com/widgets/notes"
version="1.2"
width="990"
- height="560"
- ub:resizable="true">
+ height="600"
+ ub:resizable="false">
<name>Notes</name>
<author href="http://www.getuniboard.com"
diff --git a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/index.html
index e79952a..cc33b21 100644
--- a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/index.html
@@ -3,86 +3,30 @@
<head>
<title>D'n'd</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- start();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- start();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url:'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="data">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/js/script.js b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/js/script.js
deleted file mode 100644
index da40ece..0000000
--- a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/js/script.js
+++ /dev/null
@@ -1,750 +0,0 @@
-var sankoreLang = {
- display: "Display",
- edit: "Edit",
- first_desc: "Fruits",
- second_desc: "Vegetables",
- potatoes: "Potato",
- carrot: "Carrot",
- onion: "Onion",
- apple: "Apple",
- pear: "Pear",
- enter: "Enter your category name here ...",
- add: "Add new block",
- text: "Some text",
- wgt_name: "Categorize text",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p><h2>Categorize text</h2></p>" +
-"<p><h3>Sort labels according to the name of the category</h3></p>" +
-"<p>Drag and drop labels in the corresponding category. All pictures should be placed to get a feed back from interactivity. If the result is incorrect, the area turns in red. If the result is correct, the area turns in green.</p>" +
-"<p>âReloadâ button resets the exercises.</p>" +
-"<p>Enter the âEditâ mode to :</p>" +
-"<ul><li>choose the theme of interactivity : pad, slate or none (none by default),</li>" +
-"<li>modify an exercise or create a new one.</li></ul>" +
-"<p>To create a new exercise :</p>" +
-"<ul><li>click on âNew blockâ,</li>" +
-"<li>edit the category clicking on the text field âEnter your category name here ... â,</li>" +
-"<li>add an another category clicking on the â+â (small one),</li>" +
-"<li>add a label clicking on the â+â (big one) on the correct category,</li>" +
-"<li>modify the text field clicking on it.</li></ul>" +
-"<p>To remove a label, click on the cross button on the frame.</p>" +
-"<p>To delete a category, click on the â-â sign on the right.</p>" +
-"<p>To delete a whole block, click on the cross on the left.</p>" +
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-//main function
-function start(){
-
- $("#wgt_display").text(sankoreLang.display);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_name").text(sankoreLang.wgt_name);
- $("#wgt_reload").text(sankoreLang.reload);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- if(window.sankore){
- if(sankore.preference("categoriser_text","")){
- var data = jQuery.parseJSON(sankore.preference("categoriser_text",""));
- importData(data);
- } else {
- showExample();
- }
- }
- else
- showExample();
-
- if (window.widget) {
- window.widget.onleave = function(){
- exportData();
- }
- }
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").slideUp("100", function(){
- tmp.removeClass("open");
- $("#data").show();
- });
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- $("#data").hide();
- $("#help").slideDown("100", function(){
- tmp.addClass("open");
- });
- }
- });
-
- $("#wgt_reload").click(function(){
- if($("#wgt_display").hasClass("selected")){
- $("#wgt_edit").trigger("click");
- $("#wgt_display").trigger("click");
- } else {
- $("#wgt_display").trigger("click");
- }
- });
-
- $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
- exportData();
- });
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display","none");
- $(".add_block").remove();
- $(".cont").each(function(){
- var container = $(this);
- var tmp_i = 0;
- var tmp_right = "";
- var tmp_array = [];
-
- container.find(".close_cont").remove();
- container.find(".imgs_cont").each(function(){
- $(this).find(".del_category").remove();
- $(this).find(".add_img").remove();
- $(this).find(".add_category").remove();
- $(this).removeAttr("ondragenter")
- .removeAttr("ondragleave")
- .removeAttr("ondragover")
- .removeAttr("ondrop")
- .find(".cat_desc").attr("disabled","disabled");
- var tmp_count = $(this).find(".img_block").size();
- $(this).find("input[name='count']").val(tmp_count);
- $(this).find(".img_block").each(function(){
- $(this).find(".close_img").remove();
- var tmp_text = $(this).find(".text_cont");
- tmp_text.removeAttr("contenteditable")
- .css("margin", ($(this).height() - tmp_text.height())/2 + "px 0px");
- tmp_array.push($(this));
- $(this).remove();
- });
- $(this).droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
- $(this).removeAttr("style");
- });
-
- var all_imgs = $("<div class='all_imgs'>").appendTo(container);
-
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++){
- tmp_array[i].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[i].appendTo(all_imgs);
- }
-
- all_imgs.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- }
- });
- });
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- }
- } else {
- if(!$(this).hasClass("selected")){
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
- $(".cont").each(function(){
- var container = $(this);
-
- $("<div class='close_cont'>").appendTo(container);
- container.find(".imgs_cont").each(function(){
- $("<button class='del_category'></button>").appendTo($(this));
- $("<button class='add_category'></button>").appendTo($(this));
- $(this).removeClass("red_cont")
- .removeClass("green_cont")
- .addClass("def_cont")
- .droppable("destroy")
- .find(".cat_desc").removeAttr("disabled");
- var tmp_img_cont = $(this);
- var tmp_mask = $(this).find("input[name='mask']").val();
- container.find(".img_block").each(function(){
- $(this).draggable("destroy")
- .find(".text_cont").attr("contenteditable","true")
- .removeAttr("style");
- if($(this).find("input").val() == tmp_mask){
- $("<div class='close_img'>").appendTo($(this));
- $(this).appendTo(tmp_img_cont);
- }
- });
- $("<div class='add_img'>").appendTo($(this));
- });
- container.find(".all_imgs").remove();
- });
-
-
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- }
- }
- });
-
- //add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
-
- //adding new img
- $(".add_img").live("click", function(){
- addText($(this).parent(), $(this));
- });
-
- //deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
-
- //deleting the img block
- $(".close_img").live("click", function(){
- $(this).parent().remove();
- });
-
- //adding new category
- $(".add_category").live("click",function(){
- addCategory($(this).parent());
- });
-
- //deleting the category
- $(".del_category").live("click",function(){
- if($(this).parent().parent().find(".imgs_cont").size() == 1){
- $(this).parent().find(".img_block").remove();
- $(this).parent().find(".cat_desc").val(sankoreLang.enter);
- } else {
- $(this).parent().remove();
- }
- });
-}
-
-//export
-function exportData(){
- var array_to_export = [];
- if($("#wgt_edit").hasClass("selected")){
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.mode = "edit";
- cont_obj.conts = [];
- $(this).find(".imgs_cont").each(function(){
- var img_cont = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- img_cont.mask = $(this).find("input[name='mask']").val();
- img_cont.count = $(this).find(".img_block").size();
- img_cont.text = $(this).find(".cat_desc").val();
- img_cont.imgs = [];
- $(this).find(".img_block").each(function(){
- var img_obj = new Object();
- img_obj.value = $(this).find("input").val();
- img_obj.text = $(this).find(".text_cont").text();
- img_cont.imgs.push(img_obj);
- });
- cont_obj.conts.push(img_cont);
- });
- array_to_export.push(cont_obj);
- });
- } else {
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.mode = "display";
- cont_obj.conts = [];
- $(this).find(".imgs_cont").each(function(){
- var img_cont = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- img_cont.mask = $(this).find("input[name='mask']").val();
- img_cont.count = $(this).find("input[name='count']").val();
- img_cont.text = $(this).find(".cat_desc").val();
- img_cont.imgs = [];
- $(this).find(".img_block").each(function(){
- var img_obj = new Object();
- img_obj.value = $(this).find("input").val();
- img_obj.text = $(this).find(".text_cont").text();
- img_cont.imgs.push(img_obj);
- });
- cont_obj.conts.push(img_cont);
- });
- cont_obj.all_imgs = [];
- $(this).find(".all_imgs .img_block").each(function(){
- var img = new Object();
- img.value = $(this).find("input").val();
- img.text = $(this).find(".text_cont").text();
- cont_obj.all_imgs.push(img);
- });
- array_to_export.push(cont_obj);
- });
- }
-
- if($(".cont").size() == 0){
- var cont_obj = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- cont_obj.tmp = "clear";
- array_to_export.push(cont_obj);
- }
- if(window.sankore)
- sankore.setPreference("categoriser_text", JSON.stringify(array_to_export));
-}
-
-//import
-function importData(data){
-
- var tmp = 0;
- for(var i in data){
- if(data[i].tmp){
- changeStyle(data[i].style);
- $("#style_select").val(data[i].style);
- }
- else {
- if(i == 0){
- changeStyle(data[i].style);
- $("#style_select").val(data[i].style);
- }
- if(data[i].mode == "edit"){
- var tmp_array = [];
- var container = $("<div class='cont'>").appendTo("#data");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
-
- for(var j in data[i].conts){
- var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
-
- $("<input type='hidden' name='mask' value='" + data[i].conts[j].mask + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value='" + data[i].conts[j].count + "'/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + data[i].conts[j].text + "' disabled/>").appendTo(tmp_div);
- for(var k in data[i].conts[j].imgs){
- var block_img = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
- $("<div class='text_cont'>" + data[i].conts[j].imgs[k].text + "</div>").appendTo(block_img);
- tmp_array.push(block_img);
- }
-
- imgs_container.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
- }
-
- var all_imgs = $("<div class='all_imgs'>").appendTo(container);
-
- tmp_array = shuffle(tmp_array);
- for(j in tmp_array){
- tmp_array[j].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[j].appendTo(all_imgs);
- var tmp_text = tmp_array[j].find(".text_cont");
- tmp_text.css("margin", (tmp_array[j].height() - tmp_text.height())/2 + "px 0px");
- }
-
- all_imgs.sortable();
-
- all_imgs.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- }
- });
- } else {
- container = $("<div class='cont'>").appendTo("#data");
- sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
-
- for(j in data[i].conts){
- var tmp_img_array = [];
- imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
- $("<input type='hidden' name='mask' value='" + data[i].conts[j].mask + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value='" + data[i].conts[j].count + "'/>").appendTo(imgs_container);
- tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + data[i].conts[j].text + "' disabled/>").appendTo(tmp_div);
- for(k in data[i].conts[j].imgs){
- block_img = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
- $("<div class='text_cont'>" + data[i].conts[j].imgs[k].text + "</div>").appendTo(block_img);
- tmp_img_array.push(block_img);
- }
-
- tmp_img_array = shuffle(tmp_img_array);
- for(k in tmp_img_array){
- tmp_img_array[k].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_img_array[k].appendTo(imgs_container);
- tmp_text = tmp_img_array[k].find(".text_cont");
- tmp_text.css("margin", (tmp_img_array[k].height() - tmp_text.height())/2 + "px 0px");
- }
-
- imgs_container.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
- }
-
- all_imgs = $("<div class='all_imgs'>").appendTo(container);
- var all_imgs_arr = [];
- for(j in data[i].all_imgs){
- block_img = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='" + data[i].all_imgs[j].value + "'/>").appendTo(block_img);
- $("<div class='text_cont'>" + data[i].all_imgs[j].text + "</div>").appendTo(block_img);
- all_imgs_arr.push(block_img);
- }
-
- all_imgs_arr = shuffle(all_imgs_arr);
- for(k in all_imgs_arr){
- all_imgs_arr[k].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- all_imgs_arr[k].appendTo(all_imgs);
- tmp_text = all_imgs_arr[k].find(".text_cont");
- tmp_text.css("margin", (all_imgs_arr[k].height() - tmp_text.height())/2 + "px 0px");
- }
-
- all_imgs.sortable();
-
- all_imgs.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- }
- });
- checkCorrectness(all_imgs);
- }
- }
- }
-}
-
-//example
-function showExample(){
-
- changeStyle("3");
- var tmp_array = [];
-
- var container = $("<div class='cont'>").appendTo("#data");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container_one = $("<div class='imgs_cont def_cont'>").appendTo(container);
- var imgs_container_two = $("<div class='imgs_cont def_cont'>").appendTo(container);
- var all_imgs = $("<div class='all_imgs'>").appendTo(container);
-
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
-
- $("<input type='hidden' name='mask' value='1'/>").appendTo(imgs_container_one);
- $("<input type='hidden' name='count' value='2'/>").appendTo(imgs_container_one);
- var tmp_div_one = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container_one);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.first_desc + "' disabled/>").appendTo(tmp_div_one);
-
- $("<input type='hidden' name='mask' value='2'/>").appendTo(imgs_container_two);
- $("<input type='hidden' name='count' value='3'/>").appendTo(imgs_container_two);
- var tmp_div_two = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container_two);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.second_desc + "' disabled/>").appendTo(tmp_div_two);
-
- var text1 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='2'/>").appendTo(text1);
- $("<div class='text_cont'>" + sankoreLang.potatoes + "</div>").appendTo(text1);
- var text2 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='1'/>").appendTo(text2);
- $("<div class='text_cont'>" + sankoreLang.apple + "</div>").appendTo(text2);
- var text3 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='2'/>").appendTo(text3);
- $("<div class='text_cont'>" + sankoreLang.carrot + "</div>").appendTo(text3);
- var text4 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='1'/>").appendTo(text4);
- $("<div class='text_cont'>" + sankoreLang.pear + "</div>").appendTo(text4);
- var text5 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='2'/>").appendTo(text5);
- $("<div class='text_cont'>" + sankoreLang.onion + "</div>").appendTo(text5);
-
- tmp_array.push(text1, text2, text3, text4, text5);
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++){
- tmp_array[i].draggable({
- helper:'clone',
- zIndex:100,
- appendTo: '#data'
- });
- tmp_array[i].find(".text_cont").css("margin", "21px 0px");
- tmp_array[i].appendTo(all_imgs);
- }
- all_imgs.sortable();
-
- imgs_container_one.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
-
- imgs_container_two.droppable({
- hoverClass: 'dropHere',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- });
-
- all_imgs.droppable({
- hoverClass: 'dropBack',
- drop: function(event, ui) {
- if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
- if(this != $(ui.draggable).parent()[0]){
- var tmp_ui = $(ui.draggable).parent();
- $(this).append($(ui.draggable));
- checkCorrectness(tmp_ui);
- }
- }
- }
- });
-}
-
-//add text block
-function addText(dest, source){
-
- var text_block = $("<div class='img_block' style='text-align: center;'>").insertBefore(source);
- $("<div class='close_img'>").appendTo(text_block);
- $("<input type='hidden' value='" + dest.find("input[name='mask']").val() + "'/>").appendTo(text_block);
- $("<div class='text_cont' contenteditable='true'>" + sankoreLang.text + "</div>").appendTo(text_block);
-}
-
-//function that allows to add new category
-function addCategory(obj){
- var imgs_container = $("<div class='imgs_cont def_cont'>").insertAfter(obj);
- $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'>").appendTo(tmp_div);
- $("<button class='del_category'></button>").appendTo(imgs_container);
- $("<button class='add_category'></button>").appendTo(imgs_container);
- $("<div class='add_img'>").appendTo(imgs_container);
-}
-
-//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
-
- $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
- $("<button class='del_category'></button>").appendTo(imgs_container);
- $("<button class='add_category'></button>").appendTo(imgs_container);
- $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
-
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
-
-//shuffles an array
-function shuffle( arr )
-{
- var pos, tmp;
-
- for( var i = 0; i < arr.length; i++ )
- {
- pos = Math.round( Math.random() * ( arr.length - 1 ) );
- tmp = arr[pos];
- arr[pos] = arr[i];
- arr[i] = tmp;
- }
- return arr;
-}
-
-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;
-}
-
-//return id
-function returnId(){
- var tmp = Math.random().toString();
- return tmp.substr(2);
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
-
-//a func for checking when smth will drop
-function checkOnDrop(dest){
- var tmp_count = dest.find("input[name='count']").val();
- var tmp_mask = dest.find("input[name='mask']").val();
- if(dest.find(".img_block").size() == tmp_count){
- var tmp_right = true;
- dest.find(".img_block").each(function(){
- if($(this).find("input").val() != tmp_mask)
- tmp_right = false;
- });
- if(tmp_right)
- dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont");
- else
- dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont");
- } else
- dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont");
-}
-
-//checking source on correctness
-function checkCorrectness(source){
- if(!source.hasClass("all_imgs")){
- if(source.parent().find(".all_imgs").find(".img_block").size() == 0){
- source.parent().find(".imgs_cont").each(function(){
- checkOnDrop($(this))
- })
- } else {
- source.parent().find(".imgs_cont").each(function(){
- $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont");
- })
- }
- } else {
- if(source.find(".img_block").size() > 0){
- source.parent().find(".imgs_cont").each(function(){
- $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont");
- })
- } else {
- source.parent().find(".imgs_cont").each(function(){
- checkOnDrop($(this))
- })
- }
- }
-}
diff --git a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/en/index.html
new file mode 100644
index 0000000..d5a03e2
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/en/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>D'n'd</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../js/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="../../js/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="js/script.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ start();
+ });
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="data">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/en/js/script.js b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/en/js/script.js
new file mode 100644
index 0000000..c5e1847
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/en/js/script.js
@@ -0,0 +1,747 @@
+var sankoreLang = {
+ display: "Display",
+ edit: "Edit",
+ first_desc: "Fruits",
+ second_desc: "Vegetables",
+ potatoes: "Potato",
+ carrot: "Carrot",
+ onion: "Onion",
+ apple: "Apple",
+ pear: "Pear",
+ enter: "Enter your category name here ...",
+ add: "Add new block",
+ text: "Some text",
+ wgt_name: "Categorize text",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p><h2>Categorize text</h2></p>" +
+"<p><h3>Sort labels according to the name of the category</h3></p>" +
+"<p>Drag and drop labels in the corresponding category. All pictures should be placed to get a feed back from interactivity. If the result is incorrect, the area turns in red. If the result is correct, the area turns in green.</p>" +
+"<p>âReloadâ button resets the exercises.</p>" +
+"<p>Enter the âEditâ mode to :</p>" +
+"<ul><li>choose the theme of interactivity : pad, slate or none (none by default),</li>" +
+"<li>modify the exercise.</li></ul>" +
+"<p>In edition mode :</p>" +
+"<ul><li>edit the category clicking on the text field,</li>" +
+"<li>add an another category clicking on the â+â (small one),</li>" +
+"<li>add a label clicking on the â+â (big one) on the correct category,</li>" +
+"<li>modify the text field clicking on it,</li>" +
+"<li>remove a label clicking on the cross button on the frame,</li>" +
+"<li>delete a category clicking on the â-â sign on the right,</li>" +
+"<li>âDisplayâ button comes back to the activity.</li></ul>",
+ theme: "Theme"
+};
+
+//main function
+function start(){
+
+ $("#wgt_display").text(sankoreLang.display);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_name").text(sankoreLang.wgt_name);
+ $("#wgt_reload").text(sankoreLang.reload);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ if(window.sankore){
+ if(sankore.preference("categoriser_text","")){
+ var data = jQuery.parseJSON(sankore.preference("categoriser_text",""));
+ importData(data);
+ } else {
+ showExample();
+ }
+ }
+ else
+ showExample();
+
+ if (window.widget) {
+ window.widget.onleave = function(){
+ exportData();
+ }
+ }
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").slideUp("100", function(){
+ tmp.removeClass("open");
+ $("#data").show();
+ });
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ $("#data").hide();
+ $("#help").slideDown("100", function(){
+ tmp.addClass("open");
+ });
+ }
+ });
+
+ $("#wgt_reload").click(function(){
+ if($("#wgt_display").hasClass("selected")){
+ $("#wgt_edit").trigger("click");
+ $("#wgt_display").trigger("click");
+ } else {
+ $("#wgt_display").trigger("click");
+ }
+ });
+
+ $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
+ exportData();
+ });
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display","none");
+// $(".add_block").remove();
+ $(".cont").each(function(){
+ var container = $(this);
+ var tmp_i = 0;
+ var tmp_right = "";
+ var tmp_array = [];
+
+// container.find(".close_cont").remove();
+ container.find(".imgs_cont").each(function(){
+ $(this).find(".del_category").remove();
+ $(this).find(".add_img").remove();
+ $(this).find(".add_category").remove();
+ $(this).removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop")
+ .find(".cat_desc").attr("disabled","disabled");
+ var tmp_count = $(this).find(".img_block").size();
+ $(this).find("input[name='count']").val(tmp_count);
+ $(this).find(".img_block").each(function(){
+ $(this).find(".close_img").remove();
+ var tmp_text = $(this).find(".text_cont");
+ tmp_text.removeAttr("contenteditable")
+ .css("margin", ($(this).height() - tmp_text.height())/2 + "px 0px");
+ tmp_array.push($(this));
+ $(this).remove();
+ });
+ $(this).droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+ $(this).removeAttr("style");
+ });
+
+ var all_imgs = $("<div class='all_imgs'>").appendTo(container);
+
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++){
+ tmp_array[i].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[i].appendTo(all_imgs);
+ }
+
+ all_imgs.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ }
+ });
+ });
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display","block");
+ $(".cont").each(function(){
+ var container = $(this);
+
+// $("<div class='close_cont'>").appendTo(container);
+ container.find(".imgs_cont").each(function(){
+ $("<button class='del_category'></button>").appendTo($(this));
+ $("<button class='add_category'></button>").appendTo($(this));
+ $(this).removeClass("red_cont")
+ .removeClass("green_cont")
+ .addClass("def_cont")
+ .droppable("destroy")
+ .find(".cat_desc").removeAttr("disabled");
+ var tmp_img_cont = $(this);
+ var tmp_mask = $(this).find("input[name='mask']").val();
+ container.find(".img_block").each(function(){
+ $(this).draggable("destroy")
+ .find(".text_cont").attr("contenteditable","true")
+ .removeAttr("style");
+ if($(this).find("input").val() == tmp_mask){
+ $("<div class='close_img'>").appendTo($(this));
+ $(this).appendTo(tmp_img_cont);
+ }
+ });
+ $("<div class='add_img'>").appendTo($(this));
+ });
+ container.find(".all_imgs").remove();
+ });
+
+
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ }
+ }
+ });
+
+// //add new block
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
+
+ //adding new img
+ $(".add_img").live("click", function(){
+ addText($(this).parent(), $(this));
+ });
+
+// //deleting a block
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
+
+ //deleting the img block
+ $(".close_img").live("click", function(){
+ $(this).parent().remove();
+ });
+
+ //adding new category
+ $(".add_category").live("click",function(){
+ addCategory($(this).parent());
+ });
+
+ //deleting the category
+ $(".del_category").live("click",function(){
+ if($(this).parent().parent().find(".imgs_cont").size() == 1){
+ $(this).parent().find(".img_block").remove();
+ $(this).parent().find(".cat_desc").val(sankoreLang.enter);
+ } else {
+ $(this).parent().remove();
+ }
+ });
+}
+
+//export
+function exportData(){
+ var array_to_export = [];
+ if($("#wgt_edit").hasClass("selected")){
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.mode = "edit";
+ cont_obj.conts = [];
+ $(this).find(".imgs_cont").each(function(){
+ var img_cont = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ img_cont.mask = $(this).find("input[name='mask']").val();
+ img_cont.count = $(this).find(".img_block").size();
+ img_cont.text = $(this).find(".cat_desc").val();
+ img_cont.imgs = [];
+ $(this).find(".img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.text = $(this).find(".text_cont").text();
+ img_cont.imgs.push(img_obj);
+ });
+ cont_obj.conts.push(img_cont);
+ });
+ array_to_export.push(cont_obj);
+ });
+ } else {
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.mode = "display";
+ cont_obj.conts = [];
+ $(this).find(".imgs_cont").each(function(){
+ var img_cont = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ img_cont.mask = $(this).find("input[name='mask']").val();
+ img_cont.count = $(this).find("input[name='count']").val();
+ img_cont.text = $(this).find(".cat_desc").val();
+ img_cont.imgs = [];
+ $(this).find(".img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.text = $(this).find(".text_cont").text();
+ img_cont.imgs.push(img_obj);
+ });
+ cont_obj.conts.push(img_cont);
+ });
+ cont_obj.all_imgs = [];
+ $(this).find(".all_imgs .img_block").each(function(){
+ var img = new Object();
+ img.value = $(this).find("input").val();
+ img.text = $(this).find(".text_cont").text();
+ cont_obj.all_imgs.push(img);
+ });
+ array_to_export.push(cont_obj);
+ });
+ }
+
+ if($(".cont").size() == 0){
+ var cont_obj = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ cont_obj.tmp = "clear";
+ array_to_export.push(cont_obj);
+ }
+ if(window.sankore)
+ sankore.setPreference("categoriser_text", JSON.stringify(array_to_export));
+}
+
+//import
+function importData(data){
+
+ for(var i in data){
+ if(data[i].tmp){
+ changeStyle(data[i].style);
+ $("#style_select").val(data[i].style);
+ }
+ else {
+ if(i == 0){
+ changeStyle(data[i].style);
+ $("#style_select").val(data[i].style);
+ }
+ if(data[i].mode == "edit"){
+ var tmp_array = [];
+ var container = $("<div class='cont'>").appendTo("#data");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+
+ for(var j in data[i].conts){
+ var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+
+ $("<input type='hidden' name='mask' value='" + data[i].conts[j].mask + "'/>").appendTo(imgs_container);
+ $("<input type='hidden' name='count' value='" + data[i].conts[j].count + "'/>").appendTo(imgs_container);
+ var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+ $("<input type='text' class='cat_desc' value='" + data[i].conts[j].text + "' disabled/>").appendTo(tmp_div);
+ for(var k in data[i].conts[j].imgs){
+ var block_img = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
+ $("<div class='text_cont'>" + data[i].conts[j].imgs[k].text + "</div>").appendTo(block_img);
+ tmp_array.push(block_img);
+ }
+
+ imgs_container.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+ }
+
+ var all_imgs = $("<div class='all_imgs'>").appendTo(container);
+
+ tmp_array = shuffle(tmp_array);
+ for(j in tmp_array){
+ tmp_array[j].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[j].appendTo(all_imgs);
+ var tmp_text = tmp_array[j].find(".text_cont");
+ tmp_text.css("margin", (tmp_array[j].height() - tmp_text.height())/2 + "px 0px");
+ }
+
+ all_imgs.sortable();
+
+ all_imgs.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ }
+ });
+ } else {
+ container = $("<div class='cont'>").appendTo("#data");
+ sub_container = $("<div class='sub_cont'>").appendTo(container);
+// $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
+
+ for(j in data[i].conts){
+ var tmp_img_array = [];
+ imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+ $("<input type='hidden' name='mask' value='" + data[i].conts[j].mask + "'/>").appendTo(imgs_container);
+ $("<input type='hidden' name='count' value='" + data[i].conts[j].count + "'/>").appendTo(imgs_container);
+ tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+ $("<input type='text' class='cat_desc' value='" + data[i].conts[j].text + "' disabled/>").appendTo(tmp_div);
+ for(k in data[i].conts[j].imgs){
+ block_img = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='" + data[i].conts[j].imgs[k].value + "'/>").appendTo(block_img);
+ $("<div class='text_cont'>" + data[i].conts[j].imgs[k].text + "</div>").appendTo(block_img);
+ tmp_img_array.push(block_img);
+ }
+
+ tmp_img_array = shuffle(tmp_img_array);
+ for(k in tmp_img_array){
+ tmp_img_array[k].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_img_array[k].appendTo(imgs_container);
+ tmp_text = tmp_img_array[k].find(".text_cont");
+ tmp_text.css("margin", (tmp_img_array[k].height() - tmp_text.height())/2 + "px 0px");
+ }
+
+ imgs_container.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+ }
+
+ all_imgs = $("<div class='all_imgs'>").appendTo(container);
+ var all_imgs_arr = [];
+ for(j in data[i].all_imgs){
+ block_img = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='" + data[i].all_imgs[j].value + "'/>").appendTo(block_img);
+ $("<div class='text_cont'>" + data[i].all_imgs[j].text + "</div>").appendTo(block_img);
+ all_imgs_arr.push(block_img);
+ }
+
+ all_imgs_arr = shuffle(all_imgs_arr);
+ for(k in all_imgs_arr){
+ all_imgs_arr[k].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ all_imgs_arr[k].appendTo(all_imgs);
+ tmp_text = all_imgs_arr[k].find(".text_cont");
+ tmp_text.css("margin", (all_imgs_arr[k].height() - tmp_text.height())/2 + "px 0px");
+ }
+
+ all_imgs.sortable();
+
+ all_imgs.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ }
+ });
+ checkCorrectness(all_imgs);
+ }
+ }
+ }
+}
+
+//example
+function showExample(){
+
+ changeStyle("3");
+ var tmp_array = [];
+
+ var container = $("<div class='cont'>").appendTo("#data");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_container_one = $("<div class='imgs_cont def_cont'>").appendTo(container);
+ var imgs_container_two = $("<div class='imgs_cont def_cont'>").appendTo(container);
+ var all_imgs = $("<div class='all_imgs'>").appendTo(container);
+
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+
+ $("<input type='hidden' name='mask' value='1'/>").appendTo(imgs_container_one);
+ $("<input type='hidden' name='count' value='2'/>").appendTo(imgs_container_one);
+ var tmp_div_one = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container_one);
+ $("<input type='text' class='cat_desc' value='" + sankoreLang.first_desc + "' disabled/>").appendTo(tmp_div_one);
+
+ $("<input type='hidden' name='mask' value='2'/>").appendTo(imgs_container_two);
+ $("<input type='hidden' name='count' value='3'/>").appendTo(imgs_container_two);
+ var tmp_div_two = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container_two);
+ $("<input type='text' class='cat_desc' value='" + sankoreLang.second_desc + "' disabled/>").appendTo(tmp_div_two);
+
+ var text1 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='2'/>").appendTo(text1);
+ $("<div class='text_cont'>" + sankoreLang.potatoes + "</div>").appendTo(text1);
+ var text2 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='1'/>").appendTo(text2);
+ $("<div class='text_cont'>" + sankoreLang.apple + "</div>").appendTo(text2);
+ var text3 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='2'/>").appendTo(text3);
+ $("<div class='text_cont'>" + sankoreLang.carrot + "</div>").appendTo(text3);
+ var text4 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='1'/>").appendTo(text4);
+ $("<div class='text_cont'>" + sankoreLang.pear + "</div>").appendTo(text4);
+ var text5 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='2'/>").appendTo(text5);
+ $("<div class='text_cont'>" + sankoreLang.onion + "</div>").appendTo(text5);
+
+ tmp_array.push(text1, text2, text3, text4, text5);
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++){
+ tmp_array[i].draggable({
+ helper:'clone',
+ zIndex:100,
+ appendTo: '#data'
+ });
+ tmp_array[i].find(".text_cont").css("margin", "21px 0px");
+ tmp_array[i].appendTo(all_imgs);
+ }
+ all_imgs.sortable();
+
+ imgs_container_one.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+
+ imgs_container_two.droppable({
+ hoverClass: 'dropHere',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ });
+
+ all_imgs.droppable({
+ hoverClass: 'dropBack',
+ drop: function(event, ui) {
+ if($(ui.draggable).parent().parent().html() == $(this).parent().html()){
+ if(this != $(ui.draggable).parent()[0]){
+ var tmp_ui = $(ui.draggable).parent();
+ $(this).append($(ui.draggable));
+ checkCorrectness(tmp_ui);
+ }
+ }
+ }
+ });
+}
+
+//add text block
+function addText(dest, source){
+
+ var text_block = $("<div class='img_block' style='text-align: center;'>").insertBefore(source);
+ $("<div class='close_img'>").appendTo(text_block);
+ $("<input type='hidden' value='" + dest.find("input[name='mask']").val() + "'/>").appendTo(text_block);
+ $("<div class='text_cont' contenteditable='true'>" + sankoreLang.text + "</div>").appendTo(text_block);
+}
+
+//function that allows to add new category
+function addCategory(obj){
+ var imgs_container = $("<div class='imgs_cont def_cont'>").insertAfter(obj);
+ $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
+ $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
+ var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+ $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'>").appendTo(tmp_div);
+ $("<button class='del_category'></button>").appendTo(imgs_container);
+ $("<button class='add_category'></button>").appendTo(imgs_container);
+ $("<div class='add_img'>").appendTo(imgs_container);
+}
+
+//add new container
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
+// $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
+// var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+// $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
+// $("<button class='del_category'></button>").appendTo(imgs_container);
+// $("<button class='add_category'></button>").appendTo(imgs_container);
+// $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
+
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
+
+//shuffles an array
+function shuffle( arr )
+{
+ var pos, tmp;
+
+ for( var i = 0; i < arr.length; i++ )
+ {
+ pos = Math.round( Math.random() * ( arr.length - 1 ) );
+ tmp = arr[pos];
+ arr[pos] = arr[i];
+ arr[i] = tmp;
+ }
+ return arr;
+}
+
+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;
+}
+
+//return id
+function returnId(){
+ var tmp = Math.random().toString();
+ return tmp.substr(2);
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
+
+//a func for checking when smth will drop
+function checkOnDrop(dest){
+ var tmp_count = dest.find("input[name='count']").val();
+ var tmp_mask = dest.find("input[name='mask']").val();
+ if(dest.find(".img_block").size() == tmp_count){
+ var tmp_right = true;
+ dest.find(".img_block").each(function(){
+ if($(this).find("input").val() != tmp_mask)
+ tmp_right = false;
+ });
+ if(tmp_right)
+ dest.removeClass("def_cont").removeClass("red_cont").addClass("green_cont");
+ else
+ dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont");
+ } else
+ dest.removeClass("def_cont").removeClass("green_cont").addClass("red_cont");
+}
+
+//checking source on correctness
+function checkCorrectness(source){
+ if(!source.hasClass("all_imgs")){
+ if(source.parent().find(".all_imgs").find(".img_block").size() == 0){
+ source.parent().find(".imgs_cont").each(function(){
+ checkOnDrop($(this))
+ })
+ } else {
+ source.parent().find(".imgs_cont").each(function(){
+ $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont");
+ })
+ }
+ } else {
+ if(source.find(".img_block").size() > 0){
+ source.parent().find(".imgs_cont").each(function(){
+ $(this).addClass("def_cont").removeClass("green_cont").removeClass("red_cont");
+ })
+ } else {
+ source.parent().find(".imgs_cont").each(function(){
+ checkOnDrop($(this))
+ })
+ }
+ }
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js
index e823229..142e49b 100644
--- a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/fr/js/script.js
@@ -26,20 +26,16 @@ var sankoreLang = {
"<p>Le bouton âModifierâ vous permet :</p>"+
"<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun),</li>"+
- "<li>de modifier un exercice ou dâen créer de nouveaux dans la même activité.</li></ul>"+
+ "<li>de modifier l'exercice.</li></ul>"+
-"<p>En mode édition, pour créer un nouvel exercice, cliquez sur âNouveau blocâ en bas, une zone bleue apparaît, câest une catégorie, puis :</p>"+
-"<ul><li>insérez le nom de la catégorie (par exemple âfruitsâ, âlégumesâ, âmammifèresâ...) en cliquant dans le champ de texte âSaisir le nom de la catégorie ici â¦â,</li>"+
+"<p>En mode édition :</p>"+
+"<ul><li>modifier le nom de la catégorie (par exemple âfruitsâ, âlégumesâ, âmammifèresâ...) en cliquant dans le champ de texte,</li>"+
"<li>cliquez sur le gros â+â situé à gauche de la catégorie ce qui vous permet de rajouter des étiquettes de mots,</li>"+
"<li>entrez des mots dans ces étiquettes,</li>"+
-"<li>ajoutez ensuite une catégorie (ou plusieurs) en cliquant sur le signe â+â situé à droite de la catégorie, complétez par son nom et ajoutez des étiquettes de mots.</li></ul>"+
-"<p>Pour supprimer une étiquette de mots, cliquez sur la croix située dans le coin supérieur droit de celle-ci.</p>"+
-"<p>Pour supprimer une catégorie, cliquez sur le signe â-â situé à droite de celle-ci.</p>"+
-
-
- "<p>Pour supprimer un exercice, cliquez sur la croix à gauche du numéro de lâexercice.</p>"+
-
- "<p>Le bouton âAfficherâ vous permet dâutiliser lâactivité.</p>",
+"<li>ajoutez ensuite une catégorie (ou plusieurs) en cliquant sur le signe â+â situé à droite de la catégorie, complétez par son nom et ajoutez des étiquettes de mots,</li>"+
+"<li>supprimez une étiquette de mots, en cliquant sur la croix située dans son coin supérieur droit,</li>"+
+"<li>supprimez une catégorie, en cliquant sur le signe â-â situé à droite de celle-ci,</li>"+
+"<li>le bouton âAfficherâ vous permet dâutiliser lâactivité.</li></ul>",
theme: "Thème"
};
@@ -115,14 +111,14 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
var tmp_right = "";
var tmp_array = [];
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".imgs_cont").each(function(){
$(this).find(".del_category").remove();
$(this).find(".add_img").remove();
@@ -191,7 +187,7 @@ function start(){
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".imgs_cont").each(function(){
$("<button class='del_category'></button>").appendTo($(this));
$("<button class='add_category'></button>").appendTo($(this));
@@ -217,28 +213,28 @@ function start(){
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
}
});
- //add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// //add new block
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
addText($(this).parent(), $(this));
});
- //deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// //deleting a block
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -323,14 +319,13 @@ function exportData(){
cont_obj.tmp = "clear";
array_to_export.push(cont_obj);
}
-
- sankore.setPreference("categoriser_text", JSON.stringify(array_to_export));
+ if(window.sankore)
+ sankore.setPreference("categoriser_text", JSON.stringify(array_to_export));
}
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].tmp){
changeStyle(data[i].style);
@@ -345,7 +340,7 @@ function importData(data){
var tmp_array = [];
var container = $("<div class='cont'>").appendTo("#data");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
for(var j in data[i].conts){
var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
@@ -404,7 +399,7 @@ function importData(data){
} else {
container = $("<div class='cont'>").appendTo("#data");
sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
+// $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
for(j in data[i].conts){
var tmp_img_array = [];
@@ -441,8 +436,7 @@ function importData(data){
checkCorrectness(tmp_ui);
}
}
- });
- checkCorrectness(imgs_container);
+ });
}
all_imgs = $("<div class='all_imgs'>").appendTo(container);
@@ -479,7 +473,7 @@ function importData(data){
}
}
}
- });
+ });
checkCorrectness(all_imgs);
}
}
@@ -498,7 +492,7 @@ function showExample(){
var imgs_container_two = $("<div class='imgs_cont def_cont'>").appendTo(container);
var all_imgs = $("<div class='all_imgs'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
$("<input type='hidden' name='mask' value='1'/>").appendTo(imgs_container_one);
$("<input type='hidden' name='count' value='2'/>").appendTo(imgs_container_one);
@@ -597,30 +591,30 @@ function addCategory(obj){
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
-
- $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
- $("<button class='del_category'></button>").appendTo(imgs_container);
- $("<button class='add_category'></button>").appendTo(imgs_container);
- $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
+// $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
+// var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+// $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
+// $("<button class='del_category'></button>").appendTo(imgs_container);
+// $("<button class='add_category'></button>").appendTo(imgs_container);
+// $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
@@ -753,4 +747,4 @@ function checkCorrectness(source){
})
}
}
-}
+}
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/ru/js/script.js b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/ru/js/script.js
index 7a4ac96..ba16eec 100644
--- a/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/ru/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Cat text.wgt/locales/ru/js/script.js
@@ -93,14 +93,14 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
var tmp_right = "";
var tmp_array = [];
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".imgs_cont").each(function(){
$(this).find(".del_category").remove();
$(this).find(".add_img").remove();
@@ -169,7 +169,7 @@ function start(){
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".imgs_cont").each(function(){
$("<button class='del_category'></button>").appendTo($(this));
$("<button class='add_category'></button>").appendTo($(this));
@@ -195,28 +195,28 @@ function start(){
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
}
});
- //add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// //add new block
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
addText($(this).parent(), $(this));
});
- //deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// //deleting a block
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -301,14 +301,13 @@ function exportData(){
cont_obj.tmp = "clear";
array_to_export.push(cont_obj);
}
-
- sankore.setPreference("categoriser_text", JSON.stringify(array_to_export));
+ if(window.sankore)
+ sankore.setPreference("categoriser_text", JSON.stringify(array_to_export));
}
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].tmp){
changeStyle(data[i].style);
@@ -323,7 +322,7 @@ function importData(data){
var tmp_array = [];
var container = $("<div class='cont'>").appendTo("#data");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
for(var j in data[i].conts){
var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
@@ -382,7 +381,7 @@ function importData(data){
} else {
container = $("<div class='cont'>").appendTo("#data");
sub_container = $("<div class='sub_cont'>").appendTo(container);
- $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
+// $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
for(j in data[i].conts){
var tmp_img_array = [];
@@ -419,8 +418,7 @@ function importData(data){
checkCorrectness(tmp_ui);
}
}
- });
- checkCorrectness(imgs_container);
+ });
}
all_imgs = $("<div class='all_imgs'>").appendTo(container);
@@ -457,7 +455,7 @@ function importData(data){
}
}
}
- });
+ });
checkCorrectness(all_imgs);
}
}
@@ -476,7 +474,7 @@ function showExample(){
var imgs_container_two = $("<div class='imgs_cont def_cont'>").appendTo(container);
var all_imgs = $("<div class='all_imgs'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
$("<input type='hidden' name='mask' value='1'/>").appendTo(imgs_container_one);
$("<input type='hidden' name='count' value='2'/>").appendTo(imgs_container_one);
@@ -575,30 +573,30 @@ function addCategory(obj){
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
-
- $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
- $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
- var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
- $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
- $("<button class='del_category'></button>").appendTo(imgs_container);
- $("<button class='add_category'></button>").appendTo(imgs_container);
- $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont def_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' name='mask' value='" + returnId() + "'/>").appendTo(imgs_container);
+// $("<input type='hidden' name='count' value=''/>").appendTo(imgs_container);
+// var tmp_div = $("<div style='width: 100%; overflow: hidden;'>").appendTo(imgs_container);
+// $("<input type='text' class='cat_desc' value='" + sankoreLang.enter + "'/>").appendTo(tmp_div);
+// $("<button class='del_category'></button>").appendTo(imgs_container);
+// $("<button class='add_category'></button>").appendTo(imgs_container);
+// $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
diff --git a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/config.xml
index 84911f0..6a59efd 100644
--- a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/config.xml
@@ -4,8 +4,8 @@
id="http://uniboard.mnemis.com/widgets/webbrowser"
version="1.1"
width="920"
- height="500"
- ub:resizable="true">
+ height="450"
+ ub:resizable="false">
<name>Choisir</name>
<author href="http://www.getuniboard.com"
diff --git a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/css/basic.css b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/css/basic.css
index d297aed..1450928 100644
--- a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/css/basic.css
+++ b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/css/basic.css
@@ -48,6 +48,7 @@ body{
margin: 2px;
font-family: sans-serif;
font-size: large;
+ display: none;
}
.addQstButton{
@@ -112,6 +113,7 @@ body{
font-weight: bold;
cursor: pointer;
border-radius: 10px;
+ margin-bottom: 8px;
}
.applyChanges{
@@ -186,6 +188,7 @@ body{
color: black;
cursor: pointer;
border-radius: 10px;
+ margin-top: 5px;
}
.newAnswer{
diff --git a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/index.html
index 054a03f..19b8283 100644
--- a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/index.html
@@ -1,90 +1,32 @@
-<!--
-To change this template, choose Tools | Templates
-and open the template in the editor.
--->
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script type="text/javascript" src="scripts/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="scripts/selQuestionApp.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- //sankore.enableDropOnWidget(false);
- init();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- init();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url:'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
- });
+ }
+ });
+ });
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="data">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/en/index.html
new file mode 100644
index 0000000..3198046
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/en/index.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../scripts/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="scripts/selQuestionApp.js"></script>
+ <script type="text/javascript">
+
+ $(document).ready(function(){
+ init();
+ });
+
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="data">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/en/scripts/selQuestionApp.js b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/en/scripts/selQuestionApp.js
new file mode 100644
index 0000000..d5648f3
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/en/scripts/selQuestionApp.js
@@ -0,0 +1,792 @@
+/*
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+var sankoreLang = {
+ edit: "Edit",
+ display:"Display",
+ question:"Question",
+ example_question:"This is an example of the question",
+ answer:"This is one possible answer",
+ q:"Q",
+ add_new_question:" Add a new question ...",
+ options:"Options",
+ close:"Close",
+ delete_question:"Delete question",
+ delete_answer:"Delete the possibility",
+ right_answer:"Right answer",
+ template_question:"Enter your question here ...",
+ template_answer:"Enter one possible answer here ...",
+ add_answer:"Add one possible answer",
+ select_text:"Choose the right answer",
+ options_desc:"You can choose one of the three options of displaying possibilities.",
+ radio_desc:"One right answer only and the possibilities are displayed as radio buttons.",
+ checkbox_desc:"Several right answers and possibilities are displayed as checkboxes.",
+ select_desc:"One right answer only and possibilities are displayed as pull-down menu.",
+ a:"A",
+ wgt_name: "Choose the right answer",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p><h2> Choose the right answer</h2></p>" +
+"<p><h3> Multiple-Choice Question (MCQ)</h3></p>" +
+"<p>Multiple-choice question. The goal is to choose the correct answer.</p>" +
+"<p>âReloadâ button resets the exercises.</p>" +
+
+"<p> Enter the âEditâ mode to :</p>" +
+"<ul><li> choose the theme of interactivity : pad, slate or none (none by default),</li>" +
+"<li> modify the exercise.</li></ul>" +
+
+"<p>In edition mode :</p>" +
+"<ul> <li> click on âAdd a new questionâ,</li>" +
+"<li>edit the text field clicking on the text field âEnter your question here ... â,</li>" +
+"<li>click on âOptionsâ to select the type of our MCQ (one correct answer, multiple correct answers, drop down) and close it,</li>" +
+"<li>add a new possible answer if needed,</li>" +
+"<li>modify the text field clicking on it,</li>" +
+"<li>set the correct answer by clicking in the checkbox to the left of the text field,</li>" +
+"<li>remove a label clicking on the cross button on the frame,</li>" +
+"<li>delete a possible answer clicking on the cross on the left,</li>" +
+"<li>âDisplayâ button comes back to the activity.</li></ul>",
+ theme: "Theme"
+};
+
+var questionArray;
+var currentQstId = "";
+var lang = ""; //locale language
+var begin = true;
+
+function init(){
+
+ //variables
+ var toggleFlag = false;
+ var endFlag = false;
+ var mode = true;
+ questionArray = new Array();
+ var popupFlag = false
+ var flagForSelect = false;
+
+ $("#wgt_display").text(sankoreLang.display);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_name").text(sankoreLang.wgt_name);
+ $("#wgt_reload").text(sankoreLang.reload);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ //popup message
+ var popupText = $("<div id='popupWordInfo' class='popupWordInfo'></div>").appendTo("#data");
+
+ // adding question block
+ var addQstDiv = $("<div id='addQstDiv' class='addQstDiv'>").appendTo("#data");
+ var addQstButton = $("<button id='addQstButton' class='addQstButton'>").appendTo("#addQstDiv");
+ var addQsqSpan1 = $("<span id='addQsqSpan1'>" + sankoreLang.q + "1</span>").appendTo("#addQstButton");
+ var addQsqSpan2 = $("<span id='addQsqSpan2'>" + sankoreLang.add_new_question + "</span>").appendTo("#addQstButton");
+
+ //import saved data
+ if(window.sankore){
+ if(sankore.preference("qstArrayData","") && sankore.preference("qstArrayData","") != "[]")
+ questionArray = jQuery.parseJSON(sankore.preference("qstArrayData",""));
+ else
+ questionArray = jQuery.parseJSON('[{"text":"' + sankoreLang.example_question + '","type":"1","id":538,"rightAns":"2","answers":[{"id":953,"text":"' + sankoreLang.answer + ' 1.","value":1,"state":"","was":false},{"id":526,"text":"' + sankoreLang.answer + ' 2.","value":2,"state":"","was":false},{"id":473,"text":"' + sankoreLang.answer + ' 3.","value":3,"state":"","was":false}]}]');
+
+ for(i in questionArray){
+ addQstBlock(questionArray[i].id, questionArray[i].text, questionArray[i].type,"style='display: none;'");
+ for(j in questionArray[i].answers)
+ addAnsBlock(questionArray[i].answers[j].id, questionArray[i].id, questionArray[i].answers[j].text, true, questionArray[i].rightAns, questionArray[i].type);
+ }
+ displayData();
+ }
+ else{
+ questionArray = jQuery.parseJSON('[{"text":"' + sankoreLang.example_question + '","type":"1","id":538,"rightAns":"2","answers":[{"id":953,"text":"' + sankoreLang.answer + ' 1.","value":1,"state":"","was":false},{"id":526,"text":"' + sankoreLang.answer + ' 2.","value":2,"state":"","was":false},{"id":473,"text":"' + sankoreLang.answer + ' 3.","value":3,"state":"","was":false}]}]');
+ for(i in questionArray){
+ addQstBlock(questionArray[i].id, questionArray[i].text, questionArray[i].type,"style='display: none;'");
+ for(j in questionArray[i].answers)
+ addAnsBlock(questionArray[i].answers[j].id, questionArray[i].id, questionArray[i].answers[j].text, true, questionArray[i].rightAns, questionArray[i].type);
+ }
+ displayData();
+ }
+
+ //saving widget data into sankore object for a correct import
+ if (window.widget) {
+ window.widget.onleave = function(){
+ sankore.setPreference("qstArrayData", JSON.stringify(questionArray));
+ sankore.setPreference("choisir_style", $("#style_select").find("option:selected").val());
+ }
+ }
+
+ if(window.sankore)
+ if(sankore.preference("choisir_style","")){
+ changeStyle(sankore.preference("choisir_style",""));
+ $("#style_select").val(sankore.preference("choisir_style",""));
+ } else
+ changeStyle("3")
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display","none");
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ displayData(true);
+ mode = true;
+ if(window.sankore){
+ sankore.setPreference("qstArrayData", JSON.stringify(questionArray));
+ sankore.setPreference("choisir_style", $("#style_select").find("option:selected").val());
+ }
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display","block");
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ editData();
+ mode = false;
+ }
+ }
+ });
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").slideUp("100", function(){
+ tmp.removeClass("open");
+ $("#data").show();
+ });
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ $("#data").hide();
+ $("#help").slideDown("100", function(){
+ tmp.addClass("open");
+ });
+ }
+ });
+
+ $("#wgt_reload").text(sankoreLang.reload).click(function(){
+ if($("#wgt_edit").css("display") == "none")
+ $("#wgt_display").trigger("click");
+ else{
+ editData();
+ mode = false;
+ displayData(true);
+ mode = true;
+ }
+ });
+
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ // add question
+ addQstButton.click(function(){
+ //question block
+ var id = Math.round(Math.random()*1000);
+ var obj = new Question();
+ obj.id = id;
+ questionArray.push(obj);
+
+ addQstBlock(id, sankoreLang.template_question, "","");
+
+ if(window.sankore)
+ sankore.setPreference("qstArrayData", JSON.stringify(questionArray));
+ });
+
+ //set used at this moment question id into the variable
+ $(".qstDiv").live('mouseover', function() {
+ currentQstId = this.id;
+ });
+
+ //set used at this moment question id into the variable
+ $(".qstDivDisplay").live('mouseover', function() {
+ if(!flagForSelect)
+ currentQstId = this.id.replace("qstDivDisplay","");
+ });
+
+ //adding new answer
+ $(".ansAdd").live('click', function(){
+
+ var id = Math.round(Math.random()*1000);
+ var obj = new Answer();
+ obj.id = id;
+ getNeededElement(questionArray, currentQstId).answers.push(obj);
+
+ addAnsBlock(id, currentQstId, sankoreLang.template_answer);
+ });
+
+ //set answer text
+ $(".ansContent").live('keyup', function(event){
+ var id = $(event.target).attr("id").replace("ansContent","");
+ getNeededElement(getNeededElement(questionArray, currentQstId).answers,id).text = $(event.target).text();
+ });
+
+ //set question text
+ $(".qstContent").live('keyup', function(event){
+ var id = $(event.target).attr("id").replace("qstContent","");
+ getNeededElement(questionArray, id).text = $(event.target).text();
+ });
+
+ //question div border
+ $(".qstContent").live('mouseover', function(event){
+ $(event.target).css({
+ border:"3px solid #00C6FF"
+ });
+ });
+
+ // deleting question div border
+ $(".qstContent").live('mouseout', function(event){
+ $(event.target).css({
+ border:"3px solid #ccc"
+ });
+ });
+
+ //answer div border
+ $(".ansContent").live('mouseover', function(event){
+ $(event.target).css({
+ border:"3px solid #00C6FF"
+ });
+ });
+
+ // deleting answer div border
+ $(".ansContent").live('mouseout', function(event){
+ $(event.target).css({
+ border:"3px solid #ccc"
+ });
+ });
+
+ //delete answer
+ $(".ansDelete").live('click', function(){
+ popupText.hide();
+ var id = this.id.replace("ansDelete","");
+ $("#" + currentQstId + " #" + id).remove();
+ for(var i in questionArray)
+ if(questionArray[i].id == currentQstId){
+ questionArray[i].rightAns = questionArray[i].rightAns.replace($("#" + currentQstId + " #" + id + " input:checkbox").val(),"");
+ for(var j in questionArray[i].answers)
+ if(questionArray[i].answers[j].id == id){
+ if(j == 0)
+ questionArray[i].answers.shift();
+ else
+ if((j+1) == questionArray[i].answers.length)
+ questionArray[i].answers.pop();
+ else
+ questionArray[i].answers = questionArray[i].answers.slice(0,j).concat(questionArray[i].answers.slice(j+1));
+ break;
+ }
+ }
+ refreshAns();
+ });
+
+ //delete question
+// $(".qstDelete").live('click', function(){
+// popupText.hide();
+// $("#" + currentQstId).remove();
+// for(var i in questionArray)
+// if(questionArray[i].id == currentQstId){
+// if(i == 0)
+// questionArray.shift();
+// else
+// if((i+1) == questionArray.length)
+// questionArray.pop();
+// else
+// questionArray = questionArray.slice(0,i).concat(questionArray.slice(i+1));
+// break;
+// }
+// refreshQst();
+// });
+
+ //change options
+ $(".changeOptions").live('click', function(){
+ $("#" + currentQstId + "qstOptions .changeOptions").hide();
+ $("#" + currentQstId + "qstOptions .applyChanges").show();
+ $("#" + currentQstId + "qstOptChoice").show('fast');
+ });
+
+ //apply changes
+ $(".applyChanges").live('click', function(){
+ $("#" + currentQstId + "qstOptions .applyChanges").hide();
+ $("#" + currentQstId + "qstOptions .changeOptions").show();
+ $("#" + currentQstId + "qstOptChoice").hide('fast');
+ });
+
+ //select option
+ $(".qstOptChoice input:radio").live('click', function(event){
+ if(!mode){
+ $("#" + currentQstId + "qstOptChoice input:radio").removeAttr("checked");
+ $(event.target).attr("checked", "checked");
+ getNeededElement(questionArray, currentQstId).type = $(event.target).attr("value");
+ }
+ });
+
+ //select right ansver in edit mode and answer question in display mode
+ $(".newAnswer input").live('click', function(event){
+
+ if(!mode){
+ if(getNeededElement(questionArray, currentQstId).type == "1" || getNeededElement(questionArray, currentQstId).type == "3"){
+ $("#" + currentQstId + "ansDiv input").removeAttr("checked");
+ $(event.target).attr("checked", "checked");
+ getNeededElement(questionArray, currentQstId).rightAns = $(event.target).attr("value");
+ } else {
+ (event.target.checked) ? $(event.target).attr("checked", "checked") : $(event.target).removeAttr("checked", "checked");
+ getNeededElement(questionArray, currentQstId).rightAns = "";
+ for(var i in $("#" + currentQstId + "ansDiv input")){
+ if($("#" + currentQstId + "ansDiv input")[i].checked)
+ getNeededElement(questionArray, currentQstId).rightAns += $("#" + currentQstId + "ansDiv input")[i].value + ", ";
+ }
+ }
+ } else {
+ if(event.target.type == "radio"){
+ checkingAnswers("radio", getNeededElement(questionArray, currentQstId).answers, event.target.value);
+ if(event.target.value == getNeededElement(questionArray, currentQstId).rightAns)
+ $(event.target).next().next().css("background-color","#6c0");
+ else
+ $(event.target).next().next().css("background-color","red");
+ } else {
+ checkingAnswers("box", getNeededElement(questionArray, currentQstId).answers, event.target.value, event.target.checked);
+ if(getNeededElement(questionArray, currentQstId).rightAns.replace(/,/g,"").indexOf(event.target.value + " ", 0) != -1)
+ $(event.target).next().next().css("background-color","#6c0");
+ else
+ $(event.target).next().next().css("background-color","red");
+ }
+ }
+ });
+
+ //popup messages
+// $(".qstDelete").live('mouseover', function(evt){
+// popupFlag = true;
+// popupText.text(sankoreLang.delete_question)
+// .css("top", evt.pageY + 15)
+// .css("left", evt.pageX - 40)
+// .css({
+// width:"130px"
+// })
+// .show("fast", function(){
+// if(!popupFlag)
+// popupText.hide();
+// });
+// });
+
+ $(".ansDelete").live('mouseover', function(evt){
+ popupFlag = true;
+ popupText.text(sankoreLang.delete_answer)
+ .css("top", evt.pageY + 15)
+ .css("left", evt.pageX - 40)
+ .css({
+ width:"130px"
+ })
+ .show("fast", function(){
+ if(!popupFlag)
+ popupText.hide();
+ });
+ });
+
+ $(".newAnswer input").live('mouseover', function(evt){
+ if(!mode){
+ popupFlag = true;
+ popupText.text(sankoreLang.right_answer)
+ .css("top", evt.pageY + 15)
+ .css("left", evt.pageX - 40)
+ .css({
+ width:"130px"
+ })
+ .show("fast", function(){
+ if(!popupFlag)
+ popupText.hide();
+ });
+ }
+ });
+
+ $(".ansDelete, .newAnswer input").live('mousemove', function(evt){
+ if(!mode){
+ popupText.css("top", evt.pageY + 15)
+ .css("left", evt.pageX - 40);
+ }
+ });
+
+ $(".ansDelete, .newAnswer input").live('mouseout', function(evt){
+ if(!mode){
+ popupFlag = false;
+ popupText.hide();
+ }
+ });
+
+ //answer the questions
+
+ $("select").live('change', function(evt){
+ if(mode){
+ checkingAnswers("sel", getNeededElement(questionArray, currentQstId).answers, event.target.value);
+ if(event.target.value == getNeededElement(questionArray, currentQstId).rightAns)
+ $(event.target).css("background-color","#6c0");
+ else
+ $(event.target).css("background-color","red");
+ if(event.target.value == 0)
+ $(event.target).css("background-color","");
+ flagForSelect = false;
+ }
+ });
+
+ $("select").live('mousedown', function(evt){
+ if(mode){
+ flagForSelect = true;
+ }
+ });
+
+ //toggle button click trigger
+ //toggleButton.trigger("click");
+ //show data in display mode
+ function displayData(){
+// $("#addQstDiv").hide();
+ $(".qstDiv").hide();
+ addToPage(questionArray);
+ }
+
+ //set widget in edit mode
+ function editData(){
+ for(var i in questionArray)
+ for(var j in questionArray[i].answers){
+ questionArray[i].answers[j].state = "";
+ questionArray[i].answers[j].was = false
+ }
+
+ $(".qstDivDisplay").remove();
+
+// $("#addQstDiv").show('fast');
+ $(".qstDiv").show('fast');
+ }
+
+ // show questions and answers in display mode
+ function addToPage(array){
+ var counter = 1;
+ for(var i in array){
+
+ var qstDiv = $("<div class='qstDivDisplay' id='" + array[i].id + "qstDivDisplay'>");
+ var spanOptConn = $("<div class='spanOptConn'>").appendTo(qstDiv);
+// var qstNumber = $("<span class='qstNumber'>" + sankoreLang.question + " " + counter + "</span>").appendTo(spanOptConn);
+ var qstContent = $("<div class='qstContentDisplay'>" + array[i].text + "</div>").appendTo(qstDiv);
+ var ansDiv = $("<div class='ansDiv' id='" + array[i].id + "ansDiv'>").appendTo(qstDiv);
+
+ var ansCount = 1;
+ var type = array[i].type;
+ var selInput = $("<select>");
+ if(type == 3){
+ var newAnswer = $("<div class='newAnswer'>");
+ newAnswer.appendTo(ansDiv);
+ var selectSpan = $("<span id='answerText'>").appendTo(newAnswer);
+ selInput.appendTo(selectSpan);
+ $("<option value='0'>" + sankoreLang.select_text + "</option>").appendTo(selInput);
+ }
+ for(var j in array[i].answers){
+ switch(type){
+ case "1":
+ var local_state = "";
+ var local_color = "";
+ if(begin){
+ local_state = array[i].answers[j].state;
+ local_color = (array[i].answers[j].value == array[i].rightAns)?((array[i].answers[j].was)?"style='background-color: #6c0;'":""):((array[i].answers[j].was)?"style='background-color: red;'":"");
+ }
+ newAnswer = $("<div class='newAnswer'>");
+ var ansInput = $("<input type='radio' name='" + counter + "' value='" + array[i].answers[j].value + "' " + local_state + " style='float: left; margin-right: 10px;'/>").appendTo(newAnswer);
+ var ansSpan = $("<span class='ansSpanDisplay'>" + ansCount + ".</span>").appendTo(newAnswer);
+ var ansContent = $("<div class='ansContentDisplay' " + local_color + "><span id='answerText'>" + array[i].answers[j].text + "</span></div>").appendTo(newAnswer);
+ newAnswer.appendTo(ansDiv);
+ break;
+ case "2":
+ local_state = "";
+ local_color = "";
+ if(begin){
+ local_state = (array[i].answers[j].state)?"checked":"";
+ local_color = (array[i].rightAns.replace(/,/g,"").indexOf(array[i].answers[j].value + " ", 0) != -1)?((array[i].answers[j].was)?"style='background-color: #6c0;'":""):((array[i].answers[j].was)?"style='background-color: red;'":"");
+ }
+ newAnswer = $("<div class='newAnswer'>");
+ ansInput = $("<input type='checkbox' value='" + array[i].answers[j].value + "' " + local_state + " style='float: left; margin-right: 10px;'/>").appendTo(newAnswer);
+ ansSpan = $("<span class='ansSpanDisplay'>" + ansCount + ".</span>").appendTo(newAnswer);
+ ansContent = $("<div class='ansContentDisplay' " + local_color + "><span id='answerText'>" + array[i].answers[j].text + "</span></div>").appendTo(newAnswer);
+ newAnswer.appendTo(ansDiv);
+ break;
+ case "3":
+ local_state = "";
+ local_color = "";
+ if(begin){
+ local_state = (array[i].answers[j].state)?"selected":"";
+ local_color = (array[i].answers[j].value == array[i].rightAns)?((array[i].answers[j].was)?"#6c0":""):((array[i].answers[j].was)?"red":"");
+ }
+ ansInput = $("<option value='" + array[i].answers[j].value + "' " + local_state + ">" + array[i].answers[j].text + "</option>").appendTo(selInput);
+ if(local_state && local_color)
+ selInput.css("background-color",local_color);
+ break;
+ }
+ ansCount++;
+ }
+ qstDiv.appendTo("#data");
+ counter++;
+ }
+ begin = false;
+ }
+}
+
+//add new question block in a edit mode
+function addQstBlock(id, text, type, style){
+ var qstDiv = $("<div class='qstDiv' id='" + id + "' " + style + ">");
+ var spanOptConn = $("<div class='spanOptConn'>").appendTo(qstDiv);
+
+// var count = $(".qstNumber").size();
+// var qstNumber = $("<span class='qstNumber'>" + sankoreLang.q + (count + 1) + "</span>").appendTo(spanOptConn);
+
+ var qstOptions = $("<div class='qstOptions' id='" + id + "qstOptions'>").appendTo(spanOptConn);
+ var changeOptions = $("<button class='changeOptions'>" + sankoreLang.options + "</button>").appendTo(qstOptions);
+ var applyChanges = $("<button class='applyChanges' style='display: none;'>" + sankoreLang.close + "</button>").appendTo(qstOptions);
+// var qstDelete = $("<button class='qstDelete'>").appendTo(qstOptions);
+
+ var qstOptChoice = $("<div class='qstOptChoice' id='" + id + "qstOptChoice' style='display: none;'>").appendTo(qstDiv);
+ var optDesc = $("<div style='height: 65px;'>").appendTo(qstOptChoice);
+ var optDescImg = $("<div class='optDescImg'>").appendTo(optDesc);
+ var optDescText = $("<div class='optDescText'>" + sankoreLang.options_desc + "</div>").appendTo(optDesc);
+
+ var type1 = $("<div class='type'>").appendTo(qstOptChoice);
+ var contentType1 = $("<div class='contentType'>").appendTo(type1);
+ var divType1 = $("<div class='divType1'>").appendTo(contentType1);
+ var textType1 = $("<div class='textType'>" + sankoreLang.radio_desc + "</div>").appendTo(contentType1);
+
+ var type2 = $("<div class='type'>").appendTo(qstOptChoice);
+ var contentType2 = $("<div class='contentType'>").appendTo(type2);
+ var divType2 = $("<div class='divType2'>").appendTo(contentType2);
+ var textType2 = $("<div class='textType'>" + sankoreLang.checkbox_desc + "</div>").appendTo(contentType2);
+
+ var type3 = $("<div class='type'>").appendTo(qstOptChoice);
+ var contentType3 = $("<div class='contentType'>").appendTo(type3);
+ var divType3 = $("<div class='divType3'>").appendTo(contentType3);
+ var textType3 = $("<div class='textType'>" + sankoreLang.select_desc + "</div>").appendTo(contentType3);
+
+ switch(type){
+ case "1":
+ var radioType1 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='1' checked/><div></div>").appendTo(type1);
+ var radioType2 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='2'/><div></div>").appendTo(type2);
+ var radioType3 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='3'/><div></div>").appendTo(type3);
+ break;
+ case "2":
+ radioType1 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='1'/><div></div>").appendTo(type1);
+ radioType2 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='2' checked/><div></div>").appendTo(type2);
+ radioType3 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='3'/><div></div>").appendTo(type3);
+ break;
+ case "3":
+ radioType1 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='1'/><div></div>").appendTo(type1);
+ radioType2 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='2'/><div></div>").appendTo(type2);
+ radioType3 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='3' checked/><div></div>").appendTo(type3);
+ break;
+ default:
+ radioType1 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='1'/><div></div>").appendTo(type1);
+ radioType2 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='2'/><div></div>").appendTo(type2);
+ radioType3 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='3'/><div></div>").appendTo(type3);
+ break;
+ }
+
+ var qstContent = $("<div class='qstContent' id='" + id + "qstContent' contenteditable='true'>" + text + "</div>").appendTo(qstDiv);
+
+ var ansDiv = $("<div class='ansDiv' id='" + id + "ansDiv'>").appendTo(qstDiv);
+ var ansAdd = $("<button class='ansAdd'>" + sankoreLang.add_answer + "</button>").appendTo(ansDiv);
+ qstDiv.insertBefore("#addQstDiv");
+// $("#addQsqSpan1").text(sankoreLang.q + (count + 2));
+}
+
+//add answers
+function addAnsBlock(id, currId, text, stage, rightAns, type){
+ var newAnswer = $("<div class='newAnswer' id='" + id + "'>");
+ var value;
+ var check = "";
+ if(stage){
+ value = getNeededElement(getNeededElement(questionArray, currId).answers,id).value;
+ if(type != "2"){
+ if(rightAns == value)
+ check = "checked='true'";
+ }
+ else {
+ rightAns = rightAns.replace(/,/g,"");
+ if(rightAns.indexOf(value + " ", 0) != -1)
+ check = "checked='true'";
+ }
+ }
+ else {
+ value = ($("#" + currId + " .newAnswer input:checkbox").last().val()) ? parseInt($("#" + currId + " .newAnswer input:checkbox").last().val()) + 1 : 1;
+ getNeededElement(getNeededElement(questionArray, currId).answers,id).value = value;
+ }
+ var count = $("#" + currId + " .newAnswer").size() + 1;
+ var input = $("<input type='checkbox' style='float: left;' value='" + value + "' " + check + ">").appendTo(newAnswer);
+ var ansSpan = $("<span class='ansSpan'>" + sankoreLang.a + count + "</span>").appendTo(newAnswer);
+ var ansContent = $("<div class='ansContent' id='" + id +"ansContent' contenteditable='true'>" + text + "</div>").appendTo(newAnswer);
+ var ansDelete = $("<button class='ansDelete' id='" + id + "ansDelete'>").appendTo(newAnswer);
+ newAnswer.insertBefore("#" + currId + "ansDiv .ansAdd");
+
+ if(window.sankore)
+ sankore.setPreference("qstArrayData", JSON.stringify(questionArray));
+}
+
+//get needed array element
+function getNeededElement(array,id){
+ for(var i in array)
+ if(array[i].id == id)
+ return array[i];
+}
+
+//check on fill
+function checkArrayOnFill(array){
+ var count = 0;
+
+ for(var i in array)
+ count++;
+
+ return count;
+}
+
+//refresh answers numbers
+function refreshAns(){
+ var count = $("#" + currentQstId + " .newAnswer").size();
+ for(var i = 0; i < count; i ++)
+ $($("#" + currentQstId + " .newAnswer span")[i]).text(sankoreLang.a + (i+1));
+}
+
+//refresh questions numbers
+function refreshQst(){
+ var count = $(".qstNumber").size();
+ for(var i = 0; i < count; i ++)
+ $($(".qstNumber")[i]).text(sankoreLang.q + (i+1));
+ $("#addQsqSpan1").text(sankoreLang.q + ++count);
+}
+
+//check answers
+function checkingAnswers(type, array, value, state){
+ switch(type){
+ case "radio":
+ for(var i in array)
+ if(array[i].value == value){
+ array[i].state = "checked";
+ array[i].was = true;
+ } else
+ array[i].state = "";
+ break;
+ case "box":
+ for(i in array)
+ if(array[i].value == value){
+ array[i].state = state;
+ array[i].was = true;
+ }
+ break;
+ case "sel":
+ for(i in array)
+ if(array[i].value == value){
+ array[i].state = "selected";
+ array[i].was = true;
+ } else
+ array[i].state = "";
+ break;
+ }
+}
+
+//question constructor
+function Question(){
+
+ this.text = "";
+
+ this.type = "1";
+
+ this.id = "";
+
+ this.rightAns = "";
+
+ this.answers = new Array();
+
+}
+
+//answer constructor
+function Answer(){
+
+ this.id = "";
+
+ this.text = "";
+
+ this.value = "";
+
+ this.state = "";
+
+ this.was = false;
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/fr/index.html b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/fr/index.html
index 925a066..3198046 100644
--- a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/fr/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/fr/index.html
@@ -1,7 +1,3 @@
-<!--
-To change this template, choose Tools | Templates
-and open the template in the editor.
--->
<!DOCTYPE html>
<html>
<head>
diff --git a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/fr/scripts/selQuestionApp.js b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/fr/scripts/selQuestionApp.js
index 720c3b5..7b0abad 100644
--- a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/fr/scripts/selQuestionApp.js
+++ b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/fr/scripts/selQuestionApp.js
@@ -50,18 +50,15 @@ var sankoreLang = {
"<p>Le bouton âModifierâ vous permet :</p>"+
"<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun),</li>"+
-"<li>de modifier un exercice ou dâen créer de nouveaux dans la même activité.</li></ul>"+
+"<li>de modifier l'exercice.</li></ul>"+
-"<p>En mode édition, pour créer un nouvel exercice, cliquez sur âAjouter une nouvelle question â¦â, puis :</p>"+
+"<p>En mode édition :</p>"+
"<ul><li>insérez la question en cliquant sur le champ de texte âSaisir la question ici ...â,</li>"+
"<li>cliquez sur âOptionsâ pour choisir lâaffichage des propositions (une seule bonne réponse, plusieurs bonnes réponses, liste déroulante). Cliquez sur âFermerâ,</li>"+
"<li>cliquez sur âAjouter une propositionâ et saisissez la proposition dans le champ de texte,</li>"+
-"<li>définissez la ou les propositions correctes en cliquant sur la case à cocher à gauche des bonnes réponses.</li>"+
-"<li>Pour supprimer une proposition, cliquez sur la croix située à droite de celle-ci.</li></ul>"+
-
-"<p>Pour supprimer un exercice, cliquez sur la croix à droite du numéro de âOptionsâ.</p>"+
-
-"<p>Le bouton âAfficherâ vous permet dâutiliser lâactivité.</p>",
+"<li>définissez la ou les propositions correctes en cliquant sur la case à cocher à gauche des bonnes réponses,</li>"+
+"<li>supprimez une proposition, en cliquant sur la croix située à droite de celle-ci,</li>"+
+"<li>le bouton âAfficherâ vous permet dâutiliser lâactivité.</li></ul>",
theme: "Thème"
};
@@ -303,22 +300,22 @@ function init(){
});
//delete question
- $(".qstDelete").live('click', function(){
- popupText.hide();
- $("#" + currentQstId).remove();
- for(var i in questionArray)
- if(questionArray[i].id == currentQstId){
- if(i == 0)
- questionArray.shift();
- else
- if((i+1) == questionArray.length)
- questionArray.pop();
- else
- questionArray = questionArray.slice(0,i).concat(questionArray.slice(i+1));
- break;
- }
- refreshQst();
- });
+// $(".qstDelete").live('click', function(){
+// popupText.hide();
+// $("#" + currentQstId).remove();
+// for(var i in questionArray)
+// if(questionArray[i].id == currentQstId){
+// if(i == 0)
+// questionArray.shift();
+// else
+// if((i+1) == questionArray.length)
+// questionArray.pop();
+// else
+// questionArray = questionArray.slice(0,i).concat(questionArray.slice(i+1));
+// break;
+// }
+// refreshQst();
+// });
//change options
$(".changeOptions").live('click', function(){
@@ -377,19 +374,19 @@ function init(){
});
//popup messages
- $(".qstDelete").live('mouseover', function(evt){
- popupFlag = true;
- popupText.text(sankoreLang.delete_question)
- .css("top", evt.pageY + 15)
- .css("left", evt.pageX - 40)
- .css({
- width:"130px"
- })
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
+// $(".qstDelete").live('mouseover', function(evt){
+// popupFlag = true;
+// popupText.text(sankoreLang.delete_question)
+// .css("top", evt.pageY + 15)
+// .css("left", evt.pageX - 40)
+// .css({
+// width:"130px"
+// })
+// .show("fast", function(){
+// if(!popupFlag)
+// popupText.hide();
+// });
+// });
$(".ansDelete").live('mouseover', function(evt){
popupFlag = true;
@@ -421,14 +418,14 @@ function init(){
}
});
- $(".qstDelete, .ansDelete, .newAnswer input").live('mousemove', function(evt){
+ $(".ansDelete, .newAnswer input").live('mousemove', function(evt){
if(!mode){
popupText.css("top", evt.pageY + 15)
.css("left", evt.pageX - 40);
}
});
- $(".qstDelete, .ansDelete, .newAnswer input").live('mouseout', function(evt){
+ $(".ansDelete, .newAnswer input").live('mouseout', function(evt){
if(!mode){
popupFlag = false;
popupText.hide();
@@ -460,7 +457,7 @@ function init(){
//toggleButton.trigger("click");
//show data in display mode
function displayData(){
- $("#addQstDiv").hide();
+// $("#addQstDiv").hide();
$(".qstDiv").hide();
addToPage(questionArray);
}
@@ -475,7 +472,7 @@ function init(){
$(".qstDivDisplay").remove();
- $("#addQstDiv").show('fast');
+// $("#addQstDiv").show('fast');
$(".qstDiv").show('fast');
}
@@ -486,7 +483,7 @@ function init(){
var qstDiv = $("<div class='qstDivDisplay' id='" + array[i].id + "qstDivDisplay'>");
var spanOptConn = $("<div class='spanOptConn'>").appendTo(qstDiv);
- var qstNumber = $("<span class='qstNumber'>" + sankoreLang.question + " " + counter + "</span>").appendTo(spanOptConn);
+// var qstNumber = $("<span class='qstNumber'>" + sankoreLang.question + " " + counter + "</span>").appendTo(spanOptConn);
var qstContent = $("<div class='qstContentDisplay'>" + array[i].text + "</div>").appendTo(qstDiv);
var ansDiv = $("<div class='ansDiv' id='" + array[i].id + "ansDiv'>").appendTo(qstDiv);
@@ -554,13 +551,13 @@ function addQstBlock(id, text, type, style){
var qstDiv = $("<div class='qstDiv' id='" + id + "' " + style + ">");
var spanOptConn = $("<div class='spanOptConn'>").appendTo(qstDiv);
- var count = $(".qstNumber").size();
- var qstNumber = $("<span class='qstNumber'>" + sankoreLang.q + (count + 1) + "</span>").appendTo(spanOptConn);
+// var count = $(".qstNumber").size();
+// var qstNumber = $("<span class='qstNumber'>" + sankoreLang.q + (count + 1) + "</span>").appendTo(spanOptConn);
var qstOptions = $("<div class='qstOptions' id='" + id + "qstOptions'>").appendTo(spanOptConn);
var changeOptions = $("<button class='changeOptions'>" + sankoreLang.options + "</button>").appendTo(qstOptions);
var applyChanges = $("<button class='applyChanges' style='display: none;'>" + sankoreLang.close + "</button>").appendTo(qstOptions);
- var qstDelete = $("<button class='qstDelete'>").appendTo(qstOptions);
+// var qstDelete = $("<button class='qstDelete'>").appendTo(qstOptions);
var qstOptChoice = $("<div class='qstOptChoice' id='" + id + "qstOptChoice' style='display: none;'>").appendTo(qstDiv);
var optDesc = $("<div style='height: 65px;'>").appendTo(qstOptChoice);
@@ -610,7 +607,7 @@ function addQstBlock(id, text, type, style){
var ansDiv = $("<div class='ansDiv' id='" + id + "ansDiv'>").appendTo(qstDiv);
var ansAdd = $("<button class='ansAdd'>" + sankoreLang.add_answer + "</button>").appendTo(ansDiv);
qstDiv.insertBefore("#addQstDiv");
- $("#addQsqSpan1").text(sankoreLang.q + (count + 2));
+// $("#addQsqSpan1").text(sankoreLang.q + (count + 2));
}
//add answers
@@ -790,4 +787,4 @@ function changeStyle(val){
$("body, html").addClass("without_radius").removeClass("radius_ft");
break;
}
-}
\ No newline at end of file
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/ru/scripts/selQuestionApp.js b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/ru/scripts/selQuestionApp.js
index 5c75cf3..97572e9 100644
--- a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/ru/scripts/selQuestionApp.js
+++ b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/locales/ru/scripts/selQuestionApp.js
@@ -283,22 +283,22 @@ function init(){
});
//delete question
- $(".qstDelete").live('click', function(){
- popupText.hide();
- $("#" + currentQstId).remove();
- for(var i in questionArray)
- if(questionArray[i].id == currentQstId){
- if(i == 0)
- questionArray.shift();
- else
- if((i+1) == questionArray.length)
- questionArray.pop();
- else
- questionArray = questionArray.slice(0,i).concat(questionArray.slice(i+1));
- break;
- }
- refreshQst();
- });
+// $(".qstDelete").live('click', function(){
+// popupText.hide();
+// $("#" + currentQstId).remove();
+// for(var i in questionArray)
+// if(questionArray[i].id == currentQstId){
+// if(i == 0)
+// questionArray.shift();
+// else
+// if((i+1) == questionArray.length)
+// questionArray.pop();
+// else
+// questionArray = questionArray.slice(0,i).concat(questionArray.slice(i+1));
+// break;
+// }
+// refreshQst();
+// });
//change options
$(".changeOptions").live('click', function(){
@@ -357,19 +357,19 @@ function init(){
});
//popup messages
- $(".qstDelete").live('mouseover', function(evt){
- popupFlag = true;
- popupText.text(sankoreLang.delete_question)
- .css("top", evt.pageY + 15)
- .css("left", evt.pageX - 40)
- .css({
- width:"130px"
- })
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
+// $(".qstDelete").live('mouseover', function(evt){
+// popupFlag = true;
+// popupText.text(sankoreLang.delete_question)
+// .css("top", evt.pageY + 15)
+// .css("left", evt.pageX - 40)
+// .css({
+// width:"130px"
+// })
+// .show("fast", function(){
+// if(!popupFlag)
+// popupText.hide();
+// });
+// });
$(".ansDelete").live('mouseover', function(evt){
popupFlag = true;
@@ -401,14 +401,14 @@ function init(){
}
});
- $(".qstDelete, .ansDelete, .newAnswer input").live('mousemove', function(evt){
+ $(".ansDelete, .newAnswer input").live('mousemove', function(evt){
if(!mode){
popupText.css("top", evt.pageY + 15)
.css("left", evt.pageX - 40);
}
});
- $(".qstDelete, .ansDelete, .newAnswer input").live('mouseout', function(evt){
+ $(".ansDelete, .newAnswer input").live('mouseout', function(evt){
if(!mode){
popupFlag = false;
popupText.hide();
@@ -440,7 +440,7 @@ function init(){
//toggleButton.trigger("click");
//show data in display mode
function displayData(){
- $("#addQstDiv").hide();
+// $("#addQstDiv").hide();
$(".qstDiv").hide();
addToPage(questionArray);
}
@@ -455,7 +455,7 @@ function init(){
$(".qstDivDisplay").remove();
- $("#addQstDiv").show('fast');
+// $("#addQstDiv").show('fast');
$(".qstDiv").show('fast');
}
@@ -466,7 +466,7 @@ function init(){
var qstDiv = $("<div class='qstDivDisplay' id='" + array[i].id + "qstDivDisplay'>");
var spanOptConn = $("<div class='spanOptConn'>").appendTo(qstDiv);
- var qstNumber = $("<span class='qstNumber'>" + sankoreLang.question + " " + counter + "</span>").appendTo(spanOptConn);
+// var qstNumber = $("<span class='qstNumber'>" + sankoreLang.question + " " + counter + "</span>").appendTo(spanOptConn);
var qstContent = $("<div class='qstContentDisplay'>" + array[i].text + "</div>").appendTo(qstDiv);
var ansDiv = $("<div class='ansDiv' id='" + array[i].id + "ansDiv'>").appendTo(qstDiv);
@@ -534,13 +534,13 @@ function addQstBlock(id, text, type, style){
var qstDiv = $("<div class='qstDiv' id='" + id + "' " + style + ">");
var spanOptConn = $("<div class='spanOptConn'>").appendTo(qstDiv);
- var count = $(".qstNumber").size();
- var qstNumber = $("<span class='qstNumber'>" + sankoreLang.q + (count + 1) + "</span>").appendTo(spanOptConn);
+// var count = $(".qstNumber").size();
+// var qstNumber = $("<span class='qstNumber'>" + sankoreLang.q + (count + 1) + "</span>").appendTo(spanOptConn);
var qstOptions = $("<div class='qstOptions' id='" + id + "qstOptions'>").appendTo(spanOptConn);
var changeOptions = $("<button class='changeOptions'>" + sankoreLang.options + "</button>").appendTo(qstOptions);
var applyChanges = $("<button class='applyChanges' style='display: none;'>" + sankoreLang.close + "</button>").appendTo(qstOptions);
- var qstDelete = $("<button class='qstDelete'>").appendTo(qstOptions);
+// var qstDelete = $("<button class='qstDelete'>").appendTo(qstOptions);
var qstOptChoice = $("<div class='qstOptChoice' id='" + id + "qstOptChoice' style='display: none;'>").appendTo(qstDiv);
var optDesc = $("<div style='height: 65px;'>").appendTo(qstOptChoice);
@@ -590,7 +590,7 @@ function addQstBlock(id, text, type, style){
var ansDiv = $("<div class='ansDiv' id='" + id + "ansDiv'>").appendTo(qstDiv);
var ansAdd = $("<button class='ansAdd'>" + sankoreLang.add_answer + "</button>").appendTo(ansDiv);
qstDiv.insertBefore("#addQstDiv");
- $("#addQsqSpan1").text(sankoreLang.q + (count + 2));
+// $("#addQsqSpan1").text(sankoreLang.q + (count + 2));
}
//add answers
@@ -770,4 +770,4 @@ function changeStyle(val){
$("body, html").addClass("without_radius").removeClass("radius_ft");
break;
}
-}
\ No newline at end of file
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/scripts/selQuestionApp.js b/Sankore-3.1/resources/library/interactivities/Choisir.wgt/scripts/selQuestionApp.js
deleted file mode 100644
index aa323e0..0000000
--- a/Sankore-3.1/resources/library/interactivities/Choisir.wgt/scripts/selQuestionApp.js
+++ /dev/null
@@ -1,793 +0,0 @@
-/*
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program 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
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-var sankoreLang = {
- edit: "Edit",
- display:"Display",
- question:"Question",
- example_question:"This is an example of the question",
- answer:"This is one possible answer",
- q:"Q",
- add_new_question:" Add a new question ...",
- options:"Options",
- close:"Close",
- delete_question:"Delete question",
- delete_answer:"Delete the possibility",
- right_answer:"Right answer",
- template_question:"Enter your question here ...",
- template_answer:"Enter one possible answer here ...",
- add_answer:"Add one possible answer",
- select_text:"Choose the right answer",
- options_desc:"You can choose one of the three options of displaying possibilities.",
- radio_desc:"One right answer only and the possibilities are displayed as radio buttons.",
- checkbox_desc:"Several right answers and possibilities are displayed as checkboxes.",
- select_desc:"One right answer only and possibilities are displayed as pull-down menu.",
- a:"A",
- wgt_name: "Choose the right answer",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p><h2> Choose the right answer</h2></p>" +
-"<p><h3> Multiple-Choice Question (MCQ)</h3></p>" +
-"<p>Multiple-choice question. The goal is to choose the correct answer.</p>" +
-"<p>âReloadâ button resets the exercises.</p>" +
-
-"<p> Enter the âEditâ mode to :</p>" +
-"<ul><li> choose the theme of interactivity : pad, slate or none (none by default),</li>" +
-"<li> modify an exercise or create a new one.</li></ul>" +
-
-"<p>To create a new exercise :</p>" +
-"<ul> <li> click on âAdd a new questionâ,</li>" +
-"<li>edit the text field clicking on the text field âEnter your question here ... â,</li>" +
-"<li>click on âOptionsâ to select the type of our MCQ (one correct answer, multiple correct answers, drop down) and close it,</li>" +
-"<li>add a new possible answer if needed,</li>" +
-"<li>modify the text field clicking on it.</li>" +
-"<li>set the correct answer by clicking in the checkbox to the left of the text field.</li></ul>" +
-"<p>To remove a label, click on the cross button on the frame.</p>" +
-"<p>To delete a possible answer click on the cross on the left.</p>" +
-"<p>To delete a question, click on the cross on the left.</p>" +
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-var questionArray;
-var currentQstId = "";
-var lang = ""; //locale language
-var begin = true;
-
-function init(){
-
- //variables
- var toggleFlag = false;
- var endFlag = false;
- var mode = true;
- questionArray = new Array();
- var popupFlag = false
- var flagForSelect = false;
-
- $("#wgt_display").text(sankoreLang.display);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_name").text(sankoreLang.wgt_name);
- $("#wgt_reload").text(sankoreLang.reload);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- //popup message
- var popupText = $("<div id='popupWordInfo' class='popupWordInfo'></div>").appendTo("#data");
-
- // adding question block
- var addQstDiv = $("<div id='addQstDiv' class='addQstDiv'>").appendTo("#data");
- var addQstButton = $("<button id='addQstButton' class='addQstButton'>").appendTo("#addQstDiv");
- var addQsqSpan1 = $("<span id='addQsqSpan1'>" + sankoreLang.q + "1</span>").appendTo("#addQstButton");
- var addQsqSpan2 = $("<span id='addQsqSpan2'>" + sankoreLang.add_new_question + "</span>").appendTo("#addQstButton");
-
- //import saved data
- if(window.sankore){
- if(sankore.preference("qstArrayData","") && sankore.preference("qstArrayData","") != "[]")
- questionArray = jQuery.parseJSON(sankore.preference("qstArrayData",""));
- else
- questionArray = jQuery.parseJSON('[{"text":"' + sankoreLang.example_question + '","type":"1","id":538,"rightAns":"2","answers":[{"id":953,"text":"' + sankoreLang.answer + ' 1.","value":1,"state":"","was":false},{"id":526,"text":"' + sankoreLang.answer + ' 2.","value":2,"state":"","was":false},{"id":473,"text":"' + sankoreLang.answer + ' 3.","value":3,"state":"","was":false}]}]');
-
- for(i in questionArray){
- addQstBlock(questionArray[i].id, questionArray[i].text, questionArray[i].type,"style='display: none;'");
- for(j in questionArray[i].answers)
- addAnsBlock(questionArray[i].answers[j].id, questionArray[i].id, questionArray[i].answers[j].text, true, questionArray[i].rightAns, questionArray[i].type);
- }
- displayData();
- }
- else{
- questionArray = jQuery.parseJSON('[{"text":"' + sankoreLang.example_question + '","type":"1","id":538,"rightAns":"2","answers":[{"id":953,"text":"' + sankoreLang.answer + ' 1.","value":1,"state":"","was":false},{"id":526,"text":"' + sankoreLang.answer + ' 2.","value":2,"state":"","was":false},{"id":473,"text":"' + sankoreLang.answer + ' 3.","value":3,"state":"","was":false}]}]');
- for(i in questionArray){
- addQstBlock(questionArray[i].id, questionArray[i].text, questionArray[i].type,"style='display: none;'");
- for(j in questionArray[i].answers)
- addAnsBlock(questionArray[i].answers[j].id, questionArray[i].id, questionArray[i].answers[j].text, true, questionArray[i].rightAns, questionArray[i].type);
- }
- displayData();
- }
-
- //saving widget data into sankore object for a correct import
- if (window.widget) {
- window.widget.onleave = function(){
- sankore.setPreference("qstArrayData", JSON.stringify(questionArray));
- sankore.setPreference("choisir_style", $("#style_select").find("option:selected").val());
- }
- }
-
- if(window.sankore)
- if(sankore.preference("choisir_style","")){
- changeStyle(sankore.preference("choisir_style",""));
- $("#style_select").val(sankore.preference("choisir_style",""));
- } else
- changeStyle("3")
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display","none");
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- displayData(true);
- mode = true;
- if(window.sankore){
- sankore.setPreference("qstArrayData", JSON.stringify(questionArray));
- sankore.setPreference("choisir_style", $("#style_select").find("option:selected").val());
- }
- }
- } else {
- if(!$(this).hasClass("selected")){
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- editData();
- mode = false;
- }
- }
- });
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").slideUp("100", function(){
- tmp.removeClass("open");
- $("#data").show();
- });
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- $("#data").hide();
- $("#help").slideDown("100", function(){
- tmp.addClass("open");
- });
- }
- });
-
- $("#wgt_reload").text(sankoreLang.reload).click(function(){
- if($("#wgt_edit").css("display") == "none")
- $("#wgt_display").trigger("click");
- else{
- editData();
- mode = false;
- displayData(true);
- mode = true;
- }
- });
-
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- // add question
- addQstButton.click(function(){
- //question block
- var id = Math.round(Math.random()*1000);
- var obj = new Question();
- obj.id = id;
- questionArray.push(obj);
-
- addQstBlock(id, sankoreLang.template_question, "","");
-
- if(window.sankore)
- sankore.setPreference("qstArrayData", JSON.stringify(questionArray));
- });
-
- //set used at this moment question id into the variable
- $(".qstDiv").live('mouseover', function() {
- currentQstId = this.id;
- });
-
- //set used at this moment question id into the variable
- $(".qstDivDisplay").live('mouseover', function() {
- if(!flagForSelect)
- currentQstId = this.id.replace("qstDivDisplay","");
- });
-
- //adding new answer
- $(".ansAdd").live('click', function(){
-
- var id = Math.round(Math.random()*1000);
- var obj = new Answer();
- obj.id = id;
- getNeededElement(questionArray, currentQstId).answers.push(obj);
-
- addAnsBlock(id, currentQstId, sankoreLang.template_answer);
- });
-
- //set answer text
- $(".ansContent").live('keyup', function(event){
- var id = $(event.target).attr("id").replace("ansContent","");
- getNeededElement(getNeededElement(questionArray, currentQstId).answers,id).text = $(event.target).text();
- });
-
- //set question text
- $(".qstContent").live('keyup', function(event){
- var id = $(event.target).attr("id").replace("qstContent","");
- getNeededElement(questionArray, id).text = $(event.target).text();
- });
-
- //question div border
- $(".qstContent").live('mouseover', function(event){
- $(event.target).css({
- border:"3px solid #00C6FF"
- });
- });
-
- // deleting question div border
- $(".qstContent").live('mouseout', function(event){
- $(event.target).css({
- border:"3px solid #ccc"
- });
- });
-
- //answer div border
- $(".ansContent").live('mouseover', function(event){
- $(event.target).css({
- border:"3px solid #00C6FF"
- });
- });
-
- // deleting answer div border
- $(".ansContent").live('mouseout', function(event){
- $(event.target).css({
- border:"3px solid #ccc"
- });
- });
-
- //delete answer
- $(".ansDelete").live('click', function(){
- popupText.hide();
- var id = this.id.replace("ansDelete","");
- $("#" + currentQstId + " #" + id).remove();
- for(var i in questionArray)
- if(questionArray[i].id == currentQstId){
- questionArray[i].rightAns = questionArray[i].rightAns.replace($("#" + currentQstId + " #" + id + " input:checkbox").val(),"");
- for(var j in questionArray[i].answers)
- if(questionArray[i].answers[j].id == id){
- if(j == 0)
- questionArray[i].answers.shift();
- else
- if((j+1) == questionArray[i].answers.length)
- questionArray[i].answers.pop();
- else
- questionArray[i].answers = questionArray[i].answers.slice(0,j).concat(questionArray[i].answers.slice(j+1));
- break;
- }
- }
- refreshAns();
- });
-
- //delete question
- $(".qstDelete").live('click', function(){
- popupText.hide();
- $("#" + currentQstId).remove();
- for(var i in questionArray)
- if(questionArray[i].id == currentQstId){
- if(i == 0)
- questionArray.shift();
- else
- if((i+1) == questionArray.length)
- questionArray.pop();
- else
- questionArray = questionArray.slice(0,i).concat(questionArray.slice(i+1));
- break;
- }
- refreshQst();
- });
-
- //change options
- $(".changeOptions").live('click', function(){
- $("#" + currentQstId + "qstOptions .changeOptions").hide();
- $("#" + currentQstId + "qstOptions .applyChanges").show();
- $("#" + currentQstId + "qstOptChoice").show('fast');
- });
-
- //apply changes
- $(".applyChanges").live('click', function(){
- $("#" + currentQstId + "qstOptions .applyChanges").hide();
- $("#" + currentQstId + "qstOptions .changeOptions").show();
- $("#" + currentQstId + "qstOptChoice").hide('fast');
- });
-
- //select option
- $(".qstOptChoice input:radio").live('click', function(event){
- if(!mode){
- $("#" + currentQstId + "qstOptChoice input:radio").removeAttr("checked");
- $(event.target).attr("checked", "checked");
- getNeededElement(questionArray, currentQstId).type = $(event.target).attr("value");
- }
- });
-
- //select right ansver in edit mode and answer question in display mode
- $(".newAnswer input").live('click', function(event){
-
- if(!mode){
- if(getNeededElement(questionArray, currentQstId).type == "1" || getNeededElement(questionArray, currentQstId).type == "3"){
- $("#" + currentQstId + "ansDiv input").removeAttr("checked");
- $(event.target).attr("checked", "checked");
- getNeededElement(questionArray, currentQstId).rightAns = $(event.target).attr("value");
- } else {
- (event.target.checked) ? $(event.target).attr("checked", "checked") : $(event.target).removeAttr("checked", "checked");
- getNeededElement(questionArray, currentQstId).rightAns = "";
- for(var i in $("#" + currentQstId + "ansDiv input")){
- if($("#" + currentQstId + "ansDiv input")[i].checked)
- getNeededElement(questionArray, currentQstId).rightAns += $("#" + currentQstId + "ansDiv input")[i].value + ", ";
- }
- }
- } else {
- if(event.target.type == "radio"){
- checkingAnswers("radio", getNeededElement(questionArray, currentQstId).answers, event.target.value);
- if(event.target.value == getNeededElement(questionArray, currentQstId).rightAns)
- $(event.target).next().next().css("background-color","#6c0");
- else
- $(event.target).next().next().css("background-color","red");
- } else {
- checkingAnswers("box", getNeededElement(questionArray, currentQstId).answers, event.target.value, event.target.checked);
- if(getNeededElement(questionArray, currentQstId).rightAns.replace(/,/g,"").indexOf(event.target.value + " ", 0) != -1)
- $(event.target).next().next().css("background-color","#6c0");
- else
- $(event.target).next().next().css("background-color","red");
- }
- }
- });
-
- //popup messages
- $(".qstDelete").live('mouseover', function(evt){
- popupFlag = true;
- popupText.text(sankoreLang.delete_question)
- .css("top", evt.pageY + 15)
- .css("left", evt.pageX - 40)
- .css({
- width:"130px"
- })
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
-
- $(".ansDelete").live('mouseover', function(evt){
- popupFlag = true;
- popupText.text(sankoreLang.delete_answer)
- .css("top", evt.pageY + 15)
- .css("left", evt.pageX - 40)
- .css({
- width:"130px"
- })
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- });
-
- $(".newAnswer input").live('mouseover', function(evt){
- if(!mode){
- popupFlag = true;
- popupText.text(sankoreLang.right_answer)
- .css("top", evt.pageY + 15)
- .css("left", evt.pageX - 40)
- .css({
- width:"130px"
- })
- .show("fast", function(){
- if(!popupFlag)
- popupText.hide();
- });
- }
- });
-
- $(".qstDelete, .ansDelete, .newAnswer input").live('mousemove', function(evt){
- if(!mode){
- popupText.css("top", evt.pageY + 15)
- .css("left", evt.pageX - 40);
- }
- });
-
- $(".qstDelete, .ansDelete, .newAnswer input").live('mouseout', function(evt){
- if(!mode){
- popupFlag = false;
- popupText.hide();
- }
- });
-
- //answer the questions
-
- $("select").live('change', function(evt){
- if(mode){
- checkingAnswers("sel", getNeededElement(questionArray, currentQstId).answers, event.target.value);
- if(event.target.value == getNeededElement(questionArray, currentQstId).rightAns)
- $(event.target).css("background-color","#6c0");
- else
- $(event.target).css("background-color","red");
- if(event.target.value == 0)
- $(event.target).css("background-color","");
- flagForSelect = false;
- }
- });
-
- $("select").live('mousedown', function(evt){
- if(mode){
- flagForSelect = true;
- }
- });
-
- //toggle button click trigger
- //toggleButton.trigger("click");
- //show data in display mode
- function displayData(){
- $("#addQstDiv").hide();
- $(".qstDiv").hide();
- addToPage(questionArray);
- }
-
- //set widget in edit mode
- function editData(){
- for(var i in questionArray)
- for(var j in questionArray[i].answers){
- questionArray[i].answers[j].state = "";
- questionArray[i].answers[j].was = false
- }
-
- $(".qstDivDisplay").remove();
-
- $("#addQstDiv").show('fast');
- $(".qstDiv").show('fast');
- }
-
- // show questions and answers in display mode
- function addToPage(array){
- var counter = 1;
- for(var i in array){
-
- var qstDiv = $("<div class='qstDivDisplay' id='" + array[i].id + "qstDivDisplay'>");
- var spanOptConn = $("<div class='spanOptConn'>").appendTo(qstDiv);
- var qstNumber = $("<span class='qstNumber'>" + sankoreLang.question + " " + counter + "</span>").appendTo(spanOptConn);
- var qstContent = $("<div class='qstContentDisplay'>" + array[i].text + "</div>").appendTo(qstDiv);
- var ansDiv = $("<div class='ansDiv' id='" + array[i].id + "ansDiv'>").appendTo(qstDiv);
-
- var ansCount = 1;
- var type = array[i].type;
- var selInput = $("<select>");
- if(type == 3){
- var newAnswer = $("<div class='newAnswer'>");
- newAnswer.appendTo(ansDiv);
- var selectSpan = $("<span id='answerText'>").appendTo(newAnswer);
- selInput.appendTo(selectSpan);
- $("<option value='0'>" + sankoreLang.select_text + "</option>").appendTo(selInput);
- }
- for(var j in array[i].answers){
- switch(type){
- case "1":
- var local_state = "";
- var local_color = "";
- if(begin){
- local_state = array[i].answers[j].state;
- local_color = (array[i].answers[j].value == array[i].rightAns)?((array[i].answers[j].was)?"style='background-color: #6c0;'":""):((array[i].answers[j].was)?"style='background-color: red;'":"");
- }
- newAnswer = $("<div class='newAnswer'>");
- var ansInput = $("<input type='radio' name='" + counter + "' value='" + array[i].answers[j].value + "' " + local_state + " style='float: left; margin-right: 10px;'/>").appendTo(newAnswer);
- var ansSpan = $("<span class='ansSpanDisplay'>" + ansCount + ".</span>").appendTo(newAnswer);
- var ansContent = $("<div class='ansContentDisplay' " + local_color + "><span id='answerText'>" + array[i].answers[j].text + "</span></div>").appendTo(newAnswer);
- newAnswer.appendTo(ansDiv);
- break;
- case "2":
- local_state = "";
- local_color = "";
- if(begin){
- local_state = (array[i].answers[j].state)?"checked":"";
- local_color = (array[i].rightAns.replace(/,/g,"").indexOf(array[i].answers[j].value + " ", 0) != -1)?((array[i].answers[j].was)?"style='background-color: #6c0;'":""):((array[i].answers[j].was)?"style='background-color: red;'":"");
- }
- newAnswer = $("<div class='newAnswer'>");
- ansInput = $("<input type='checkbox' value='" + array[i].answers[j].value + "' " + local_state + " style='float: left; margin-right: 10px;'/>").appendTo(newAnswer);
- ansSpan = $("<span class='ansSpanDisplay'>" + ansCount + ".</span>").appendTo(newAnswer);
- ansContent = $("<div class='ansContentDisplay' " + local_color + "><span id='answerText'>" + array[i].answers[j].text + "</span></div>").appendTo(newAnswer);
- newAnswer.appendTo(ansDiv);
- break;
- case "3":
- local_state = "";
- local_color = "";
- if(begin){
- local_state = (array[i].answers[j].state)?"selected":"";
- local_color = (array[i].answers[j].value == array[i].rightAns)?((array[i].answers[j].was)?"#6c0":""):((array[i].answers[j].was)?"red":"");
- }
- ansInput = $("<option value='" + array[i].answers[j].value + "' " + local_state + ">" + array[i].answers[j].text + "</option>").appendTo(selInput);
- if(local_state && local_color)
- selInput.css("background-color",local_color);
- break;
- }
- ansCount++;
- }
- qstDiv.appendTo("#data");
- counter++;
- }
- begin = false;
- }
-}
-
-//add new question block in a edit mode
-function addQstBlock(id, text, type, style){
- var qstDiv = $("<div class='qstDiv' id='" + id + "' " + style + ">");
- var spanOptConn = $("<div class='spanOptConn'>").appendTo(qstDiv);
-
- var count = $(".qstNumber").size();
- var qstNumber = $("<span class='qstNumber'>" + sankoreLang.q + (count + 1) + "</span>").appendTo(spanOptConn);
-
- var qstOptions = $("<div class='qstOptions' id='" + id + "qstOptions'>").appendTo(spanOptConn);
- var changeOptions = $("<button class='changeOptions'>" + sankoreLang.options + "</button>").appendTo(qstOptions);
- var applyChanges = $("<button class='applyChanges' style='display: none;'>" + sankoreLang.close + "</button>").appendTo(qstOptions);
- var qstDelete = $("<button class='qstDelete'>").appendTo(qstOptions);
-
- var qstOptChoice = $("<div class='qstOptChoice' id='" + id + "qstOptChoice' style='display: none;'>").appendTo(qstDiv);
- var optDesc = $("<div style='height: 65px;'>").appendTo(qstOptChoice);
- var optDescImg = $("<div class='optDescImg'>").appendTo(optDesc);
- var optDescText = $("<div class='optDescText'>" + sankoreLang.options_desc + "</div>").appendTo(optDesc);
-
- var type1 = $("<div class='type'>").appendTo(qstOptChoice);
- var contentType1 = $("<div class='contentType'>").appendTo(type1);
- var divType1 = $("<div class='divType1'>").appendTo(contentType1);
- var textType1 = $("<div class='textType'>" + sankoreLang.radio_desc + "</div>").appendTo(contentType1);
-
- var type2 = $("<div class='type'>").appendTo(qstOptChoice);
- var contentType2 = $("<div class='contentType'>").appendTo(type2);
- var divType2 = $("<div class='divType2'>").appendTo(contentType2);
- var textType2 = $("<div class='textType'>" + sankoreLang.checkbox_desc + "</div>").appendTo(contentType2);
-
- var type3 = $("<div class='type'>").appendTo(qstOptChoice);
- var contentType3 = $("<div class='contentType'>").appendTo(type3);
- var divType3 = $("<div class='divType3'>").appendTo(contentType3);
- var textType3 = $("<div class='textType'>" + sankoreLang.select_desc + "</div>").appendTo(contentType3);
-
- switch(type){
- case "1":
- var radioType1 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='1' checked/><div></div>").appendTo(type1);
- var radioType2 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='2'/><div></div>").appendTo(type2);
- var radioType3 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='3'/><div></div>").appendTo(type3);
- break;
- case "2":
- radioType1 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='1'/><div></div>").appendTo(type1);
- radioType2 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='2' checked/><div></div>").appendTo(type2);
- radioType3 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='3'/><div></div>").appendTo(type3);
- break;
- case "3":
- radioType1 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='1'/><div></div>").appendTo(type1);
- radioType2 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='2'/><div></div>").appendTo(type2);
- radioType3 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='3' checked/><div></div>").appendTo(type3);
- break;
- default:
- radioType1 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='1'/><div></div>").appendTo(type1);
- radioType2 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='2'/><div></div>").appendTo(type2);
- radioType3 = $("<div class='radioDiv'><div class='radioType'><input type='radio' value='3'/><div></div>").appendTo(type3);
- break;
- }
-
- var qstContent = $("<div class='qstContent' id='" + id + "qstContent' contenteditable='true'>" + text + "</div>").appendTo(qstDiv);
-
- var ansDiv = $("<div class='ansDiv' id='" + id + "ansDiv'>").appendTo(qstDiv);
- var ansAdd = $("<button class='ansAdd'>" + sankoreLang.add_answer + "</button>").appendTo(ansDiv);
- qstDiv.insertBefore("#addQstDiv");
- $("#addQsqSpan1").text(sankoreLang.q + (count + 2));
-}
-
-//add answers
-function addAnsBlock(id, currId, text, stage, rightAns, type){
- var newAnswer = $("<div class='newAnswer' id='" + id + "'>");
- var value;
- var check = "";
- if(stage){
- value = getNeededElement(getNeededElement(questionArray, currId).answers,id).value;
- if(type != "2"){
- if(rightAns == value)
- check = "checked='true'";
- }
- else {
- rightAns = rightAns.replace(/,/g,"");
- if(rightAns.indexOf(value + " ", 0) != -1)
- check = "checked='true'";
- }
- }
- else {
- value = ($("#" + currId + " .newAnswer input:checkbox").last().val()) ? parseInt($("#" + currId + " .newAnswer input:checkbox").last().val()) + 1 : 1;
- getNeededElement(getNeededElement(questionArray, currId).answers,id).value = value;
- }
- var count = $("#" + currId + " .newAnswer").size() + 1;
- var input = $("<input type='checkbox' style='float: left;' value='" + value + "' " + check + ">").appendTo(newAnswer);
- var ansSpan = $("<span class='ansSpan'>" + sankoreLang.a + count + "</span>").appendTo(newAnswer);
- var ansContent = $("<div class='ansContent' id='" + id +"ansContent' contenteditable='true'>" + text + "</div>").appendTo(newAnswer);
- var ansDelete = $("<button class='ansDelete' id='" + id + "ansDelete'>").appendTo(newAnswer);
- newAnswer.insertBefore("#" + currId + "ansDiv .ansAdd");
-
- if(window.sankore)
- sankore.setPreference("qstArrayData", JSON.stringify(questionArray));
-}
-
-//get needed array element
-function getNeededElement(array,id){
- for(var i in array)
- if(array[i].id == id)
- return array[i];
-}
-
-//check on fill
-function checkArrayOnFill(array){
- var count = 0;
-
- for(var i in array)
- count++;
-
- return count;
-}
-
-//refresh answers numbers
-function refreshAns(){
- var count = $("#" + currentQstId + " .newAnswer").size();
- for(var i = 0; i < count; i ++)
- $($("#" + currentQstId + " .newAnswer span")[i]).text(sankoreLang.a + (i+1));
-}
-
-//refresh questions numbers
-function refreshQst(){
- var count = $(".qstNumber").size();
- for(var i = 0; i < count; i ++)
- $($(".qstNumber")[i]).text(sankoreLang.q + (i+1));
- $("#addQsqSpan1").text(sankoreLang.q + ++count);
-}
-
-//check answers
-function checkingAnswers(type, array, value, state){
- switch(type){
- case "radio":
- for(var i in array)
- if(array[i].value == value){
- array[i].state = "checked";
- array[i].was = true;
- } else
- array[i].state = "";
- break;
- case "box":
- for(i in array)
- if(array[i].value == value){
- array[i].state = state;
- array[i].was = true;
- }
- break;
- case "sel":
- for(i in array)
- if(array[i].value == value){
- array[i].state = "selected";
- array[i].was = true;
- } else
- array[i].state = "";
- break;
- }
-}
-
-//question constructor
-function Question(){
-
- this.text = "";
-
- this.type = "1";
-
- this.id = "";
-
- this.rightAns = "";
-
- this.answers = new Array();
-
-}
-
-//answer constructor
-function Answer(){
-
- this.id = "";
-
- this.text = "";
-
- this.value = "";
-
- this.state = "";
-
- this.was = false;
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/config.xml
index c7b0cdb..33c3873 100644
--- a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/config.xml
@@ -5,7 +5,7 @@
version="1.1"
width="920"
height="600"
- ub:resizable="true">
+ ub:resizable="false">
<name>Choisir</name>
<author href="http://www.getuniboard.com"
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/css/basic.css b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/css/basic.css
index 65f6e82..8f8a6b2 100644
--- a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/css/basic.css
+++ b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/css/basic.css
@@ -301,18 +301,7 @@ body{
}
#wgt_add{
- margin-left: 10px;
- padding-right: 10px;
- border: 1px solid #666;
- border-radius: 15px;
- padding-left: 30px;
- background: url(../images/plus.png) -2px -2px no-repeat;
- display: inline-block;
-}
-
-#wgt_add:hover{
- border-color: black;
- cursor: pointer;
+ margin: 0 0 0 10px;
}
.btl_pad{
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/index.html
index ffce672..ef8827e 100644
--- a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/index.html
@@ -3,86 +3,30 @@
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script type="text/javascript" src="scripts/jquery-1.6.2.min.js"></script>
- <script src="scripts/jquery.disable.text.select.js" type="text/javascript"></script>
- <script type="text/javascript" src="scripts/blackYellow.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en")
- init();
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- init();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
- });
-
+ }
+ });
+ });
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- <div id="wgt_add"></div>
- </div>
- </div>
- <div id="data">
-
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
-
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
+
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/en/index.html
new file mode 100644
index 0000000..a6cc2e9
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/en/index.html
@@ -0,0 +1,66 @@
+<!--
+To change this template, choose Tools | Templates
+and open the template in the editor.
+-->
+<!DOCTYPE html>
+<html>
+ <head>
+ <title></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../scripts/jquery-1.6.2.min.js"></script>
+ <script src="../../scripts/jquery.disable.text.select.js" type="text/javascript"></script>
+ <script type="text/javascript" src="scripts/blackYellow.js"></script>
+ <script type="text/javascript">
+
+ $(document).ready(function(){
+ init();
+ });
+
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ <button id="wgt_add"></button>
+ </div>
+ </div>
+ <div id="data">
+
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/en/scripts/blackYellow.js
similarity index 100%
rename from Sankore-3.1/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js
rename to Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/en/scripts/blackYellow.js
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/fr/index.html b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/fr/index.html
index 6f4218e..a6cc2e9 100644
--- a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/fr/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/fr/index.html
@@ -46,7 +46,7 @@ and open the template in the editor.
<option value="3"></option>
</select>
</label>
- <div id="wgt_add"></div>
+ <button id="wgt_add"></button>
</div>
</div>
<div id="data">
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/ru/index.html b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/ru/index.html
index 3ea9874..cc98c95 100644
--- a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/ru/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Contraste.wgt/locales/ru/index.html
@@ -46,7 +46,7 @@ and open the template in the editor.
<option value="3"></option>
</select>
</label>
- <div id="wgt_add"></div>
+ <button id="wgt_add"></button>
</div>
</div>
<div id="data">
diff --git a/Sankore-3.1/resources/library/interactivities/Des.wgt/js/help-template.js b/Sankore-3.1/resources/library/interactivities/Des.wgt/js/help-template.js
index f5cdf8c..0fef856 100644
--- a/Sankore-3.1/resources/library/interactivities/Des.wgt/js/help-template.js
+++ b/Sankore-3.1/resources/library/interactivities/Des.wgt/js/help-template.js
@@ -7,7 +7,7 @@
<p>Enter the "Edit" mode to :</p>
<ul>
<li>choose the theme of the App : pad, slate, or none (by default : pad),</li>
-<li>determine the number of dices you want to use for your activity (2-6).</li>
+<li>determine the number of dices you want to use for your activity (1-6).</li>
</ul>
<p>The calculations and reasoning could be written on the page (outside the App).</p>
<p>"Display" button comes back to the activity.</p>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Des.wgt/js/help_fr-template.js b/Sankore-3.1/resources/library/interactivities/Des.wgt/js/help_fr-template.js
index 8e06acb..bb01029 100644
--- a/Sankore-3.1/resources/library/interactivities/Des.wgt/js/help_fr-template.js
+++ b/Sankore-3.1/resources/library/interactivities/Des.wgt/js/help_fr-template.js
@@ -10,7 +10,7 @@
<p>Le bouton âModifierâ vous permet :</p>
<ul>
<li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut tablette), </li>
-<li>de déterminer le nombre de dés que vous voulez utiliser pour votre activité (de 2 à 6). </li>
+<li>de déterminer le nombre de dés que vous voulez utiliser pour votre activité (de 1 à 6). </li>
</ul>
<p>Le bouton âAfficherâ vous permet dâutiliser lâactivité.</p>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Des.wgt/js/templates.js b/Sankore-3.1/resources/library/interactivities/Des.wgt/js/templates.js
index 670a9d7..cf24ec3 100644
--- a/Sankore-3.1/resources/library/interactivities/Des.wgt/js/templates.js
+++ b/Sankore-3.1/resources/library/interactivities/Des.wgt/js/templates.js
@@ -19,6 +19,7 @@ var parametersTemplate =
'<div class="inline">'+
'<label>{{fr.njin.i18n.de.parameters.label.count}}'+
'<select name="count" role="parameter">'+
+ '<option value="1">1</option>'+
'<option value="2">2</option>'+
'<option value="3">3</option>'+
'<option value="4">4</option>'+
diff --git a/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/config.xml
index 76ba351..2c9f1dd 100644
--- a/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/config.xml
@@ -3,9 +3,9 @@
xmlns:ub="http://uniboard.mnemis.com/widgets"
id="http://www.njin.fr/sankore/apps/memory"
version="1.0"
- width="760"
- height="580"
- ub:resizable="true">
+ width="850"
+ height="600"
+ ub:resizable="false">
<name>La boite</name>
<author href="http://www.njin.fr" email="contact at njin.fr">njin</author>
diff --git a/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/css/ubw-main.css b/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/css/ubw-main.css
index 66280eb..95ec118 100644
--- a/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/css/ubw-main.css
+++ b/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/css/ubw-main.css
@@ -1,308 +1,319 @@
-html, body {
- margin:0;
- padding: 0;
- font-family: "helvetica neue";
- font-size: 14px;
- color: #666666;
-}
-
-#ubwidget {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- background: url("images/bg.png");
-}
-
-.theme-pad #ubwidget {
- border-radius: 40px;
- border-width: 52px;
-
- -webkit-border-image: url("images/pad-bd.png") 52 repeat;
- -moz-border-image: url("images/pad-bd.png") 52 repeat;
- border-image: url("images/pad-bd.png") 52 repeat;
-}
-
-.theme-slate #ubwidget {
- border-radius: 44px;
- border-width: 52px;
-
- -webkit-border-image: url("images/slate-bd.png") 52 repeat;
- -moz-border-image: url("images/slate-bd.png") 52 repeat;
- border-image: url("images/slate-bd.png") 52 repeat;
-}
-
-#ubwidget > .wrapper {
- position: absolute;
- top: 0px;
- bottom: 0px;
- left: 0px;
- right: 0px;
- overflow: hidden;
-}
-
-
-.theme-slate #ubwidget > .wrapper, .theme-pad #ubwidget > .wrapper {
- position: absolute;
- top: -49px;
- bottom: -5px;
- left: -5px;
- right: -5px;
- overflow: hidden;
-}
-
-#toolbar {
- display: table;
- width: 100%;
- height: 44px;
- font-size: 24px;
- color: #FFCC99;
- padding:0 10px;
-}
-
-.theme-pad #toolbar, .theme-slate #toolbar {
- height: 38px;
- padding: 6px 0 0;
-}
-
-.theme-slate #toolbar {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
-}
-
-
-#toolbar > * {
- display: table-cell;
- height: 100%;
- vertical-align: middle;
-}
-
-#toolbar .actions {
- text-align: right;
-}
-
-#toolbar button, h1 {
- font-weight: normal;
- font-size: 24px;
- color: #FFCC99;
- margin: 0;
-}
-
-.theme-slate #toolbar button, .theme-slate h1 {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
-}
-
-#toolbar button {
- border: none;
- padding: none;
- outline: none;
- background: none;
-
- cursor: pointer;
- padding-left: 34px;
- margin-left: 10px;
- height: 32px;
-}
-
-#toolbar button span {
- display: block;
- line-height: 32px;
-}
-
-#toolbar button[role='edit'] {
- background: url("images/toolbar-edit.png") left top no-repeat;
-}
-
-#toolbar button[role='view'] {
- display: none;
- color: #FFF;
- background: url("images/toolbar-edit.png") left -32px no-repeat;
-}
-
-#toolbar button[role='reload'] {
- background: url("images/toolbar-reload.png") left top no-repeat;
-}
-
-#toolbar button[role='help'] {
- background: url("images/toolbar-help.png") left top no-repeat;
- display: none;
-}
-
-.hasHelp #toolbar button[role='help'] {
- display: inline-block;
-}
-
-.showHelp #toolbar button[role='help'] {
- color: #FFF;
- background-position: left -32px;
-}
-
-.theme-slate #toolbar button[role='edit'] {
- background-image: url("images/slate-toolbar-edit.png");
-}
-
-.theme-slate #toolbar button[role='view'] {
- text-shadow: #7F613F 0 -1px 0;
- background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
-}
-
-.theme-slate #toolbar button[role='reload'] {
- background-image: url("images/slate-toolbar-reload.png");
-}
-
-.theme-slate #toolbar button[role='help'] {
- background-image: url("images/slate-toolbar-help.png");
-}
-
-.showHelp.theme-slate #toolbar button[role='help'] {
- text-shadow: #7F613F 0 -1px 0;
-}
-
-
-.onEdit #toolbar button[role='view'] {
- display: inline-block;
-}
-
-.onEdit #toolbar button[role='edit'] {
- display: none;
-}
-
-#help {
- width: 300px;
- height: 400px;
- position: absolute;
- margin-top: 10px;
- right: 10px;
- z-index: 10000;
- display: none;
-}
-
-.showHelp #help {
- display: block;
-}
-
-#content {
- position: absolute;
- top: 44px;
- bottom: 0;
- overflow: auto;
- left: 0;
- right: 0;
-
- background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
-}
-
-#parameters {
- display:none;
- padding: 10px 20px;
- background: url("images/parameters-bg.png");
-
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- -mz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-
-#parameters label {
- font-style: italic;
-}
-
-#parameters label > select, #parameters label > input{
- margin-left: 10px;
-}
-
-#parameters > div.inline {
- display: inline-block;
-}
-
-#parameters > div.inline+div.inline {
- margin-left: 20px;
-}
-
-#parameters input[type=text],
-#parameters input[type=number] {
- height: 26px;
- border: 1px solid #BBB;
- background-color: #FFF;
-
- padding: 0 4px;
-
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- -ms-border-radius: 4px;
- border-radius: 4px;
-
- -webkit-box-shadow: 0 1px 0 #FFF;
- -moz-box-shadow: 0 1px 0 #FFF;
- -ms-box-shadow: 0 1px 0 #FFF;
- box-shadow: 0 1px 0 #FFF;
-}
-
-#parameters input.tiny {
- width: 40px;
-}
-
-#parameters input.small {
- width: 80px;
-}
-
-#parameters input.medium {
- width: 120px;
-}
-
-#parameters input.long {
- width: 160px;
-}
-
-#scene {
- padding: 20px;
-}
-
-#scene > * {
- margin: 0 auto;
-}
-.onEdit #scene {
-}
-
-.onEdit #parameters {
- display: block;
-}
-
-/*
-.card-container {
- -webkit-perspective: 600px;
- width:100%;
- height: 100%;
-}
-.card {
- position: relative;
- width:100%;
- height: 100%;
-}
-.card > div {
- position: absolute;
- width:100%;
- height: 100%;
- -webkit-transform-style: preserve-3d;
- -webkit-transition: all .5s ease-in-out;
- -webkit-backface-visibility: hidden;
-}
-.card > div:first-child {
- -webkit-transform: rotateY( 0deg );
-}
-.card > div:last-child {
- -webkit-transform: rotateY( -180deg );
-}
-.card.flip > div:first-child {
- -webkit-transform: rotateY( 180deg );
-}
-.card.flip > div:last-child {
- -webkit-transform: rotateY( 0deg );
-}
-*/
+html, body {
+ margin:0;
+ padding: 0;
+ font-family: "helvetica neue";
+ font-size: 14px;
+ color: #666666;
+}
+
+#ubwidget {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: url("images/bg.png");
+}
+
+.theme-pad #ubwidget {
+ border-radius: 40px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/pad-bd.png") 52 repeat;
+ -moz-border-image: url("images/pad-bd.png") 52 repeat;
+ border-image: url("images/pad-bd.png") 52 repeat;
+}
+
+.theme-slate #ubwidget {
+ border-radius: 44px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/slate-bd.png") 52 repeat;
+ -moz-border-image: url("images/slate-bd.png") 52 repeat;
+ border-image: url("images/slate-bd.png") 52 repeat;
+}
+
+#ubwidget > .wrapper {
+ position: absolute;
+ top: 0px;
+ bottom: 0px;
+ left: 0px;
+ right: 0px;
+ overflow: hidden;
+}
+
+
+.theme-slate #ubwidget > .wrapper, .theme-pad #ubwidget > .wrapper {
+ position: absolute;
+ top: -49px;
+ bottom: -5px;
+ left: -5px;
+ right: -5px;
+ overflow: hidden;
+}
+
+#toolbar {
+ display: table;
+ width: 100%;
+ height: 44px;
+ font-size: 24px;
+ color: #FFCC99;
+ padding:0 10px;
+}
+
+.theme-pad #toolbar, .theme-slate #toolbar {
+ height: 38px;
+ padding: 6px 0 0;
+}
+
+.theme-slate #toolbar {
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
+}
+
+
+#toolbar > * {
+ display: table-cell;
+ height: 100%;
+ vertical-align: middle;
+}
+
+#toolbar .actions {
+ text-align: right;
+}
+
+#toolbar button, h1 {
+ font-weight: normal;
+ font-size: 24px;
+ color: #FFCC99;
+ margin: 0;
+}
+
+.theme-slate #toolbar button, .theme-slate h1 {
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
+}
+
+#toolbar button {
+ border: none;
+ padding: none;
+ outline: none;
+ background: none;
+
+ cursor: pointer;
+ padding-left: 34px;
+ margin-left: 10px;
+ height: 32px;
+}
+
+#toolbar button span {
+ display: block;
+ line-height: 32px;
+}
+
+#toolbar button[role='edit'] {
+ background: url("images/toolbar-edit.png") left top no-repeat;
+}
+
+#toolbar button[role='view'] {
+ display: none;
+ color: #FFF;
+ background: url("images/toolbar-edit.png") left -32px no-repeat;
+}
+
+#toolbar button[role='reload'] {
+ background: url("images/toolbar-reload.png") left top no-repeat;
+}
+
+#toolbar button[role='help'] {
+ background: url("images/toolbar-help.png") left top no-repeat;
+ display: none;
+}
+
+.hasHelp #toolbar button[role='help'] {
+ display: inline-block;
+}
+
+.showHelp #toolbar button[role='help'] {
+ color: #FFF;
+ background-position: left -32px;
+}
+
+.theme-slate #toolbar button[role='edit'] {
+ background-image: url("images/slate-toolbar-edit.png");
+}
+
+.theme-slate #toolbar button[role='view'] {
+ text-shadow: #7F613F 0 -1px 0;
+ background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
+}
+
+.theme-slate #toolbar button[role='reload'] {
+ background-image: url("images/slate-toolbar-reload.png");
+}
+
+.theme-slate #toolbar button[role='help'] {
+ background-image: url("images/slate-toolbar-help.png");
+}
+
+.showHelp.theme-slate #toolbar button[role='help'] {
+ text-shadow: #7F613F 0 -1px 0;
+}
+
+
+.onEdit #toolbar button[role='view'] {
+ display: inline-block;
+}
+
+.onEdit #toolbar button[role='edit'] {
+ display: none;
+}
+
+#help {
+ width: 300px;
+ height: 400px;
+ position: absolute;
+ margin-top: 10px;
+ right: 10px;
+ z-index: 10000;
+ display: none;
+}
+
+.showHelp #help {
+ display: block;
+}
+
+#content {
+ position: absolute;
+ top: 44px;
+ bottom: 0;
+ overflow: auto;
+ left: 0;
+ right: 0;
+
+ background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+}
+
+#parameters {
+ display:none;
+ padding: 10px 20px;
+ background: url("images/parameters-bg.png");
+ height: 24px;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -mz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+#parameters label {
+ font-style: italic;
+}
+
+#parameters label > select, #parameters label > input{
+ margin-left: 10px;
+}
+
+#parameters > div.inline {
+ float: left;
+}
+
+#parameters > div.inline > div{
+ float: left;
+ height: 28px;
+ margin-right: 8px;
+ padding-top: 5px;
+ font-family: "helvetica neue";
+ font-size: 14px;
+ color: #666666;
+ font-style: italic;
+}
+
+#parameters > div.inline+div.inline {
+ margin-left: 20px;
+}
+
+#parameters input[type=text],
+#parameters input[type=number] {
+ height: 26px;
+ border: 1px solid #BBB;
+ background-color: #FFF;
+
+ padding: 0 4px;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ border-radius: 4px;
+
+ -webkit-box-shadow: 0 1px 0 #FFF;
+ -moz-box-shadow: 0 1px 0 #FFF;
+ -ms-box-shadow: 0 1px 0 #FFF;
+ box-shadow: 0 1px 0 #FFF;
+}
+
+#parameters input.tiny {
+ width: 40px;
+}
+
+#parameters input.small {
+ width: 80px;
+}
+
+#parameters input.medium {
+ width: 120px;
+}
+
+#parameters input.long {
+ width: 160px;
+}
+
+#scene {
+ padding: 20px;
+}
+
+#scene > * {
+ margin: 0 auto;
+}
+.onEdit #scene {
+}
+
+.onEdit #parameters {
+ display: block;
+}
+
+/*
+.card-container {
+ -webkit-perspective: 600px;
+ width:100%;
+ height: 100%;
+}
+.card {
+ position: relative;
+ width:100%;
+ height: 100%;
+}
+.card > div {
+ position: absolute;
+ width:100%;
+ height: 100%;
+ -webkit-transform-style: preserve-3d;
+ -webkit-transition: all .5s ease-in-out;
+ -webkit-backface-visibility: hidden;
+}
+.card > div:first-child {
+ -webkit-transform: rotateY( 0deg );
+}
+.card > div:last-child {
+ -webkit-transform: rotateY( -180deg );
+}
+.card.flip > div:first-child {
+ -webkit-transform: rotateY( 180deg );
+}
+.card.flip > div:last-child {
+ -webkit-transform: rotateY( 0deg );
+}
+*/
diff --git a/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/js/templates.js b/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/js/templates.js
index 60513e9..6b3517b 100644
--- a/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/js/templates.js
+++ b/Sankore-3.1/resources/library/interactivities/Enveloppe.wgt/js/templates.js
@@ -1,33 +1,31 @@
-var toolbarTemplate =
- '<h1 class="title">{{fr.njin.i18n.document.title}}</h1>'+
- '<div class="actions">'+
- '<button role="edit"><span>{{fr.njin.i18n.toolbar.edit}}</span></button>'+
- '<button role="view"><span>{{fr.njin.i18n.toolbar.view}}</span></button>'+
- '<button role="reload"><span>{{fr.njin.i18n.toolbar.reload}}</span></button>'+
- '<button role="help"><span>{{fr.njin.i18n.toolbar.help}}</span></button>'+
- '</div>';
-
-var parametersTemplate =
- '<div class="inline">'+
- '<label>{{fr.njin.i18n.parameters.label.themes}}'+
- '<select name="themes" role="parameter">'+
- '<option value="pad">{{fr.njin.i18n.parameters.label.pad.themes}}</option>'+
- '<option value="slate">{{fr.njin.i18n.parameters.label.slate.themes}}</option>'+
- '<option value="none">{{fr.njin.i18n.parameters.label.none.themes}}</option>'+
- '</select>'+
- '</label>'+
- '</div>'+
- '<div class="inline">'+
- '<label>{{fr.njin.i18n.boite.parameters.label.count}}'+
- '<input class="tiny" type="number" name="count" role="parameter">'
- '</label>'+
- '</div>';
-
-
-var objectTemplate =
- '<div id="{{object}}">'+
- '<!--<div class="tools">'+
- '<button role="duplicate">{{fr.njin.i18n.boite.parameters.label.duplicate}}</button>'+
- '<button role="remove">{{fr.njin.i18n.boite.parameters.label.remove}}</button>'+
- '</div>-->'+
+var toolbarTemplate =
+ '<h1 class="title">{{fr.njin.i18n.document.title}}</h1>'+
+ '<div class="actions">'+
+ '<button role="edit"><span>{{fr.njin.i18n.toolbar.edit}}</span></button>'+
+ '<button role="view"><span>{{fr.njin.i18n.toolbar.view}}</span></button>'+
+ '<button role="reload"><span>{{fr.njin.i18n.toolbar.reload}}</span></button>'+
+ '<button role="help"><span>{{fr.njin.i18n.toolbar.help}}</span></button>'+
+ '</div>';
+
+var parametersTemplate =
+ '<div class="inline">'+
+ '<label>{{fr.njin.i18n.parameters.label.themes}}'+
+ '<select name="themes" role="parameter">'+
+ '<option value="pad">{{fr.njin.i18n.parameters.label.pad.themes}}</option>'+
+ '<option value="slate">{{fr.njin.i18n.parameters.label.slate.themes}}</option>'+
+ '<option value="none">{{fr.njin.i18n.parameters.label.none.themes}}</option>'+
+ '</select>'+
+ '</label>'+
+ '</div>'+
+ '<div class="inline">'+
+ '<div>{{fr.njin.i18n.boite.parameters.label.count}}</div>'+
+ '<input class="tiny" type="number" name="count" role="parameter"></div>';
+
+
+var objectTemplate =
+ '<div id="{{object}}">'+
+ '<!--<div class="tools">'+
+ '<button role="duplicate">{{fr.njin.i18n.boite.parameters.label.duplicate}}</button>'+
+ '<button role="remove">{{fr.njin.i18n.boite.parameters.label.remove}}</button>'+
+ '</div>-->'+
'</div>';
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Etudier.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Etudier.wgt/config.xml
index 95c9e84..2c37bcf 100644
--- a/Sankore-3.1/resources/library/interactivities/Etudier.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Etudier.wgt/config.xml
@@ -5,7 +5,7 @@
version="1.2"
width="900"
height="450"
- ub:resizable="true">
+ ub:resizable="false">
<name>Notes</name>
<author href="http://www.getuniboard.com"
diff --git a/Sankore-3.1/resources/library/interactivities/Etudier.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Etudier.wgt/index.html
index 002011f..f3ab689 100644
--- a/Sankore-3.1/resources/library/interactivities/Etudier.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Etudier.wgt/index.html
@@ -3,90 +3,30 @@
<head>
<title>D'n'd</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="js/easySlider1.5.js"></script>
- <script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- start();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- start();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="slider">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- <ul>
- </ul>
- </div>
- <span id="prevBtn"><a href="javascript:void(0);"></a></span>
- <span id="nextBtn"><a href="javascript:void(0);"></a></span>
- </td>
- <td class="b_center_right"> </td>
- </tr>
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Etudier.wgt/js/script.js b/Sankore-3.1/resources/library/interactivities/Etudier.wgt/js/script.js
deleted file mode 100644
index bcdbf63..0000000
--- a/Sankore-3.1/resources/library/interactivities/Etudier.wgt/js/script.js
+++ /dev/null
@@ -1,686 +0,0 @@
-var sankoreLang = {
- display: "Display",
- edit: "Edit",
- text_content: "This is an example. Instead of this text you can put your own content.",
- new_txt: "New text block",
- new_slide: "This is new slide.",
- wgt_name: "Slider",
- slate: "slate",
- pad: "tablet",
- none: "none",
- help: "Help",
- help_content:
-"<p><h2>Slider</h2></p>" +
-"<p><h3>Booklet pages.</h3></p>" +
-"<p>Slider is a booklet with pages. This booklet can be enriched with text, images, sound and videos.</p>" +
-"<p>Enter the âEditâ mode to :</p>" +
-"<ul><li>choose the theme of interactivity : pad, slate or none (none by default),</li>" +
-"<li>edit the pages of the booklet.</li></ul>" +
-"<p>On each page, you can :</p>" +
-"<ul><li> insert text boxes with the âT+â on the left (to modify these text boxes, click inside the text and write),</li>" +
-"<li>insert pictures, sounds and videos dragging and dropping files from the library,</li>" +
-"<li>move texts, pictures, sounds and videos inside the page by clicking and dragging the multidirectional arrows located on the frame,</li>" +
-"<li>enlarge the size of an element with the double arrow at the bottom right of the frame,</li>" +
-"<li>delete an item with the âXâ.</li></ul>" +
-"<p>To add a page, click on the â+â green arrow at the bottom.</p>" +
-"<p>To delete a page, click on the red cross.</p>" +
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-//some flags
-var mouse_state = false;
-
-//object for resize
-var resize_obj = {
- object: null,
- top: 0,
- left: 0,
- clicked: false,
- k: 0
-}
-
-//main function
-function start(){
-
- $("#wgt_display").text(sankoreLang.display);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_name").text(sankoreLang.wgt_name);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- if(window.sankore){
- if(sankore.preference("etudier","")){
- var data = jQuery.parseJSON(sankore.preference("etudier",""));
- importData(data);
- }
- else
- showExample();
- if(sankore.preference("etudier_style","")){
- changeStyle(sankore.preference("etudier_style",""));
- $("#style_select").val(sankore.preference("etudier_style",""));
- } else
- changeStyle("3")
- }
- else
- showExample();
-
- //events
- if (window.widget) {
- window.widget.onleave = function(){
- if(!$("#wgt_help").hasClass("open")){
- exportData();
- sankore.setPreference("etudier_style", $("#style_select").find("option:selected").val());
- sankore.setPreference("etudier_cur_page", $("#slider").getPage());
- sankore.setPreference("etudier_left_nav", $("#prevBtn a").css("display"));
- sankore.setPreference("etudier_right_nav", $("#nextBtn a").css("display"));
- }
- }
- }
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").hide();
- tmp.removeClass("open");
- $("#slider").show();
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- exportData();
- sankore.setPreference("etudier_style", $("#style_select").find("option:selected").val());
- sankore.setPreference("etudier_cur_page", $("#slider").getPage());
- sankore.setPreference("etudier_left_nav", $("#prevBtn a").css("display"));
- sankore.setPreference("etudier_right_nav", $("#nextBtn a").css("display"));
- $("#slider").hide();
- $("#help").show();
- tmp.addClass("open");
- }
- });
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display","none");
- var tmpwh = $(window).height();
- var tmpww = $(window).width();
- window.resizeTo(tmpww, tmpwh - 44)
- $("#slider li>div").each(function(){
- var container = $(this);
- container.removeAttr("ondragenter")
- .removeAttr("ondragleave")
- .removeAttr("ondragover")
- .removeAttr("ondrop");
-
- container.find(".text_block").each(function(){
- $(this).draggable();
- $(this).find(".move_block").remove();
- $(this).find(".close_img").remove();
- $(this).find(".size_up").remove();
- $(this).find(".size_down").remove();
- $(this).find(".resize_block").remove();
- $(this).find(".real_text").removeAttr("contenteditable");
- $(this).removeClass("block_border");
- $(this).css("position","absolute");
- });
-
- container.find(".img_block").each(function(){
- $(this).draggable();
- $(this).find(".close_img").remove();
- $(this).find(".move_block").remove();
- $(this).find(".resize_block").remove();
- $(this).removeClass("block_border");
- $(this).css("position","absolute");
- });
-
- container.find(".audio_block").each(function(){
- $(this).find(".close_img").remove();
- $(this).removeClass("block_border");
- $(this).css("position","absolute");
- });
-
- container.find(".add_left").remove();
- container.find(".add_right").remove();
- container.find(".close_slide").remove();
- container.find(".add_text").remove();
- });
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- }
- } else {
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(true);
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
- tmpwh = $(window).height();
- tmpww = $(window).width();
- window.resizeTo(tmpww, tmpwh + 44)
- $("#slider li>div").each(function(){
- var container = $(this);
- container.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background\",\"none\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
- .attr("ondrop", "$(this).css(\"background\",\"none\"); return onDropTarget(this,event);");
-
- container.find(".text_block").each(function(){
- $(this).draggable("destroy");
- $("<div class='move_block' contenteditable='false'>").appendTo($(this));
- $("<div class='close_img' contenteditable='false'>").appendTo($(this));
- $("<div class='size_up' contenteditable='false'>").appendTo($(this));
- $("<div class='size_down' contenteditable='false'>").appendTo($(this));
- $("<div class='resize_block' contenteditable='false'>").appendTo($(this));
- $(this).find(".real_text").attr("contenteditable", "true");
- $(this).addClass("block_border");
- });
-
- container.find(".img_block").each(function(){
- $(this).draggable("destroy");
- $("<div class='move_block' contenteditable='false'>").appendTo($(this));
- $("<div class='close_img' contenteditable='false'>").appendTo($(this));
- $("<div class='resize_block' contenteditable='false'>").appendTo($(this));
- $(this).addClass("block_border");
- });
-
- container.find(".audio_block").each(function(){
- $("<div class='close_img' contenteditable='false'>").appendTo($(this));
- $(this).addClass("block_border");
- });
-
- $("<div class='add_left'>").appendTo(container);
- $("<div class='add_right'>").appendTo(container);
- $("<div class='close_slide'>").appendTo(container);
- $("<div class='add_text'>").appendTo(container);
- $(window).trigger("resize")
- });
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- }
- }
-
- $("audio").each(function(){
- this.pause();
- $(this).parent().find(":first-child").removeClass("stop").addClass("play");
- });
-
- });
-
- //deleting the img block
- $(".close_img").live("click", function(){
- $(this).parent().remove();
- });
-
- //increase a size of text
- $(".size_up").live("click", function(){
- $(this).parent().height("");
- var fz = parseInt($(this).parent().css("font-size").replace("px", ""));
- $(this).parent().css("font-size", fz+1 + "px");
- });
-
- //decrease a size of text
- $(".size_down").live("click", function(){
- var fz = parseInt($(this).parent().css("font-size").replace("px", ""));
- fz = ((fz - 1) < 8)?8:fz-1;
- $(this).parent().css("font-size", fz + "px");
- });
-
- //play/pause event
- $(".play, .stop").live("click", function(){
- var tmp_audio = $(this);
- var audio = tmp_audio.parent().find("audio").get(0);
- if($(this).hasClass("play")){
- if(tmp_audio.parent().find("source").attr("src")){
- tmp_audio.removeClass("play").addClass("stop");
- var id = setInterval(function(){
- if(audio.currentTime == audio.duration){
- clearInterval(id);
- tmp_audio.removeClass("stop").addClass("play");
- }
- }, 10);
- tmp_audio.parent().find("input").val(id);
- audio.play();
- }
- } else {
- $(this).removeClass("stop").addClass("play");
- clearInterval( tmp_audio.parent().find("input").val())
- audio.pause();
- }
- });
-
- $(".replay").live("click", function(){
- var tmp_audio = $(this).prev();
- var audio = $(this).parent().find("audio").get(0);
- if(tmp_audio.parent().find("source").attr("src")){
- $(this).prev().removeClass("play").addClass("stop");
- clearInterval($(this).parent().find("input").val());
- var id = setInterval(function(){
- if(audio.currentTime == audio.duration){
- clearInterval(id);
- tmp_audio.removeClass("stop").addClass("play");
- }
- }, 10);
- tmp_audio.parent().find("input").val(id);
- audio.currentTime = 0;
- audio.play();
- }
- });
-
- //moving objects
- $(".move_block").live("mouseover",function(){
- $(this).parent().draggable();
- });
-
- $(".move_block").live("mouseleave",function(){
- if(!mouse_state)
- $(this).parent().draggable("destroy");
- });
-
- $(".move_block").live("mousedown",function(){
- mouse_state = true;
- });
-
- $(".move_block").live("mouseup",function(){
- mouse_state = false;
- });
-
- //resize block
- $(".resize_block").live("mousedown", function(){
- resize_obj.object = $(this);
- resize_obj.top = event.clientY;
- resize_obj.left = event.clientX;
- resize_obj.clicked = true;
- if($(this).parent().hasClass("img_block"))
- resize_obj.k = $(this).parent().find("img").width() / $(this).parent().find("img").height();
- })
-
- $("li>div").live("mouseup", function(){
- resize_obj.object = null;
- resize_obj.top = 0;
- resize_obj.left = 0;
- resize_obj.clicked = false;
- })
-
- $("li>div").live("mousemove", function(){
- if(resize_obj.clicked){
- if(resize_obj.object.parent().hasClass("text_block")){
- var width = resize_obj.object.parent().width() - resize_obj.left + event.clientX;
- resize_obj.left = event.clientX;
- resize_obj.top = event.clientY;
- resize_obj.object.parent().width(width).height("");
- } else {
- var img_width = resize_obj.object.parent().find("img").width() - resize_obj.left + event.clientX;
- var img_height = img_width / resize_obj.k;
- resize_obj.left = event.clientX;
- resize_obj.top = event.clientY;
- resize_obj.object.parent().find("img").width(img_width).height(img_height);
- }
- }
- });
-
- //closing a slide
- $(".close_slide").live("click", function(){
- $(this).parent().parent().remove();
- $("#slider").removeSlide();
- });
-
- //adding new slides
- $(".add_left").live("click", function(){
- var cur_li = $(this).parent().parent();
- var new_li = $("<li>");
- new_li.width(cur_li.width()).height(cur_li.height()).css("float","left");
- var new_div = $("<div>").appendTo(new_li);
- new_div.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);");
- var example = $("<div class='text_block' style='position: absolute;'>").addClass("block_border");
- $("<div class='real_text' contenteditable='true'>" + sankoreLang.new_slide + "</div>").appendTo(example);
- $("<div class='move_block' contenteditable='false'>").appendTo(example);
- $("<div class='close_img' contenteditable='false'>").appendTo(example);
- $("<div class='size_up' contenteditable='false'>").appendTo(example);
- $("<div class='size_down' contenteditable='false'>").appendTo(example);
- $("<div class='resize_block' contenteditable='false'>").appendTo(example);
- example.css("top","40%").css("left","40%");
- new_div.append(example);
- $("<div class='add_left'>").appendTo(new_div);
- $("<div class='add_right'>").appendTo(new_div);
- $("<div class='close_slide'>").appendTo(new_div);
- $("<div class='add_text'>").appendTo(new_div);
- new_li.insertBefore(cur_li);
- $("#slider").addSlide("before");
- });
-
- $(".add_right").live("click", function(){
- var cur_li = $(this).parent().parent();
- var new_li = $("<li>");
- new_li.width(cur_li.width()).height(cur_li.height()).css("float","left");
- var new_div = $("<div>").appendTo(new_li);
- new_div.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);");
- var example = $("<div class='text_block' style='position: absolute;'>").addClass("block_border");
- $("<div class='real_text' contenteditable='true'>" + sankoreLang.new_slide + "</div>").appendTo(example);
- $("<div class='move_block' contenteditable='false'>").appendTo(example);
- $("<div class='close_img' contenteditable='false'>").appendTo(example);
- $("<div class='size_up' contenteditable='false'>").appendTo(example);
- $("<div class='size_down' contenteditable='false'>").appendTo(example);
- $("<div class='resize_block' contenteditable='false'>").appendTo(example);
- example.css("top","40%").css("left","40%");
- new_div.append(example);
- $("<div class='add_left'>").appendTo(new_div);
- $("<div class='add_right'>").appendTo(new_div);
- $("<div class='close_slide'>").appendTo(new_div);
- $("<div class='add_text'>").appendTo(new_div);
- new_li.insertAfter(cur_li);
- $("#slider").addSlide("after");
- });
-
- $(".add_text").live("click", function(){
- var container = $(this).parent();
- var text_block = $("<div class='text_block'><div class='real_text' contenteditable='true'>" + sankoreLang.new_txt + "</div></div>").appendTo(container);
- $("<div class='move_block' contenteditable='false'>").appendTo(text_block);
- $("<div class='close_img' contenteditable='false'>").appendTo(text_block);
- $("<div class='size_up' contenteditable='false'>").appendTo(text_block);
- $("<div class='size_down' contenteditable='false'>").appendTo(text_block);
- $("<div class='resize_block' contenteditable='false'>").appendTo(text_block);
- text_block.addClass("block_border");
- });
-}
-
-//export
-function exportData(){
- var array_to_export = [];
- $("#slider li>div").each(function(){
- var cont_obj = new Object();
- cont_obj.w = $(this).parent().width();
- cont_obj.h = $(this).parent().height();
- cont_obj.text = [];
- $(this).find(".text_block").each(function(){
- var txt_block = new Object();
- txt_block.top = $(this).position().top;
- txt_block.left = $(this).position().left;
- txt_block.w = $(this).width();
- txt_block.fz = $(this).css("font-size");
- txt_block.val = $(this).find(".real_text").html();
- cont_obj.text.push(txt_block);
- });
- cont_obj.imgs = [];
- $(this).find(".img_block").each(function(){
- var img_obj = new Object();
- img_obj.link = $(this).find("img").attr("src");
- img_obj.h = $(this).find("img").height();
- img_obj.w = $(this).find("img").width();
- img_obj.top = $(this).position().top;
- img_obj.left = $(this).position().left;
- cont_obj.imgs.push(img_obj);
- });
- cont_obj.audio = [];
- $(this).find(".audio_block").each(function(){
- var audio_block = new Object();
- audio_block.top = $(this).position().top;
- audio_block.left = $(this).position().left;
- audio_block.val = $(this).find("source").attr("src");
- cont_obj.audio.push(audio_block);
- });
- array_to_export.push(cont_obj);
- });
- sankore.setPreference("etudier", JSON.stringify(array_to_export));
-}
-
-//import
-function importData(data){
-
- var width = 0;
- var height = 0;
-
- for(var i in data){
-
- width = data[i].w;
- height = data[i].h;
- var li = $("<li style='float: left; width: " + data[i].w + "; height: " + data[i].h + ";'>");
- var div = $("<div>").appendTo(li);
-
- for(var j in data[i].text){
- var text_div = $("<div class='text_block'><div class='real_text'>" + data[i].text[j].val + "</div></div>");
- text_div.draggable().css("position","absolute")
- .width(data[i].text[j].w)
- .css("top", data[i].text[j].top)
- .css("left", data[i].text[j].left)
- .css("font-size", data[i].text[j].fz)
- .appendTo(div);
- }
-
- for(j in data[i].imgs){
- var img_div = $("<div class='img_block' style='text-align: center;'>");
- img_div.draggable().css("position","absolute")
- .css("top", data[i].imgs[j].top)
- .css("left", data[i].imgs[j].left)
- .appendTo(div);
- $("<img src='" + data[i].imgs[j].link + "' style='display: inline;' width='" + data[i].imgs[j].w + "' height='" + data[i].imgs[j].h + "'/>").appendTo(img_div);
- }
-
- for(j in data[i].audio){
- var audio_div = $("<div class='audio_block'>");
- $("<div class='play'>").appendTo(audio_div);
- $("<div class='replay'>").appendTo(audio_div);
- var tmp_audio = $("<audio>").appendTo(audio_div);
- $("<source src='" + data[i].audio[j].val + "' />").appendTo(tmp_audio);
- audio_div.draggable().css("position","absolute")
- .css("top", data[i].audio[j].top)
- .css("left", data[i].audio[j].left)
- .appendTo(div);
- }
-
- $("#slider ul").append(li);
- }
-
- $(window).trigger("resize")
- $("#slider").width(width).height(height).easySlider({
- prevText: '',
- nextText: '',
- controlsShow: false
- });
- $("#slider").goToSlide(sankore.preference("etudier_cur_page",""));
- $("#prevBtn a").css("display", sankore.preference("etudier_left_nav",""));
- $("#nextBtn a").css("display", sankore.preference("etudier_right_nav",""));
-}
-
-//example
-function showExample(){
-
- var li1 = $("<li>");
- var div1 = $("<div>").appendTo(li1);
- $("<div class='text_block'><div class='real_text'>" + sankoreLang.text_content + "</div></div>").draggable().appendTo(div1)
- li1.width($("#slider").width()).height($("#slider").height());
- $("#slider ul").append(li1);
- var li2 = $("<li>");
- var div2 = $("<div>").appendTo(li2);
- var img = $("<div class='img_block' style='text-align: center;'></div>").draggable().appendTo(div2);
- $("<img src=\"objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img);
- li2.width($("#slider").width()).height($("#slider").height());
- $("#slider ul").append(li2);
- var li3 = $("<li>");
- var div3 = $("<div>").appendTo(li3);
- li3.width($("#slider").width()).height($("#slider").height());
- $("<div class='text_block'><div class='real_text'>" + sankoreLang.text_content + "</div></div>").draggable().appendTo(div3);
- var audio_block = $("<div class='audio_block'>").draggable().appendTo(div3);
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "objects/bateaux.mp3");
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("#slider ul").append(li3);
- var li4 = $("<li>");
- var div4 = $("<div>").appendTo(li4);
- $("<div class='text_block'><div class='real_text'>" + sankoreLang.text_content + "</div></div>").draggable().appendTo(div4);
- var img2 = $("<div class='img_block' style='text-align: center;'></div>").draggable().appendTo(div4);
- $("<img src=\"objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
- var audio_block2 = $("<div class='audio_block'>").draggable().appendTo(div4);
- $("<div class='play'>").appendTo(audio_block2);
- $("<div class='replay'>").appendTo(audio_block2);
- var source2 = $("<source/>").attr("src", "objects/bateaux.mp3");
- var audio2 = $("<audio>").appendTo(audio_block2);
- audio2.append(source2);
- li4.width($("#slider").width()).height($("#slider").height());
- $("#slider ul").append(li4);
- $(".text_block, .audio_block, .img_block").each(function(){
- $(this).css("position","absolute");
- });
- $("#slider").easySlider({
- prevText: '',
- nextText: '',
- controlsShow: false
- });
-}
-
-//string into xml-format
-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;
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
-
-//drop handler
-function onDropTarget(obj, event) {
- if (event.dataTransfer) {
- var format = "text/plain";
- var textData = event.dataTransfer.getData(format);
- if (!textData) {
- alert(":(");
- }
- textData = stringToXML(textData);
- var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
- if(tmp_type.substr(0, 5) == "audio"){
- var audio_block = $("<div class='audio_block'>").draggable().appendTo($(obj));
- audio_block.css("position","absolute").css("top",event.clientY - 54).css("left",event.clientX - 54);
- $("<div class='close_img' contenteditable='false'>").appendTo(audio_block);
- audio_block.addClass("block_border");
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", tmp);
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- } else {
- var img_block = $("<div class='img_block' style='text-align: center;'></div>").appendTo($(obj));
- img_block.css("top",event.clientY - 54).css("left",event.clientX - 54);
- $("<div class='move_block' contenteditable='false'>").appendTo(img_block);
- $("<div class='close_img' contenteditable='false'>").appendTo(img_block);
- $("<div class='resize_block' contenteditable='false'>").appendTo(img_block);
- img_block.addClass("block_border");
- var tmp_img = $("<img src=\"" + tmp + "\" style=\"display: inline;\"/>").appendTo(img_block);
- setTimeout(function(){
- if(tmp_img.height() >= tmp_img.width())
- tmp_img.attr("height", "120");
- else{
- tmp_img.attr("width","120");
- tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
- }
- }, 6)
- }
- }
- else {
- alert ("Your browser does not support the dataTransfer object.");
- }
-
- if (event.stopPropagation) {
- event.stopPropagation ();
- }
- else {
- event.cancelBubble = true;
- }
- return false;
-}
-
-if (window.widget) {
- window.widget.onremove = function(){
- $("audio").each(function(){
- this.pause();
- $(this).parent().find(":first-child").removeClass("stop").addClass("play");
- });
- }
-}
-
-$(window).resize(function(){
- var slider = $("#slider");
- slider.width($(this).width() - 108).height($(this).height() - 108);
- $("#slider li").each(function(){
- $(this).width(slider.width()).height(slider.height());
- });
- slider.setSize(slider.width(), slider.height());
-})
diff --git a/Sankore-3.1/resources/library/interactivities/Etudier.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Etudier.wgt/locales/en/index.html
new file mode 100644
index 0000000..d2be018
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Etudier.wgt/locales/en/index.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>D'n'd</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../js/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="../../js/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="../../js/easySlider1.5.js"></script>
+ <script type="text/javascript" src="js/script.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ start();
+ });
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="slider">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ <ul>
+ </ul>
+ </div>
+ <span id="prevBtn"><a href="javascript:void(0);"></a></span>
+ <span id="nextBtn"><a href="javascript:void(0);"></a></span>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Etudier.wgt/locales/en/js/script.js b/Sankore-3.1/resources/library/interactivities/Etudier.wgt/locales/en/js/script.js
new file mode 100644
index 0000000..b879fcc
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Etudier.wgt/locales/en/js/script.js
@@ -0,0 +1,686 @@
+var sankoreLang = {
+ display: "Display",
+ edit: "Edit",
+ text_content: "This is an example. Instead of this text you can put your own content.",
+ new_txt: "New text block",
+ new_slide: "This is new slide.",
+ wgt_name: "Slider",
+ slate: "slate",
+ pad: "tablet",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p><h2>Slider</h2></p>" +
+"<p><h3>Booklet pages.</h3></p>" +
+"<p>Slider is a booklet with pages. This booklet can be enriched with text, images, sound and videos.</p>" +
+"<p>Enter the âEditâ mode to :</p>" +
+"<ul><li>choose the theme of interactivity : pad, slate or none (none by default),</li>" +
+"<li>edit the pages of the booklet.</li></ul>" +
+"<p>On each page, you can :</p>" +
+"<ul><li> insert text boxes with the âT+â on the left (to modify these text boxes, click inside the text and write),</li>" +
+"<li>insert pictures, sounds and videos dragging and dropping files from the library,</li>" +
+"<li>move texts, pictures, sounds and videos inside the page by clicking and dragging the multidirectional arrows located on the frame,</li>" +
+"<li>enlarge the size of an element with the double arrow at the bottom right of the frame,</li>" +
+"<li>delete an item with the âXâ.</li></ul>" +
+"<p>To add a page, click on the â+â green arrow at the bottom.</p>" +
+"<p>To delete a page, click on the red cross.</p>" +
+"<p>âDisplayâ button comes back to the activity.</p>",
+ theme: "Theme"
+};
+
+//some flags
+var mouse_state = false;
+
+//object for resize
+var resize_obj = {
+ object: null,
+ top: 0,
+ left: 0,
+ clicked: false,
+ k: 0
+}
+
+//main function
+function start(){
+
+ $("#wgt_display").text(sankoreLang.display);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_name").text(sankoreLang.wgt_name);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ if(window.sankore){
+ if(sankore.preference("etudier","")){
+ var data = jQuery.parseJSON(sankore.preference("etudier",""));
+ importData(data);
+ }
+ else
+ showExample();
+ if(sankore.preference("etudier_style","")){
+ changeStyle(sankore.preference("etudier_style",""));
+ $("#style_select").val(sankore.preference("etudier_style",""));
+ } else
+ changeStyle("3")
+ }
+ else
+ showExample();
+
+ //events
+ if (window.widget) {
+ window.widget.onleave = function(){
+ if(!$("#wgt_help").hasClass("open")){
+ exportData();
+ sankore.setPreference("etudier_style", $("#style_select").find("option:selected").val());
+ sankore.setPreference("etudier_cur_page", $("#slider").getPage());
+ sankore.setPreference("etudier_left_nav", $("#prevBtn a").css("display"));
+ sankore.setPreference("etudier_right_nav", $("#nextBtn a").css("display"));
+ }
+ }
+ }
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").hide();
+ tmp.removeClass("open");
+ $("#slider").show();
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ exportData();
+ sankore.setPreference("etudier_style", $("#style_select").find("option:selected").val());
+ sankore.setPreference("etudier_cur_page", $("#slider").getPage());
+ sankore.setPreference("etudier_left_nav", $("#prevBtn a").css("display"));
+ sankore.setPreference("etudier_right_nav", $("#nextBtn a").css("display"));
+ $("#slider").hide();
+ $("#help").show();
+ tmp.addClass("open");
+ }
+ });
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display","none");
+ var tmpwh = $(window).height();
+ var tmpww = $(window).width();
+ window.resizeTo(tmpww, tmpwh - 44)
+ $("#slider li>div").each(function(){
+ var container = $(this);
+ container.removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop");
+
+ container.find(".text_block").each(function(){
+ $(this).draggable();
+ $(this).find(".move_block").remove();
+ $(this).find(".close_img").remove();
+ $(this).find(".size_up").remove();
+ $(this).find(".size_down").remove();
+ $(this).find(".resize_block").remove();
+ $(this).find(".real_text").removeAttr("contenteditable");
+ $(this).removeClass("block_border");
+ $(this).css("position","absolute");
+ });
+
+ container.find(".img_block").each(function(){
+ $(this).draggable();
+ $(this).find(".close_img").remove();
+ $(this).find(".move_block").remove();
+ $(this).find(".resize_block").remove();
+ $(this).removeClass("block_border");
+ $(this).css("position","absolute");
+ });
+
+ container.find(".audio_block").each(function(){
+ $(this).find(".close_img").remove();
+ $(this).removeClass("block_border");
+ $(this).css("position","absolute");
+ });
+
+ container.find(".add_left").remove();
+ container.find(".add_right").remove();
+ container.find(".close_slide").remove();
+ container.find(".add_text").remove();
+ });
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display","block");
+ tmpwh = $(window).height();
+ tmpww = $(window).width();
+ window.resizeTo(tmpww, tmpwh + 44)
+ $("#slider li>div").each(function(){
+ var container = $(this);
+ container.attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).css(\"background\",\"none\"); return false;")
+ .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
+ .attr("ondrop", "$(this).css(\"background\",\"none\"); return onDropTarget(this,event);");
+
+ container.find(".text_block").each(function(){
+ $(this).draggable("destroy");
+ $("<div class='move_block' contenteditable='false'>").appendTo($(this));
+ $("<div class='close_img' contenteditable='false'>").appendTo($(this));
+ $("<div class='size_up' contenteditable='false'>").appendTo($(this));
+ $("<div class='size_down' contenteditable='false'>").appendTo($(this));
+ $("<div class='resize_block' contenteditable='false'>").appendTo($(this));
+ $(this).find(".real_text").attr("contenteditable", "true");
+ $(this).addClass("block_border");
+ });
+
+ container.find(".img_block").each(function(){
+ $(this).draggable("destroy");
+ $("<div class='move_block' contenteditable='false'>").appendTo($(this));
+ $("<div class='close_img' contenteditable='false'>").appendTo($(this));
+ $("<div class='resize_block' contenteditable='false'>").appendTo($(this));
+ $(this).addClass("block_border");
+ });
+
+ container.find(".audio_block").each(function(){
+ $("<div class='close_img' contenteditable='false'>").appendTo($(this));
+ $(this).addClass("block_border");
+ });
+
+ $("<div class='add_left'>").appendTo(container);
+ $("<div class='add_right'>").appendTo(container);
+ $("<div class='close_slide'>").appendTo(container);
+ $("<div class='add_text'>").appendTo(container);
+ $(window).trigger("resize")
+ });
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ }
+ }
+
+ $("audio").each(function(){
+ this.pause();
+ $(this).parent().find(":first-child").removeClass("stop").addClass("play");
+ });
+
+ });
+
+ //deleting the img block
+ $(".close_img").live("click", function(){
+ $(this).parent().remove();
+ });
+
+ //increase a size of text
+ $(".size_up").live("click", function(){
+ $(this).parent().height("");
+ var fz = parseInt($(this).parent().css("font-size").replace("px", ""));
+ $(this).parent().css("font-size", fz+1 + "px");
+ });
+
+ //decrease a size of text
+ $(".size_down").live("click", function(){
+ var fz = parseInt($(this).parent().css("font-size").replace("px", ""));
+ fz = ((fz - 1) < 8)?8:fz-1;
+ $(this).parent().css("font-size", fz + "px");
+ });
+
+ //play/pause event
+ $(".play, .stop").live("click", function(){
+ var tmp_audio = $(this);
+ var audio = tmp_audio.parent().find("audio").get(0);
+ if($(this).hasClass("play")){
+ if(tmp_audio.parent().find("source").attr("src")){
+ tmp_audio.removeClass("play").addClass("stop");
+ var id = setInterval(function(){
+ if(audio.currentTime == audio.duration){
+ clearInterval(id);
+ tmp_audio.removeClass("stop").addClass("play");
+ }
+ }, 10);
+ tmp_audio.parent().find("input").val(id);
+ audio.play();
+ }
+ } else {
+ $(this).removeClass("stop").addClass("play");
+ clearInterval( tmp_audio.parent().find("input").val())
+ audio.pause();
+ }
+ });
+
+ $(".replay").live("click", function(){
+ var tmp_audio = $(this).prev();
+ var audio = $(this).parent().find("audio").get(0);
+ if(tmp_audio.parent().find("source").attr("src")){
+ $(this).prev().removeClass("play").addClass("stop");
+ clearInterval($(this).parent().find("input").val());
+ var id = setInterval(function(){
+ if(audio.currentTime == audio.duration){
+ clearInterval(id);
+ tmp_audio.removeClass("stop").addClass("play");
+ }
+ }, 10);
+ tmp_audio.parent().find("input").val(id);
+ audio.currentTime = 0;
+ audio.play();
+ }
+ });
+
+ //moving objects
+ $(".move_block").live("mouseover",function(){
+ $(this).parent().draggable();
+ });
+
+ $(".move_block").live("mouseleave",function(){
+ if(!mouse_state)
+ $(this).parent().draggable("destroy");
+ });
+
+ $(".move_block").live("mousedown",function(){
+ mouse_state = true;
+ });
+
+ $(".move_block").live("mouseup",function(){
+ mouse_state = false;
+ });
+
+ //resize block
+ $(".resize_block").live("mousedown", function(){
+ resize_obj.object = $(this);
+ resize_obj.top = event.clientY;
+ resize_obj.left = event.clientX;
+ resize_obj.clicked = true;
+ if($(this).parent().hasClass("img_block"))
+ resize_obj.k = $(this).parent().find("img").width() / $(this).parent().find("img").height();
+ })
+
+ $("li>div").live("mouseup", function(){
+ resize_obj.object = null;
+ resize_obj.top = 0;
+ resize_obj.left = 0;
+ resize_obj.clicked = false;
+ })
+
+ $("li>div").live("mousemove", function(){
+ if(resize_obj.clicked){
+ if(resize_obj.object.parent().hasClass("text_block")){
+ var width = resize_obj.object.parent().width() - resize_obj.left + event.clientX;
+ resize_obj.left = event.clientX;
+ resize_obj.top = event.clientY;
+ resize_obj.object.parent().width(width).height("");
+ } else {
+ var img_width = resize_obj.object.parent().find("img").width() - resize_obj.left + event.clientX;
+ var img_height = img_width / resize_obj.k;
+ resize_obj.left = event.clientX;
+ resize_obj.top = event.clientY;
+ resize_obj.object.parent().find("img").width(img_width).height(img_height);
+ }
+ }
+ });
+
+ //closing a slide
+ $(".close_slide").live("click", function(){
+ $(this).parent().parent().remove();
+ $("#slider").removeSlide();
+ });
+
+ //adding new slides
+ $(".add_left").live("click", function(){
+ var cur_li = $(this).parent().parent();
+ var new_li = $("<li>");
+ new_li.width(cur_li.width()).height(cur_li.height()).css("float","left");
+ var new_div = $("<div>").appendTo(new_li);
+ new_div.attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
+ .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
+ .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);");
+ var example = $("<div class='text_block' style='position: absolute;'>").addClass("block_border");
+ $("<div class='real_text' contenteditable='true'>" + sankoreLang.new_slide + "</div>").appendTo(example);
+ $("<div class='move_block' contenteditable='false'>").appendTo(example);
+ $("<div class='close_img' contenteditable='false'>").appendTo(example);
+ $("<div class='size_up' contenteditable='false'>").appendTo(example);
+ $("<div class='size_down' contenteditable='false'>").appendTo(example);
+ $("<div class='resize_block' contenteditable='false'>").appendTo(example);
+ example.css("top","40%").css("left","40%");
+ new_div.append(example);
+ $("<div class='add_left'>").appendTo(new_div);
+ $("<div class='add_right'>").appendTo(new_div);
+ $("<div class='close_slide'>").appendTo(new_div);
+ $("<div class='add_text'>").appendTo(new_div);
+ new_li.insertBefore(cur_li);
+ $("#slider").addSlide("before");
+ });
+
+ $(".add_right").live("click", function(){
+ var cur_li = $(this).parent().parent();
+ var new_li = $("<li>");
+ new_li.width(cur_li.width()).height(cur_li.height()).css("float","left");
+ var new_div = $("<div>").appendTo(new_li);
+ new_div.attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
+ .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
+ .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);");
+ var example = $("<div class='text_block' style='position: absolute;'>").addClass("block_border");
+ $("<div class='real_text' contenteditable='true'>" + sankoreLang.new_slide + "</div>").appendTo(example);
+ $("<div class='move_block' contenteditable='false'>").appendTo(example);
+ $("<div class='close_img' contenteditable='false'>").appendTo(example);
+ $("<div class='size_up' contenteditable='false'>").appendTo(example);
+ $("<div class='size_down' contenteditable='false'>").appendTo(example);
+ $("<div class='resize_block' contenteditable='false'>").appendTo(example);
+ example.css("top","40%").css("left","40%");
+ new_div.append(example);
+ $("<div class='add_left'>").appendTo(new_div);
+ $("<div class='add_right'>").appendTo(new_div);
+ $("<div class='close_slide'>").appendTo(new_div);
+ $("<div class='add_text'>").appendTo(new_div);
+ new_li.insertAfter(cur_li);
+ $("#slider").addSlide("after");
+ });
+
+ $(".add_text").live("click", function(){
+ var container = $(this).parent();
+ var text_block = $("<div class='text_block'><div class='real_text' contenteditable='true'>" + sankoreLang.new_txt + "</div></div>").appendTo(container);
+ $("<div class='move_block' contenteditable='false'>").appendTo(text_block);
+ $("<div class='close_img' contenteditable='false'>").appendTo(text_block);
+ $("<div class='size_up' contenteditable='false'>").appendTo(text_block);
+ $("<div class='size_down' contenteditable='false'>").appendTo(text_block);
+ $("<div class='resize_block' contenteditable='false'>").appendTo(text_block);
+ text_block.addClass("block_border");
+ });
+}
+
+//export
+function exportData(){
+ var array_to_export = [];
+ $("#slider li>div").each(function(){
+ var cont_obj = new Object();
+ cont_obj.w = $(this).parent().width();
+ cont_obj.h = $(this).parent().height();
+ cont_obj.text = [];
+ $(this).find(".text_block").each(function(){
+ var txt_block = new Object();
+ txt_block.top = $(this).position().top;
+ txt_block.left = $(this).position().left;
+ txt_block.w = $(this).width();
+ txt_block.fz = $(this).css("font-size");
+ txt_block.val = $(this).find(".real_text").html();
+ cont_obj.text.push(txt_block);
+ });
+ cont_obj.imgs = [];
+ $(this).find(".img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.h = $(this).find("img").height();
+ img_obj.w = $(this).find("img").width();
+ img_obj.top = $(this).position().top;
+ img_obj.left = $(this).position().left;
+ cont_obj.imgs.push(img_obj);
+ });
+ cont_obj.audio = [];
+ $(this).find(".audio_block").each(function(){
+ var audio_block = new Object();
+ audio_block.top = $(this).position().top;
+ audio_block.left = $(this).position().left;
+ audio_block.val = $(this).find("source").attr("src").replace("../../","");
+ cont_obj.audio.push(audio_block);
+ });
+ array_to_export.push(cont_obj);
+ });
+ sankore.setPreference("etudier", JSON.stringify(array_to_export));
+}
+
+//import
+function importData(data){
+
+ var width = 0;
+ var height = 0;
+
+ for(var i in data){
+
+ width = data[i].w;
+ height = data[i].h;
+ var li = $("<li style='float: left; width: " + data[i].w + "; height: " + data[i].h + ";'>");
+ var div = $("<div>").appendTo(li);
+
+ for(var j in data[i].text){
+ var text_div = $("<div class='text_block'><div class='real_text'>" + data[i].text[j].val + "</div></div>");
+ text_div.draggable().css("position","absolute")
+ .width(data[i].text[j].w)
+ .css("top", data[i].text[j].top)
+ .css("left", data[i].text[j].left)
+ .css("font-size", data[i].text[j].fz)
+ .appendTo(div);
+ }
+
+ for(j in data[i].imgs){
+ var img_div = $("<div class='img_block' style='text-align: center;'>");
+ img_div.draggable().css("position","absolute")
+ .css("top", data[i].imgs[j].top)
+ .css("left", data[i].imgs[j].left)
+ .appendTo(div);
+ $("<img src='../../" + data[i].imgs[j].link + "' style='display: inline;' width='" + data[i].imgs[j].w + "' height='" + data[i].imgs[j].h + "'/>").appendTo(img_div);
+ }
+
+ for(j in data[i].audio){
+ var audio_div = $("<div class='audio_block'>");
+ $("<div class='play'>").appendTo(audio_div);
+ $("<div class='replay'>").appendTo(audio_div);
+ var tmp_audio = $("<audio>").appendTo(audio_div);
+ $("<source src='../../" + data[i].audio[j].val + "' />").appendTo(tmp_audio);
+ audio_div.draggable().css("position","absolute")
+ .css("top", data[i].audio[j].top)
+ .css("left", data[i].audio[j].left)
+ .appendTo(div);
+ }
+
+ $("#slider ul").append(li);
+ }
+
+ $(window).trigger("resize")
+ $("#slider").width(width).height(height).easySlider({
+ prevText: '',
+ nextText: '',
+ controlsShow: false
+ });
+ $("#slider").goToSlide(sankore.preference("etudier_cur_page",""));
+ $("#prevBtn a").css("display", sankore.preference("etudier_left_nav",""));
+ $("#nextBtn a").css("display", sankore.preference("etudier_right_nav",""));
+}
+
+//example
+function showExample(){
+
+ var li1 = $("<li>");
+ var div1 = $("<div>").appendTo(li1);
+ $("<div class='text_block'><div class='real_text'>" + sankoreLang.text_content + "</div></div>").draggable().appendTo(div1)
+ li1.width($("#slider").width()).height($("#slider").height());
+ $("#slider ul").append(li1);
+ var li2 = $("<li>");
+ var div2 = $("<div>").appendTo(li2);
+ var img = $("<div class='img_block' style='text-align: center;'></div>").draggable().appendTo(div2);
+ $("<img src=\"../../objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img);
+ li2.width($("#slider").width()).height($("#slider").height());
+ $("#slider ul").append(li2);
+ var li3 = $("<li>");
+ var div3 = $("<div>").appendTo(li3);
+ li3.width($("#slider").width()).height($("#slider").height());
+ $("<div class='text_block'><div class='real_text'>" + sankoreLang.text_content + "</div></div>").draggable().appendTo(div3);
+ var audio_block = $("<div class='audio_block'>").draggable().appendTo(div3);
+ $("<div class='play'>").appendTo(audio_block);
+ $("<div class='replay'>").appendTo(audio_block);
+ var source = $("<source/>").attr("src", "../../objects/bateaux.mp3");
+ var audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ $("#slider ul").append(li3);
+ var li4 = $("<li>");
+ var div4 = $("<div>").appendTo(li4);
+ $("<div class='text_block'><div class='real_text'>" + sankoreLang.text_content + "</div></div>").draggable().appendTo(div4);
+ var img2 = $("<div class='img_block' style='text-align: center;'></div>").draggable().appendTo(div4);
+ $("<img src=\"../../objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
+ var audio_block2 = $("<div class='audio_block'>").draggable().appendTo(div4);
+ $("<div class='play'>").appendTo(audio_block2);
+ $("<div class='replay'>").appendTo(audio_block2);
+ var source2 = $("<source/>").attr("src", "../../objects/bateaux.mp3");
+ var audio2 = $("<audio>").appendTo(audio_block2);
+ audio2.append(source2);
+ li4.width($("#slider").width()).height($("#slider").height());
+ $("#slider ul").append(li4);
+ $(".text_block, .audio_block, .img_block").each(function(){
+ $(this).css("position","absolute");
+ });
+ $("#slider").easySlider({
+ prevText: '',
+ nextText: '',
+ controlsShow: false
+ });
+}
+
+//string into xml-format
+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;
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
+
+//drop handler
+function onDropTarget(obj, event) {
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
+ if(tmp_type.substr(0, 5) == "audio"){
+ var audio_block = $("<div class='audio_block'>").draggable().appendTo($(obj));
+ audio_block.css("position","absolute").css("top",event.clientY - 54).css("left",event.clientX - 54);
+ $("<div class='close_img' contenteditable='false'>").appendTo(audio_block);
+ audio_block.addClass("block_border");
+ $("<div class='play'>").appendTo(audio_block);
+ $("<div class='replay'>").appendTo(audio_block);
+ var source = $("<source/>").attr("src", "../../" + tmp);
+ var audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ } else {
+ var img_block = $("<div class='img_block' style='text-align: center;'></div>").appendTo($(obj));
+ img_block.css("top",event.clientY - 54).css("left",event.clientX - 54);
+ $("<div class='move_block' contenteditable='false'>").appendTo(img_block);
+ $("<div class='close_img' contenteditable='false'>").appendTo(img_block);
+ $("<div class='resize_block' contenteditable='false'>").appendTo(img_block);
+ img_block.addClass("block_border");
+ var tmp_img = $("<img src=\"../../" + tmp + "\" style=\"display: inline;\"/>").appendTo(img_block);
+ setTimeout(function(){
+ if(tmp_img.height() >= tmp_img.width())
+ tmp_img.attr("height", "120");
+ else{
+ tmp_img.attr("width","120");
+ tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
+ }
+ }, 6)
+ }
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
+
+if (window.widget) {
+ window.widget.onremove = function(){
+ $("audio").each(function(){
+ this.pause();
+ $(this).parent().find(":first-child").removeClass("stop").addClass("play");
+ });
+ }
+}
+
+$(window).resize(function(){
+ var slider = $("#slider");
+ slider.width($(this).width() - 108).height($(this).height() - 108);
+ $("#slider li").each(function(){
+ $(this).width(slider.width()).height(slider.height());
+ });
+ slider.setSize(slider.width(), slider.height());
+})
diff --git a/Sankore-3.1/resources/library/interactivities/Memory.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Memory.wgt/config.xml
index 1b95329..eec9d38 100644
--- a/Sankore-3.1/resources/library/interactivities/Memory.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Memory.wgt/config.xml
@@ -3,9 +3,9 @@
xmlns:ub="http://uniboard.mnemis.com/widgets"
id="http://www.njin.fr/sankore/apps/memory"
version="1.0"
- width="820"
- height="670"
- ub:resizable="true">
+ width="940"
+ height="680"
+ ub:resizable="false">
<name>Memory</name>
<author href="http://www.njin.fr" email="contact at njin.fr">njin</author>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/config.xml
index a7ce92c..a919f6d 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/config.xml
@@ -5,7 +5,7 @@
version="1.2"
width="950"
height="600"
- ub:resizable="true">
+ ub:resizable="false">
<name>Notes</name>
<author href="http://www.getuniboard.com"
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/index.html
index e79952a..cd8ab18 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/index.html
@@ -3,86 +3,30 @@
<head>
<title>D'n'd</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- start();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- start();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="data">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/js/script.js b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/js/script.js
deleted file mode 100644
index 9200e21..0000000
--- a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/js/script.js
+++ /dev/null
@@ -1,571 +0,0 @@
-var sankoreLang = {
- display: "Display",
- edit: "Edit",
- short_desc: "Place the pictures in ascending order.",
- add: "Add new block",
- enter: "Enter your instruction here ...",
- wgt_name: "Order pictures",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p> <h2> Order pictures </h2> </p>" +
-"<p> <h3> Sort pictures in the order requested</h3> </p>" +
-
-"<p> The number on the frame indicates the order in which the images should be classified. Drag and drop to rank pictures. Once all pictures are correctly classified, the area turns in green. </p> "+
-"<p> Reload âbutton resets the exercises. </p>" +
-
-"<p> Enter the âEditâ mode to : </p>" +
-"<ul> <li> choose the theme of interactivity : pad, slate or none (by default : none),</li>" +
-"<li> modify an exercise or create a new one. </li> </ul>" +
-
-"<p>To create a new exercise : </p>" +
-"<ul> <li> click on âNew blockâ,</li>" +
-"<li> insert an instruction clicking on the text field âEnter your instruction here ... â,</li>" +
-"<li> add picture frames clicking on the â+â,</li>" +
-"<li> drag an drop pictures from your library,</li>" +
-"<li> change the order of images by dragging them.</li> </ul>" +
-
-"<p> To delete a frame, click the cross (X).</p>" +
-"<p> To change a picture, click the âreloadâ button on the frame.</p>" +
-
-"<p> To delete a whole exercise, click the cross to the left. </p>" +
-
-"<p> âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-//main function
-function start(){
-
- $("#wgt_display").text(sankoreLang.display);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_name").text(sankoreLang.wgt_name);
- $("#wgt_reload").text(sankoreLang.reload);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- if(window.sankore){
- if(sankore.preference("odr_des_imgs","")){
- var data = jQuery.parseJSON(sankore.preference("odr_des_imgs",""));
- importData(data);
- } else {
- showExample();
- }
- }
- else
- showExample();
-
- //events
- if (window.widget) {
- window.widget.onleave = function(){
- exportData();
- }
- }
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").slideUp("100", function(){
- tmp.removeClass("open");
- $("#data").show();
- });
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- $("#data").hide();
- $("#help").slideDown("100", function(){
- tmp.addClass("open");
- });
- }
- });
-
- $("#wgt_reload").click(function(){
- if($("#wgt_display").hasClass("selected")){
- $("#wgt_edit").trigger("click");
- $("#wgt_display").trigger("click");
- } else {
- $("#wgt_display").trigger("click");
- }
- });
-
- $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
- exportData();
- });
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display","none");
- $(".add_block").remove();
- $(".cont").each(function(){
- var container = $(this);
- var tmp_i = 0;
- var tmp_right = "";
- var tmp_array = [];
-
- container.find(".text_cont").removeAttr("contenteditable");
- container.find(".add_img").remove();
- container.find(".close_cont").remove();
- container.find(".img_block").each(function(){
- if($(this).find("img").attr("src") != "img/drop_img.png"){
- $(this).find(".close_img").remove();
- $(this).find(".clear_img").remove();
- $(this).find(".numb_img").remove();
- $(this).removeAttr("ondragenter")
- .removeAttr("ondragleave")
- .removeAttr("ondragover")
- .removeAttr("ondrop");
- $(this).find("input").val(++tmp_i)
- tmp_right += tmp_i + "*";
- } else
- $(this).remove();
- });
- container.find(".imgs_cont>input").val(tmp_right);
-
- container.find(".img_block").each(function(){
- $(this).css("float","");
- tmp_array.push($(this));
- });
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++)
- tmp_array[i].appendTo(container.find(".imgs_cont"));
- container.find(".imgs_cont").sortable( {
- update: checkResult
- } );
- });
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- }
- } else {
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(true);
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
- $(".cont").each(function(){
- var container = $(this);
-
- $("<div class='close_cont'>").appendTo(container);
- container.find(".text_cont").attr("contenteditable","true");
- //container.find(".imgs_cont").sortable("destroy");
- container.find(".imgs_cont").css("background-color", "");
-
- var add_img = $("<div class='add_img'>");
- container.find(".img_block").each(function(){
- $(this).attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
- .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
- .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);")
- //.css("float","left");
- $("<div class='close_img'>").appendTo($(this));
- $("<div class='clear_img'>").appendTo($(this));
- $("<div class='numb_img'>" + $(this).find("input").val() + "</div>").appendTo($(this));
- });
- rightOrder(container.find(".imgs_cont"));
- container.find(".imgs_cont").append(add_img)
- });
-
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- }
- }
- });
-
- //add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
-
- //adding new img
- $(".add_img").live("click", function(){
- addImgBlock($(this));
- });
-
- //deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
-
- //deleting the img block
- $(".close_img").live("click", function(){
- var i = 0;
- var tmp_obj = $(this).parent().parent();
- $(this).parent().remove();
- if(tmp_obj.find(".img_block").size() > 0){
- refreshImgNumbers(tmp_obj);
- }
-
- });
-
- //cleaning an image
- $(".clear_img").live("click",function(){
- //$(this).parent().find(".fill_img").remove();
- $(this).parent().find("img").attr("src","img/drop_img.png");
- });
-}
-
-//export
-function exportData(){
- var array_to_export = [];
- if($("#edit").hasClass("selected")){
- $(".cont").each(function(){
- var container = $(this);
- var tmp_right = "";
- var tmp_i = 0;
- container.find(".img_block").each(function(){
- if($(this).html().match(/<img/)){
- $(this).find("input").val(++tmp_i)
- tmp_right += tmp_i + "*";
- }
- });
- container.find(".imgs_cont>input").val(tmp_right);
- });
- }
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- cont_obj.text = $(this).find(".text_cont").text();
- cont_obj.right = $(this).find(".imgs_cont>input").val();
- cont_obj.imgs = [];
- $(this).find(".img_block").each(function(){
- var img_obj = new Object();
- img_obj.value = $(this).find("input").val();
- img_obj.link = $(this).find("img").attr("src");
- img_obj.ht = $(this).find("img").height();
- img_obj.wd = $(this).find("img").width();
- cont_obj.imgs.push(img_obj);
- });
- array_to_export.push(cont_obj);
- });
-
- if($(".cont").size() == 0){
- var cont_obj = new Object();
- cont_obj.style = $("#style_select").find("option:selected").val();
- cont_obj.tmp = "clear";
- array_to_export.push(cont_obj);
- }
- if(window.sankore)
- sankore.setPreference("odr_des_imgs", JSON.stringify(array_to_export));
- if($("#wgt_display").hasClass("selected")){
- if(window.sankore)
- sankore.setPreference("odr_des_imgs_state", "display");
- }
- else{
- if(window.sankore)
- sankore.setPreference("odr_des_imgs_state", "edit");
- }
-}
-
-//import
-function importData(data){
-
- var tmp = 0;
- for(var i in data){
- if(data[i].tmp){
- changeStyle(data[i].style);
- $("#style_select").val(data[i].style);
- }
- else {
- if(i == 0){
- changeStyle(data[i].style);
- $("#style_select").val(data[i].style);
- }
- var tmp_array = [];
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
-
- $("<input type='hidden' value='" + data[i].right + "'/>").appendTo(imgs_container);
-
- for(var j in data[i].imgs){
- var img_block = $("<div class='img_block' style='text-align: center;'>");
- var img = $("<img src='" + data[i].imgs[j].link + "' style='display: inline;'>");
- img.height(data[i].imgs[j].ht);
- if((120 - data[i].imgs[j].ht) > 0)
- img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
- var hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
- img_block.append(hidden_input).append(img);
- tmp_array.push(img_block);
- }
- if(sankore.preference("odr_des_imgs_state","")){
- if(sankore.preference("odr_des_imgs_state","") == "edit")
- tmp_array = shuffle(tmp_array);
- } else
- tmp_array = shuffle(tmp_array);
-
- for(j = 0; j<tmp_array.length;j++)
- tmp_array[j].appendTo(imgs_container);
- imgs_container.sortable().bind('sortupdate', function(event, ui) {
- checkResult(event);
- });
- container.appendTo("#data");
- imgs_container.trigger("sortupdate")
- }
- }
-}
-
-//example
-function showExample(){
-
- changeStyle("3");
- var tmp_array = [];
-
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
-
- $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
-
- var img1 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='1'/>").appendTo(img1);
- $("<img src=\"objects/0.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img1);
- var img2 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='2'/>").appendTo(img2);
- $("<img src=\"objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
- var img3 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='3'/>").appendTo(img3);
- $("<img src=\"objects/2.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img3);
- var img4 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='4'/>").appendTo(img4);
- $("<img src=\"objects/3.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img4);
- var img5 = $("<div class='img_block' style='text-align: center;'></div>");
- $("<input type='hidden' value='5'/>").appendTo(img5);
- $("<img src=\"objects/4.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img5);
-
- tmp_array.push(img1, img2, img3, img4, img5);
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++)
- tmp_array[i].appendTo(imgs_container);
- imgs_container.sortable().bind('sortupdate', function(event, ui) {
- checkResult(event);
- });
-
- container.appendTo("#data");
-}
-
-//check result
-function checkResult(event)
-{
- if($("#wgt_display").hasClass("selected")){
- var str = "";
- var right_str = $(event.target).find("input").val();
- $(event.target).find(".img_block").each(function(){
- str += $(this).find("input").val() + "*";
- });
- if(str == right_str)
- $(event.target).css("background-color","#9f9");
- else
- $(event.target).css("background-color","");
- } else {
- refreshImgNumbers($(event.target));
- }
-}
-
-//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
-
- $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
- var add_img = $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
-
-//add new img block
-function addImgBlock(dest){
- var img_block = $("<div class='img_block' ondragenter='return false;' ondragleave='$(this).css(\"background-color\",\"\"); return false;' ondragover='$(this).css(\"background-color\",\"#ccc\"); return false;' ondrop='$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);' style='text-align: center;'></div>").insertBefore(dest);
- var tmp_counter = dest.parent().find(".img_block").size();
- $("<div class='close_img'>").appendTo(img_block);
- $("<div class='clear_img'>").appendTo(img_block);
- $("<div class='numb_img'>" + tmp_counter + "</div>").appendTo(img_block);
- $("<input type='hidden' value='" + tmp_counter + "'/>").appendTo(img_block);
- $("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
-}
-
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
-
-//shuffles an array
-function shuffle( arr )
-{
- var pos, tmp;
-
- for( var i = 0; i < arr.length; i++ )
- {
- pos = Math.round( Math.random() * ( arr.length - 1 ) );
- tmp = arr[pos];
- arr[pos] = arr[i];
- arr[i] = tmp;
- }
- return arr;
-}
-
-//regulation the images in right order
-function rightOrder(source){
- var tmp_arr = [];
- var tmp_var;
- source.find(".img_block").each(function(){
- tmp_arr.push($(this));
- $(this).remove();
- });
- for(var i = 0; i < tmp_arr.length; i++)
- for(var j = 0; j < tmp_arr.length - 1; j++){
- if(tmp_arr[j].find("input").val() > tmp_arr[j+1].find("input").val()){
- tmp_var = tmp_arr[j];
- tmp_arr[j] = tmp_arr[j+1];
- tmp_arr[j+1] = tmp_var;
- }
- }
- for(i in tmp_arr)
- source.append(tmp_arr[i]);
-}
-
-//refresh the numbers of the images
-function refreshImgNumbers(source){
- var tmp = 1;
- source.find(".img_block").each(function(){
- $(this).find("input").val(tmp);
- $(this).find(".numb_img").text(tmp);
- tmp++;
- });
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
-
-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;
-}
-
-function onDropTarget(obj, event) {
- $(obj).find("img").remove();
- if (event.dataTransfer) {
- var format = "text/plain";
- var textData = event.dataTransfer.getData(format);
- if (!textData) {
- alert(":(");
- }
- textData = stringToXML(textData);
- var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var tmp_img = $("<img/>").attr("src", tmp);
- $(obj).append(tmp_img);
- setTimeout(function(){
- if(tmp_img.height() >= tmp_img.width())
- tmp_img.attr("height", "120");
- else{
- tmp_img.attr("width","120");
- var h = tmp_img.height();
- tmp_img.attr("height",h);
- tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
- }
- }, 6)
- }
- else {
- alert ("Your browser does not support the dataTransfer object.");
- }
-
- if (event.stopPropagation) {
- event.stopPropagation ();
- }
- else {
- event.cancelBubble = true;
- }
- return false;
-}
-
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/img/drop_img.png b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/img/drop_img.png
similarity index 100%
rename from Sankore-3.1/resources/library/interactivities/Ordre images.wgt/img/drop_img.png
rename to Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/img/drop_img.png
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/index.html
new file mode 100644
index 0000000..e6cea60
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/index.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>D'n'd</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../js/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="../../js/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="js/script.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ start();
+ });
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="data">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/js/script.js b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/js/script.js
new file mode 100644
index 0000000..4658d5f
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/en/js/script.js
@@ -0,0 +1,565 @@
+var sankoreLang = {
+ display: "Display",
+ edit: "Edit",
+ short_desc: "Place the pictures in ascending order.",
+ add: "Add new block",
+ enter: "Enter your instruction here ...",
+ wgt_name: "Order pictures",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p> <h2> Order pictures </h2> </p>" +
+"<p> <h3> Sort pictures in the order requested</h3> </p>" +
+
+"<p> The number on the frame indicates the order in which the images should be classified. Drag and drop to rank pictures. Once all pictures are correctly classified, the area turns in green. </p> "+
+"<p> Reload âbutton resets the exercises. </p>" +
+
+"<p> Enter the âEditâ mode to : </p>" +
+"<ul> <li> choose the theme of interactivity : pad, slate or none (by default : none),</li>" +
+"<li> modify the exercise. </li></ul>" +
+
+"<p>In edition mode : </p>" +
+"<ul><li> modify the instruction clicking on the text field,</li>" +
+"<li> add picture frames clicking on the â+â,</li>" +
+"<li> drag an drop pictures from your library,</li>" +
+"<li> change the order of images by dragging them,</li>" +
+"<li> delete a frame, clicking the cross (X),</li>" +
+"<li> change a picture clicking the âreloadâ button on the frame,</li>" +
+"<li> âDisplayâ button comes back to the activity.</li> </ul>",
+ theme: "Theme"
+};
+
+//main function
+function start(){
+
+ $("#wgt_display").text(sankoreLang.display);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_name").text(sankoreLang.wgt_name);
+ $("#wgt_reload").text(sankoreLang.reload);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ if(window.sankore){
+ if(sankore.preference("odr_des_imgs","")){
+ var data = jQuery.parseJSON(sankore.preference("odr_des_imgs",""));
+ importData(data);
+ } else {
+ showExample();
+ }
+ }
+ else
+ showExample();
+
+ //events
+ if (window.widget) {
+ window.widget.onleave = function(){
+ exportData();
+ }
+ }
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").slideUp("100", function(){
+ tmp.removeClass("open");
+ $("#data").show();
+ });
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ $("#data").hide();
+ $("#help").slideDown("100", function(){
+ tmp.addClass("open");
+ });
+ }
+ });
+
+ $("#wgt_reload").click(function(){
+ if($("#wgt_display").hasClass("selected")){
+ $("#wgt_edit").trigger("click");
+ $("#wgt_display").trigger("click");
+ } else {
+ $("#wgt_display").trigger("click");
+ }
+ });
+
+ $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
+ exportData();
+ });
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display","none");
+// $(".add_block").remove();
+ $(".cont").each(function(){
+ var container = $(this);
+ var tmp_i = 0;
+ var tmp_right = "";
+ var tmp_array = [];
+
+ container.find(".text_cont").removeAttr("contenteditable");
+ container.find(".add_img").remove();
+// container.find(".close_cont").remove();
+ container.find(".img_block").each(function(){
+ if($(this).find("img").attr("src") != "img/drop_img.png"){
+ $(this).find(".close_img").remove();
+ $(this).find(".clear_img").remove();
+ $(this).find(".numb_img").remove();
+ $(this).removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop");
+ $(this).find("input").val(++tmp_i)
+ tmp_right += tmp_i + "*";
+ } else
+ $(this).remove();
+ });
+ container.find(".imgs_cont>input").val(tmp_right);
+
+ container.find(".img_block").each(function(){
+ $(this).css("float","");
+ tmp_array.push($(this));
+ });
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++)
+ tmp_array[i].appendTo(container.find(".imgs_cont"));
+ container.find(".imgs_cont").sortable( {
+ update: checkResult
+ } );
+ });
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display","block");
+ $(".cont").each(function(){
+ var container = $(this);
+
+// $("<div class='close_cont'>").appendTo(container);
+ container.find(".text_cont").attr("contenteditable","true");
+ //container.find(".imgs_cont").sortable("destroy");
+ container.find(".imgs_cont").css("background-color", "");
+
+ var add_img = $("<div class='add_img'>");
+ container.find(".img_block").each(function(){
+ $(this).attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).css(\"background-color\",\"\"); return false;")
+ .attr("ondragover", "$(this).css(\"background-color\",\"#ccc\"); return false;")
+ .attr("ondrop", "$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);")
+ //.css("float","left");
+ $("<div class='close_img'>").appendTo($(this));
+ $("<div class='clear_img'>").appendTo($(this));
+ $("<div class='numb_img'>" + $(this).find("input").val() + "</div>").appendTo($(this));
+ });
+ rightOrder(container.find(".imgs_cont"));
+ container.find(".imgs_cont").append(add_img)
+ });
+
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ }
+ }
+ });
+
+ //add new block
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
+
+ //adding new img
+ $(".add_img").live("click", function(){
+ addImgBlock($(this));
+ });
+
+ //deleting a block
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
+
+ //deleting the img block
+ $(".close_img").live("click", function(){
+ var i = 0;
+ var tmp_obj = $(this).parent().parent();
+ $(this).parent().remove();
+ if(tmp_obj.find(".img_block").size() > 0){
+ refreshImgNumbers(tmp_obj);
+ }
+
+ });
+
+ //cleaning an image
+ $(".clear_img").live("click",function(){
+ //$(this).parent().find(".fill_img").remove();
+ $(this).parent().find("img").attr("src","img/drop_img.png");
+ });
+}
+
+//export
+function exportData(){
+ var array_to_export = [];
+ if($("#edit").hasClass("selected")){
+ $(".cont").each(function(){
+ var container = $(this);
+ var tmp_right = "";
+ var tmp_i = 0;
+ container.find(".img_block").each(function(){
+ if($(this).html().match(/<img/)){
+ $(this).find("input").val(++tmp_i)
+ tmp_right += tmp_i + "*";
+ }
+ });
+ container.find(".imgs_cont>input").val(tmp_right);
+ });
+ }
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ cont_obj.text = $(this).find(".text_cont").text();
+ cont_obj.right = $(this).find(".imgs_cont>input").val();
+ cont_obj.imgs = [];
+ $(this).find(".img_block").each(function(){
+ var img_obj = new Object();
+ img_obj.value = $(this).find("input").val();
+ img_obj.link = $(this).find("img").attr("src").replace("../../","");
+ img_obj.ht = $(this).find("img").height();
+ img_obj.wd = $(this).find("img").width();
+ cont_obj.imgs.push(img_obj);
+ });
+ array_to_export.push(cont_obj);
+ });
+
+ if($(".cont").size() == 0){
+ var cont_obj = new Object();
+ cont_obj.style = $("#style_select").find("option:selected").val();
+ cont_obj.tmp = "clear";
+ array_to_export.push(cont_obj);
+ }
+ if(window.sankore)
+ sankore.setPreference("odr_des_imgs", JSON.stringify(array_to_export));
+ if($("#wgt_display").hasClass("selected")){
+ if(window.sankore)
+ sankore.setPreference("odr_des_imgs_state", "display");
+ }
+ else{
+ if(window.sankore)
+ sankore.setPreference("odr_des_imgs_state", "edit");
+ }
+}
+
+//import
+function importData(data){
+
+ for(var i in data){
+ if(data[i].tmp){
+ changeStyle(data[i].style);
+ $("#style_select").val(data[i].style);
+ }
+ else {
+ if(i == 0){
+ changeStyle(data[i].style);
+ $("#style_select").val(data[i].style);
+ }
+ var tmp_array = [];
+ var container = $("<div class='cont'>");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+
+// var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+ var text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
+
+ $("<input type='hidden' value='" + data[i].right + "'/>").appendTo(imgs_container);
+
+ for(var j in data[i].imgs){
+ var img_block = $("<div class='img_block' style='text-align: center;'>");
+ var img = $("<img src='../../" + data[i].imgs[j].link + "' style='display: inline;'>");
+ img.height(data[i].imgs[j].ht);
+ if((120 - data[i].imgs[j].ht) > 0)
+ img.css("margin",(120 - data[i].imgs[j].ht)/2 + "px 0");
+ var hidden_input = $("<input type='hidden'>").val(data[i].imgs[j].value);
+ img_block.append(hidden_input).append(img);
+ tmp_array.push(img_block);
+ }
+ if(sankore.preference("odr_des_imgs_state","")){
+ if(sankore.preference("odr_des_imgs_state","") == "edit")
+ tmp_array = shuffle(tmp_array);
+ } else
+ tmp_array = shuffle(tmp_array);
+
+ for(j = 0; j<tmp_array.length;j++)
+ tmp_array[j].appendTo(imgs_container);
+ imgs_container.sortable().bind('sortupdate', function(event, ui) {
+ checkResult(event);
+ });
+ container.appendTo("#data");
+ imgs_container.trigger("sortupdate")
+ }
+ }
+}
+
+//example
+function showExample(){
+
+ changeStyle("3");
+ var tmp_array = [];
+
+ var container = $("<div class='cont'>");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+ var text = $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
+
+ $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
+
+ var img1 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='1'/>").appendTo(img1);
+ $("<img src=\"../../objects/0.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img1);
+ var img2 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='2'/>").appendTo(img2);
+ $("<img src=\"../../objects/1.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img2);
+ var img3 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='3'/>").appendTo(img3);
+ $("<img src=\"../../objects/2.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img3);
+ var img4 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='4'/>").appendTo(img4);
+ $("<img src=\"../../objects/3.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img4);
+ var img5 = $("<div class='img_block' style='text-align: center;'></div>");
+ $("<input type='hidden' value='5'/>").appendTo(img5);
+ $("<img src=\"../../objects/4.gif\" style=\"display: inline;\" height=\"120\"/>").appendTo(img5);
+
+ tmp_array.push(img1, img2, img3, img4, img5);
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++)
+ tmp_array[i].appendTo(imgs_container);
+ imgs_container.sortable().bind('sortupdate', function(event, ui) {
+ checkResult(event);
+ });
+
+ container.appendTo("#data");
+}
+
+//check result
+function checkResult(event)
+{
+ if($("#wgt_display").hasClass("selected")){
+ var str = "";
+ var right_str = $(event.target).find("input").val();
+ $(event.target).find(".img_block").each(function(){
+ str += $(this).find("input").val() + "*";
+ });
+ if(str == right_str)
+ $(event.target).css("background-color","#9f9");
+ else
+ $(event.target).css("background-color","");
+ } else {
+ refreshImgNumbers($(event.target));
+ }
+}
+
+//add new container
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
+// var add_img = $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
+
+//add new img block
+function addImgBlock(dest){
+ var img_block = $("<div class='img_block' ondragenter='return false;' ondragleave='$(this).css(\"background-color\",\"\"); return false;' ondragover='$(this).css(\"background-color\",\"#ccc\"); return false;' ondrop='$(this).css(\"background-color\",\"\"); return onDropTarget(this,event);' style='text-align: center;'></div>").insertBefore(dest);
+ var tmp_counter = dest.parent().find(".img_block").size();
+ $("<div class='close_img'>").appendTo(img_block);
+ $("<div class='clear_img'>").appendTo(img_block);
+ $("<div class='numb_img'>" + tmp_counter + "</div>").appendTo(img_block);
+ $("<input type='hidden' value='" + tmp_counter + "'/>").appendTo(img_block);
+ $("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
+}
+
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
+
+//shuffles an array
+function shuffle( arr )
+{
+ var pos, tmp;
+
+ for( var i = 0; i < arr.length; i++ )
+ {
+ pos = Math.round( Math.random() * ( arr.length - 1 ) );
+ tmp = arr[pos];
+ arr[pos] = arr[i];
+ arr[i] = tmp;
+ }
+ return arr;
+}
+
+//regulation the images in right order
+function rightOrder(source){
+ var tmp_arr = [];
+ var tmp_var;
+ source.find(".img_block").each(function(){
+ tmp_arr.push($(this));
+ $(this).remove();
+ });
+ for(var i = 0; i < tmp_arr.length; i++)
+ for(var j = 0; j < tmp_arr.length - 1; j++){
+ if(tmp_arr[j].find("input").val() > tmp_arr[j+1].find("input").val()){
+ tmp_var = tmp_arr[j];
+ tmp_arr[j] = tmp_arr[j+1];
+ tmp_arr[j+1] = tmp_var;
+ }
+ }
+ for(i in tmp_arr)
+ source.append(tmp_arr[i]);
+}
+
+//refresh the numbers of the images
+function refreshImgNumbers(source){
+ var tmp = 1;
+ source.find(".img_block").each(function(){
+ $(this).find("input").val(tmp);
+ $(this).find(".numb_img").text(tmp);
+ tmp++;
+ });
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
+
+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;
+}
+
+function onDropTarget(obj, event) {
+ $(obj).find("img").remove();
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ var tmp_img = $("<img/>").attr("src", "../../" + tmp);
+ $(obj).append(tmp_img);
+ setTimeout(function(){
+ if(tmp_img.height() >= tmp_img.width())
+ tmp_img.attr("height", "120");
+ else{
+ tmp_img.attr("width","120");
+ var h = tmp_img.height();
+ tmp_img.attr("height",h);
+ tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
+ }
+ }, 6)
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
+
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/fr/js/script.js b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/fr/js/script.js
index cef5bfb..4bf2523 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/fr/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/fr/js/script.js
@@ -20,20 +20,16 @@ var sankoreLang = {
"<p>Le bouton âModifierâ vous permet :</p>"+
"<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun),</li>"+
- "<li>de modifier un exercice ou dâen créer de nouveaux dans la même activité.</li></ul>"+
+ "<li>de modifier l'exercice.</li></ul>"+
- "<p>Pour créer un nouvel exercice, cliquez sur âNouveau blocâ en bas, puis</p>"+
- "<ul><li>insérez une consigne en cliquant sur le champ de texte âSaisir votre consigne ici â¦â,</li>"+
+ "<p>Dans le mode édition :</p>"+
+ "<ul><li>modifiez la consigne en cliquant sur le champ de texte,</li>"+
"<li>insérez des images dans les zones de dépôt par glisser-déposer des images à partir de votre bibliothèque,</li>"+
- "<li>modifiez éventuellement lâordre des images par un glisser-déposer de lâimage concernée pour la mettre au bon endroit dans la suite.</li></ul>"+
-
- "<p>Pour ajouter une zone image, cliquez sur le gros â+â en bas.</p>"+
- "<p>Pour supprimer une zone image, cliquez sur la croix située dans le coin supérieur droit de lâimage.</p>"+
- "<p>Pour changer dâimage, cliquez sur lâicône située au milieu à droite de lâimage.</p>"+
-
- "<p>Pour supprimer un exercice, cliquez sur la croix à gauche du numéro de lâexercice.</p>"+
-
- "<p>Le bouton âAfficherâ vous permet dâutiliser lâactivité.</p>",
+ "<li>modifiez éventuellement lâordre des images par un glisser-déposer de lâimage concernée pour la mettre au bon endroit dans la suite,</li>"+
+ "<li>ajoutez une zone image, en cliquant sur le gros â+â en bas,</li>"+
+ "<li>supprimez une zone image, en cliquant sur la croix située dans son coin supérieur droit,</li>"+
+ "<li>changez limage en cliquant sur lâicône située au milieu à droite de lâimage,</li>"+
+ "<li>le bouton âAfficherâ vous permet dâutiliser lâactivité.</li></ul>",
theme: "Thème"
};
@@ -62,7 +58,7 @@ function start(){
}
else
showExample();
-
+
//events
if (window.widget) {
window.widget.onleave = function(){
@@ -107,11 +103,12 @@ function start(){
$("#wgt_display, #wgt_edit").click(function(event){
if(this.id == "wgt_display"){
if(!$(this).hasClass("selected")){
- sankore.enableDropOnWidget(false);
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
@@ -120,7 +117,7 @@ function start(){
container.find(".text_cont").removeAttr("contenteditable");
container.find(".add_img").remove();
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".img_block").each(function(){
if($(this).find("img").attr("src") != "img/drop_img.png"){
$(this).find(".close_img").remove();
@@ -153,14 +150,15 @@ function start(){
}
} else {
if(!$(this).hasClass("selected")){
- sankore.enableDropOnWidget(true);
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
$(this).addClass("selected");
$("#wgt_display").removeClass("selected");
$("#parameters").css("display","block");
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".text_cont").attr("contenteditable","true");
//container.find(".imgs_cont").sortable("destroy");
container.find(".imgs_cont").css("background-color", "");
@@ -180,7 +178,7 @@ function start(){
container.find(".imgs_cont").append(add_img)
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -188,9 +186,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
@@ -198,10 +196,10 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -261,22 +259,27 @@ function exportData(){
cont_obj.tmp = "clear";
array_to_export.push(cont_obj);
}
- sankore.setPreference("odr_des_imgs", JSON.stringify(array_to_export));
- if($("#wgt_display").hasClass("selected"))
- sankore.setPreference("odr_des_imgs_state", "display");
- else
- sankore.setPreference("odr_des_imgs_state", "edit");
+ if(window.sankore)
+ sankore.setPreference("odr_des_imgs", JSON.stringify(array_to_export));
+ if($("#wgt_display").hasClass("selected")){
+ if(window.sankore)
+ sankore.setPreference("odr_des_imgs_state", "display");
+ }
+ else{
+ if(window.sankore)
+ sankore.setPreference("odr_des_imgs_state", "edit");
+ }
}
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].tmp){
changeStyle(data[i].style);
$("#style_select").val(data[i].style);
- }else{
+ }
+ else {
if(i == 0){
changeStyle(data[i].style);
$("#style_select").val(data[i].style);
@@ -286,7 +289,7 @@ function importData(data){
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
$("<input type='hidden' value='" + data[i].right + "'/>").appendTo(imgs_container);
@@ -313,8 +316,8 @@ function importData(data){
checkResult(event);
});
container.appendTo("#data");
- imgs_container.trigger("sortupdate")
- }
+ imgs_container.trigger("sortupdate")
+ }
}
}
@@ -328,7 +331,7 @@ function showExample(){
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
$("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
@@ -379,19 +382,19 @@ function checkResult(event)
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
-
- $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
- var add_img = $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
+// var add_img = $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
//add new img block
function addImgBlock(dest){
@@ -404,17 +407,18 @@ function addImgBlock(dest){
$("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
{
- var pos, tmp;
+ var pos, tmp;
+
for( var i = 0; i < arr.length; i++ )
{
pos = Math.round( Math.random() * ( arr.length - 1 ) );
@@ -558,5 +562,4 @@ function onDropTarget(obj, event) {
event.cancelBubble = true;
}
return false;
-}
-
+}
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/ru/js/script.js b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/ru/js/script.js
index 0bce573..d48bcfa 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/ru/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Ordre images.wgt/locales/ru/js/script.js
@@ -40,7 +40,7 @@ function start(){
}
else
showExample();
-
+
//events
if (window.widget) {
window.widget.onleave = function(){
@@ -85,11 +85,12 @@ function start(){
$("#wgt_display, #wgt_edit").click(function(event){
if(this.id == "wgt_display"){
if(!$(this).hasClass("selected")){
- sankore.enableDropOnWidget(false);
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_i = 0;
@@ -98,7 +99,7 @@ function start(){
container.find(".text_cont").removeAttr("contenteditable");
container.find(".add_img").remove();
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".img_block").each(function(){
if($(this).find("img").attr("src") != "img/drop_img.png"){
$(this).find(".close_img").remove();
@@ -131,14 +132,15 @@ function start(){
}
} else {
if(!$(this).hasClass("selected")){
- sankore.enableDropOnWidget(true);
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
$(this).addClass("selected");
$("#wgt_display").removeClass("selected");
$("#parameters").css("display","block");
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".text_cont").attr("contenteditable","true");
//container.find(".imgs_cont").sortable("destroy");
container.find(".imgs_cont").css("background-color", "");
@@ -158,7 +160,7 @@ function start(){
container.find(".imgs_cont").append(add_img)
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -166,9 +168,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
@@ -176,10 +178,10 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -239,22 +241,27 @@ function exportData(){
cont_obj.tmp = "clear";
array_to_export.push(cont_obj);
}
- sankore.setPreference("odr_des_imgs", JSON.stringify(array_to_export));
- if($("#wgt_display").hasClass("selected"))
- sankore.setPreference("odr_des_imgs_state", "display");
- else
- sankore.setPreference("odr_des_imgs_state", "edit");
+ if(window.sankore)
+ sankore.setPreference("odr_des_imgs", JSON.stringify(array_to_export));
+ if($("#wgt_display").hasClass("selected")){
+ if(window.sankore)
+ sankore.setPreference("odr_des_imgs_state", "display");
+ }
+ else{
+ if(window.sankore)
+ sankore.setPreference("odr_des_imgs_state", "edit");
+ }
}
//import
function importData(data){
-
- var tmp = 0;
+
for(var i in data){
if(data[i].tmp){
changeStyle(data[i].style);
$("#style_select").val(data[i].style);
- }else{
+ }
+ else {
if(i == 0){
changeStyle(data[i].style);
$("#style_select").val(data[i].style);
@@ -264,7 +271,7 @@ function importData(data){
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
$("<input type='hidden' value='" + data[i].right + "'/>").appendTo(imgs_container);
@@ -291,8 +298,8 @@ function importData(data){
checkResult(event);
});
container.appendTo("#data");
- imgs_container.trigger("sortupdate")
- }
+ imgs_container.trigger("sortupdate")
+ }
}
}
@@ -306,7 +313,7 @@ function showExample(){
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
$("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
@@ -357,19 +364,19 @@ function checkResult(event)
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- var close = $("<div class='close_cont'>").appendTo(container);
- var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
-
- $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
- var add_img = $("<div class='add_img'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+//
+// var close = $("<div class='close_cont'>").appendTo(container);
+// var number = $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
+//
+// $("<input type='hidden' value='1*2*3*4*5*'/>").appendTo(imgs_container);
+// var add_img = $("<div class='add_img'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
//add new img block
function addImgBlock(dest){
@@ -382,17 +389,18 @@ function addImgBlock(dest){
$("<img src='img/drop_img.png' height='120'/>").appendTo(img_block);
}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
{
- var pos, tmp;
+ var pos, tmp;
+
for( var i = 0; i < arr.length; i++ )
{
pos = Math.round( Math.random() * ( arr.length - 1 ) );
@@ -536,4 +544,4 @@ function onDropTarget(obj, event) {
event.cancelBubble = true;
}
return false;
-}
+}
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/config.xml
index 95c9e84..3c667f0 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/config.xml
@@ -4,8 +4,8 @@
id="http://uniboard.mnemis.com/widgets/notes"
version="1.2"
width="900"
- height="450"
- ub:resizable="true">
+ height="300"
+ ub:resizable="false">
<name>Notes</name>
<author href="http://www.getuniboard.com"
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/index.html
index 1dd4865..cd06f5b 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/index.html
@@ -3,86 +3,30 @@
<head>
<title>D'n'd</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script src="js/jquery-1.8.0.min.js"></script>
- <script src="js/jquery-ui-1.8.23.custom.min.js"></script>
- <script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- start();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- start();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="data">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/js/script.js b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/js/script.js
deleted file mode 100644
index 2aa2504..0000000
--- a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/js/script.js
+++ /dev/null
@@ -1,566 +0,0 @@
-var sankoreLang = {
- display: "Display",
- edit: "Edit",
- short_desc: "Listen to the sound and make the correct word.",
- add: "Add new block",
- enter: "Enter your instruction here ...",
- example: "example",
- wgt_name: "Order letters",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p> <h2> Order letters </ h2> </p>" +
-"<p> <h3>Drag and drop labels in the correct order</h3> </p>" +
-"<p> Listen to the audio file and drag and drop labels in the correct order. If the result is correct, the area turns in green. </p> "+
-
-"<p> You can also use this activity with numbers.</p>" +
-
-"<p>âReloadâ button resets the exercises. </p>" +
-
-"<p> Enter the âEditâ mode to : </p>" +
-"<ul> <li> choose the theme of the App : pad, slate, or none (by default : none), </li>" +
-"<li> modify an exercise or to create a new one.</li> </ul>" +
- "<p>To create a new exercise : </p>" +
-"<ul> <li> click on âNew blockâ,</li>" +
-"<li>insert an instruction the field dragging an audio file from your library, </li>" +
-"<li>edit the text field âEnter your instruction here...â,</li>" +
-"<li>Write the desired word instead of âexampleâ,</li>" +
-"<li>set the correct image of your activity clicking on the submit button âvâ on the frame. </li> </ul>" +
-"<p> To replace an audio file, drag a new one from your library. </p>" +
-"<p> To delete a whole block, click on the cross on the left.</p>" +
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-//main function
-function start(){
-
- $("#wgt_display").text(sankoreLang.display);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_name").text(sankoreLang.wgt_name);
- $("#wgt_reload").text(sankoreLang.reload);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- if(window.sankore){
- if(sankore.preference("ord_let","")){
- var data = jQuery.parseJSON(sankore.preference("ord_let",""));
- importData(data);
- }
- else
- showExample();
- if(sankore.preference("ord_let_style","")){
- changeStyle(sankore.preference("ord_let_style",""));
- $("#style_select").val(sankore.preference("ord_let_style",""));
- } else
- changeStyle("3")
- }
- else
- showExample();
- //events
- if (window.widget) {
- window.widget.onleave = function(){
- exportData();
- sankore.setPreference("ord_let_style", $("#style_select").find("option:selected").val());
- }
- }
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").slideUp("100", function(){
- tmp.removeClass("open");
- $("#data").show();
- });
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- $("#data").hide();
- $("#help").slideDown("100", function(){
- tmp.addClass("open");
- });
- }
- });
-
- $("#wgt_reload").click(function(){
- if($("#wgt_display").hasClass("selected")){
- setTimeout('$("#wgt_display").trigger("click")', 10)
- $("#wgt_edit").trigger("click");
- } else {
- $("#wgt_display").trigger("click");
- }
- });
-
- $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
- exportData();
- });
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display","none");
- $(".add_block").remove();
- $(".cont").each(function(){
- var container = $(this);
- var tmp_array = [];
- var ans_container = container.find(".audio_answer");
-
- container.find(".text_cont .audio_desc").removeAttr("contenteditable");
- container.find(".audio_block").removeAttr("ondragenter")
- .removeAttr("ondragleave")
- .removeAttr("ondragover")
- .removeAttr("ondrop")
- container.find(".close_cont").remove();
- var answer = ans_container.text();
- ans_container.prev().val(answer)
- ans_container.remove();
- var ul_cont = $("<ul id='sortable' class='imgs_answers_gray'>").insertAfter(container.find(".sub_cont"));
- for(var j in answer){
- var tmp_letter = $("<li class='ui-state-default'>" + answer[j] + "</li>");
- tmp_array.push(tmp_letter);
- }
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++)
- tmp_array[i].appendTo(ul_cont);
- ul_cont.sortable({revert: true, placeholder: "highlight", update: checkResult});
- });
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- }
- } else {
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(true);
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
- $(".cont").each(function(){
- var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
- container.find("#sortable").removeClass("imgs_answers_red")
- .removeClass("imgs_answers_green")
- .addClass("imgs_answers_gray")
- .sortable("destroy");
- container.find(".text_cont .audio_desc").attr("contenteditable","true");
- container.find(".audio_block").attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
- .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
- .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
- $("<div class='audio_answer' contenteditable>" + container.find("ul").next().val() + "</div>").appendTo(container);
- container.find("ul").remove();
- });
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- }
- }
-
- $("audio").each(function(){
- this.pause();
- $(this).parent().find(":first-child").removeClass("stop").addClass("play");
- });
-
- });
-
- //add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
-
- //adding new img
- $(".add_img").live("click", function(){
- addImgBlock($(this));
- });
-
- //deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
-
- //deleting the img block
- $(".close_img").live("click", function(){
- var i = 0;
- var tmp_obj = $(this).parent().parent();
- $(this).parent().remove();
- });
-
- //correct image
- $(".true_img").live("click",function(){
- $(this).parent().parent().find(".img_block").each(function(){
- $(this).find("input").val(0);
- var tmp_div = $(this).find(".false_img");
- if(tmp_div)
- tmp_div.removeClass("false_img").addClass("true_img");
- })
- $(this).parent().find("input").val(1);
- $(this).removeClass("true_img").addClass("false_img");
- });
-
- //wrong image
- $(".false_img").live("click",function(){
- $(this).parent().find("input").val(0);
- $(this).removeClass("false_img").addClass("true_img");
- });
-
- //play/pause event
- $(".play, .stop").live("click", function(){
- var tmp_audio = $(this);
- var audio = tmp_audio.parent().find("audio").get(0);
- if($(this).hasClass("play")){
- if(tmp_audio.parent().find("source").attr("src")){
- tmp_audio.removeClass("play").addClass("stop");
- var id = setInterval(function(){
- if(audio.currentTime == audio.duration){
- clearInterval(id);
- tmp_audio.removeClass("stop").addClass("play");
- }
- }, 10);
- tmp_audio.parent().find("input").val(id);
- audio.play();
- }
- } else {
- $(this).removeClass("stop").addClass("play");
- clearInterval( tmp_audio.parent().find("input").val())
- audio.pause();
- }
- });
-
- $(".replay").live("click", function(){
- var tmp_audio = $(this).prev();
- var audio = $(this).parent().find("audio").get(0);
- if(tmp_audio.parent().find("source").attr("src")){
- $(this).prev().removeClass("play").addClass("stop");
- clearInterval($(this).parent().find("input").val());
- var id = setInterval(function(){
- if(audio.currentTime == audio.duration){
- clearInterval(id);
- tmp_audio.removeClass("stop").addClass("play");
- }
- }, 10);
- tmp_audio.parent().find("input").val(id);
- audio.currentTime = 0;
- audio.play();
- }
- });
-}
-
-//export
-function exportData(){
- var array_to_export = [];
- if($("#wgt_edit").hasClass("selected")){
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.text = $(this).find(".audio_desc").text();
- cont_obj.audio = $(this).find("source").attr("src");
- cont_obj.answer = $(this).find(".audio_answer").text();
- cont_obj.cur_answer = "";
- array_to_export.push(cont_obj);
- });
- } else {
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.text = $(this).find(".audio_desc").text();
- cont_obj.audio = $(this).find("source").attr("src");
- cont_obj.answer = $(this).find("ul").next().val();
- cont_obj.cur_answer = getAnswer($(this).find("ul"));
- array_to_export.push(cont_obj);
- });
- }
- if(window.sankore){
- sankore.setPreference("ord_let", JSON.stringify(array_to_export));
- sankore.setPreference("ord_let_locale", "en");
- }
- if($("#wgt_display").hasClass("selected")){
- if(window.sankore)
- sankore.setPreference("ord_let_state", "display");
- }
- else{
- if(window.sankore)
- sankore.setPreference("ord_let_state", "edit");
- }
-}
-
-//import
-function importData(data){
-
- var tmp = 0;
- for(var i in data){
- var tmp_array = [];
- var container = $("<div class='cont'>").appendTo("#data");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<ul id='sortable' class='imgs_answers_gray'>").appendTo(container);
-
- $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", data[i].audio);
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- $("<div class='audio_desc'>" + data[i].text + "</div>").appendTo(text);
- $("<input type='hidden' value='" + data[i].answer + "'/>").appendTo(container);
-
- if(data[i].cur_answer)
- for(var j in data[i].cur_answer){
- var tmp_letter = $("<li class='ui-state-default'>" + data[i].cur_answer[j] + "</li>");
- tmp_array.push(tmp_letter);
- }
- else
- for(j in data[i].answer){
- tmp_letter = $("<li class='ui-state-default'>" + data[i].answer[j] + "</li>");
- tmp_array.push(tmp_letter);
- }
-
- if(sankore.preference("ord_let_state","")){
- if(sankore.preference("ord_let_state","") == "edit")
- tmp_array = shuffle(tmp_array);
- } else
- tmp_array = shuffle(tmp_array);
-
- for(j = 0; j<tmp_array.length;j++)
- tmp_array[j].appendTo(imgs_container);
-
- imgs_container.sortable({revert: true, placeholder: "highlight"}).bind('sortupdate', function(event, ui) {
- checkResult(event);
- });
- if(data[i].cur_answer)
- imgs_container.trigger("sortupdate")
- }
-}
-
-//example
-function showExample(){
-
- var tmp_array = [];
- var container = $("<div class='cont'>").appendTo("#data");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<ul id='sortable' class='imgs_answers_gray'>").appendTo(container);
-
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "objects/beep.mp3");
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- var audio_desc = $("<div class='audio_desc'>" + sankoreLang.short_desc + "</div>").appendTo(text);
-
- $("<input type='hidden' value='" + sankoreLang.example + "'/>").appendTo(container);
-
- for(var j in sankoreLang.example){
- var tmp_letter = $("<li class='ui-state-default'>" + sankoreLang.example[j] + "</li>");
- tmp_array.push(tmp_letter);
- }
-
- tmp_array = shuffle(tmp_array);
- for(var i = 0; i<tmp_array.length;i++)
- tmp_array[i].appendTo(imgs_container);
- imgs_container.sortable({revert: true, placeholder: "highlight"}).bind('sortupdate', function(event, ui) {
- checkResult(event);
- });
-}
-
-//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
-
- $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- audio_block.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
- .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
- .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "");
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
-
- var tmp_input = $("<input type='hidden' value=''/>").insertAfter(sub_container);
- var close = $("<div class='close_cont'>").insertAfter(tmp_input);
- $("<div class='audio_answer' contenteditable>" + sankoreLang.example + "</div>").insertAfter(close);
- container.insertBefore($(".add_block"));
-}
-
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
-
-//shuffles an array
-function shuffle( arr )
-{
- var pos, tmp;
-
- for( var i = 0; i < arr.length; i++ )
- {
- pos = Math.round( Math.random() * ( arr.length - 1 ) );
- tmp = arr[pos];
- arr[pos] = arr[i];
- arr[i] = tmp;
- }
- return arr;
-}
-
-//check result
-function checkResult(event)
-{
- var str = "";
- var right_str = $(event.target).next().val();
- $(event.target).find("li.ui-state-default").each(function(){
- str += $(this).text();
- });
- if(str == right_str)
- $(event.target).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_red")
- .addClass("imgs_answers_green");
- else
- $(event.target).removeClass("imgs_answers_gray")
- .removeClass("imgs_answers_green");
-}
-
-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;
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
-
-
-function onDropAudio(obj, event) {
- if (event.dataTransfer) {
- var format = "text/plain";
- var textData = event.dataTransfer.getData(format);
- if (!textData) {
- alert(":(");
- }
- textData = stringToXML(textData);
- var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
- if(tmp_type.substr(0, 5) == "audio"){
- $(obj).find("audio").remove();
- $(obj).find(":first-child").removeClass("stop").addClass("play");
- var source = $("<source/>").attr("src", tmp);
- var audio = $("<audio>").appendTo($(obj));
- audio.append(source);
- }
- }
- else {
- alert ("Your browser does not support the dataTransfer object.");
- }
-
- if (event.stopPropagation) {
- event.stopPropagation ();
- }
- else {
- event.cancelBubble = true;
- }
- return false;
-}
-
-//get text
-function getAnswer(obj){
- var answer = "";
- obj.find("li.ui-state-default").each(function(){
- answer += $(this).text();
- });
- return answer;
-}
-
-if (window.widget) {
- window.widget.onremove = function(){
- $("audio").each(function(){
- this.pause();
- $(this).parent().find(":first-child").removeClass("stop").addClass("play");
- });
- }
-}
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/en/index.html
new file mode 100644
index 0000000..53e1938
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/en/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>D'n'd</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../js/jquery-1.8.0.min.js"></script>
+ <script type="text/javascript" src="../../js/jquery-ui-1.8.23.custom.min.js"></script>
+ <script type="text/javascript" src="js/script.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ start();
+ });
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="data">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/en/js/script.js b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/en/js/script.js
new file mode 100644
index 0000000..b3199da
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/en/js/script.js
@@ -0,0 +1,564 @@
+var sankoreLang = {
+ display: "Display",
+ edit: "Edit",
+ short_desc: "Listen to the sound and make the correct word.",
+ add: "Add new block",
+ enter: "Enter your instruction here ...",
+ example: "example",
+ wgt_name: "Order letters",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p> <h2> Order letters </ h2> </p>" +
+"<p> <h3>Drag and drop labels in the correct order</h3> </p>" +
+"<p> Listen to the audio file and drag and drop labels in the correct order. If the result is correct, the area turns in green. </p> "+
+
+"<p> You can also use this activity with numbers.</p>" +
+
+"<p>âReloadâ button resets the exercises. </p>" +
+
+"<p> Enter the âEditâ mode to : </p>" +
+"<ul> <li> choose the theme of the App : pad, slate, or none (by default : none), </li>" +
+"<li> modify the exercise.</li> </ul>" +
+ "<p>In edition mode : </p>" +
+"<ul><li>insert an audio dragging and dropping a file from your library, </li>" +
+"<li>edit the text field âEnter your instruction here...â,</li>" +
+"<li>write the desired word instead of âexampleâ,</li>" +
+"<li>set the correct image of your activity clicking on the submit button âvâ on the frame, </li>" +
+"<li>replace an audio file, dragging a new one from your library, </li>" +
+"<li>âDisplayâ button comes back to the activity.</li></ul>",
+ theme: "Theme"
+};
+
+//main function
+function start(){
+
+ $("#wgt_display").text(sankoreLang.display);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_name").text(sankoreLang.wgt_name);
+ $("#wgt_reload").text(sankoreLang.reload);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ if(window.sankore){
+ if(sankore.preference("ord_let","")){
+ var data = jQuery.parseJSON(sankore.preference("ord_let",""));
+ importData(data);
+ }
+ else
+ showExample();
+ if(sankore.preference("ord_let_style","")){
+ changeStyle(sankore.preference("ord_let_style",""));
+ $("#style_select").val(sankore.preference("ord_let_style",""));
+ } else
+ changeStyle("3")
+ }
+ else
+ showExample();
+ //events
+ if (window.widget) {
+ window.widget.onleave = function(){
+ exportData();
+ sankore.setPreference("ord_let_style", $("#style_select").find("option:selected").val());
+ }
+ }
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").slideUp("100", function(){
+ tmp.removeClass("open");
+ $("#data").show();
+ });
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ $("#data").hide();
+ $("#help").slideDown("100", function(){
+ tmp.addClass("open");
+ });
+ }
+ });
+
+ $("#wgt_reload").click(function(){
+ if($("#wgt_display").hasClass("selected")){
+ setTimeout('$("#wgt_display").trigger("click")', 10)
+ $("#wgt_edit").trigger("click");
+ } else {
+ $("#wgt_display").trigger("click");
+ }
+ });
+
+ $("#wgt_reload, #wgt_display, #wgt_edit").mouseover(function(){
+ exportData();
+ });
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display","none");
+// $(".add_block").remove();
+ $(".cont").each(function(){
+ var container = $(this);
+ var tmp_array = [];
+ var ans_container = container.find(".audio_answer");
+
+ container.find(".text_cont .audio_desc").removeAttr("contenteditable");
+ container.find(".audio_block").removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop")
+// container.find(".close_cont").remove();
+ var answer = ans_container.text();
+ ans_container.prev().val(answer)
+ ans_container.remove();
+ var ul_cont = $("<ul id='sortable' class='imgs_answers_gray'>").insertAfter(container.find(".sub_cont"));
+ for(var j in answer){
+ var tmp_letter = $("<li class='ui-state-default'>" + answer[j] + "</li>");
+ tmp_array.push(tmp_letter);
+ }
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++)
+ tmp_array[i].appendTo(ul_cont);
+ ul_cont.sortable({
+ revert: true,
+ placeholder: "highlight",
+ update: checkResult
+ });
+ });
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display","block");
+ $(".cont").each(function(){
+ var container = $(this);
+// $("<div class='close_cont'>").appendTo(container);
+ container.find("#sortable").removeClass("imgs_answers_red")
+ .removeClass("imgs_answers_green")
+ .addClass("imgs_answers_gray")
+ .sortable("destroy");
+ container.find(".text_cont .audio_desc").attr("contenteditable","true");
+ container.find(".audio_block").attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
+ .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
+ .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
+ $("<div class='audio_answer' contenteditable>" + container.find("ul").next().val() + "</div>").appendTo(container);
+ container.find("ul").remove();
+ });
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ }
+ }
+
+ $("audio").each(function(){
+ this.pause();
+ $(this).parent().find(":first-child").removeClass("stop").addClass("play");
+ });
+
+ });
+
+ //add new block
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
+
+ //adding new img
+ $(".add_img").live("click", function(){
+ addImgBlock($(this));
+ });
+
+ //deleting a block
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
+
+ //deleting the img block
+ $(".close_img").live("click", function(){
+ var i = 0;
+ var tmp_obj = $(this).parent().parent();
+ $(this).parent().remove();
+ });
+
+ //correct image
+ $(".true_img").live("click",function(){
+ $(this).parent().parent().find(".img_block").each(function(){
+ $(this).find("input").val(0);
+ var tmp_div = $(this).find(".false_img");
+ if(tmp_div)
+ tmp_div.removeClass("false_img").addClass("true_img");
+ })
+ $(this).parent().find("input").val(1);
+ $(this).removeClass("true_img").addClass("false_img");
+ });
+
+ //wrong image
+ $(".false_img").live("click",function(){
+ $(this).parent().find("input").val(0);
+ $(this).removeClass("false_img").addClass("true_img");
+ });
+
+ //play/pause event
+ $(".play, .stop").live("click", function(){
+ var tmp_audio = $(this);
+ var audio = tmp_audio.parent().find("audio").get(0);
+ if($(this).hasClass("play")){
+ if(tmp_audio.parent().find("source").attr("src")){
+ tmp_audio.removeClass("play").addClass("stop");
+ var id = setInterval(function(){
+ if(audio.currentTime == audio.duration){
+ clearInterval(id);
+ tmp_audio.removeClass("stop").addClass("play");
+ }
+ }, 10);
+ tmp_audio.parent().find("input").val(id);
+ audio.play();
+ }
+ } else {
+ $(this).removeClass("stop").addClass("play");
+ clearInterval( tmp_audio.parent().find("input").val())
+ audio.pause();
+ }
+ });
+
+ $(".replay").live("click", function(){
+ var tmp_audio = $(this).prev();
+ var audio = $(this).parent().find("audio").get(0);
+ if(tmp_audio.parent().find("source").attr("src")){
+ $(this).prev().removeClass("play").addClass("stop");
+ clearInterval($(this).parent().find("input").val());
+ var id = setInterval(function(){
+ if(audio.currentTime == audio.duration){
+ clearInterval(id);
+ tmp_audio.removeClass("stop").addClass("play");
+ }
+ }, 10);
+ tmp_audio.parent().find("input").val(id);
+ audio.currentTime = 0;
+ audio.play();
+ }
+ });
+}
+
+//export
+function exportData(){
+ var array_to_export = [];
+ if($("#wgt_edit").hasClass("selected")){
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.text = $(this).find(".audio_desc").text();
+ cont_obj.audio = $(this).find("source").attr("src");
+ cont_obj.answer = $(this).find(".audio_answer").text();
+ cont_obj.cur_answer = "";
+ array_to_export.push(cont_obj);
+ });
+ } else {
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.text = $(this).find(".audio_desc").text();
+ cont_obj.audio = $(this).find("source").attr("src");
+ cont_obj.answer = $(this).find("ul").next().val();
+ cont_obj.cur_answer = getAnswer($(this).find("ul"));
+ array_to_export.push(cont_obj);
+ });
+ }
+ sankore.setPreference("ord_let", JSON.stringify(array_to_export));
+ if($("#wgt_display").hasClass("selected"))
+ sankore.setPreference("ord_let_state", "display");
+ else
+ sankore.setPreference("ord_let_state", "edit");
+}
+
+//import
+function importData(data){
+
+ for(var i in data){
+ var tmp_array = [];
+ var container = $("<div class='cont'>").appendTo("#data");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_container = $("<ul id='sortable' class='imgs_answers_gray'>").appendTo(container);
+
+// $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+ var text = $("<div class='text_cont'>").appendTo(sub_container);
+ var audio_block = $("<div class='audio_block'>").appendTo(text);
+ $("<div class='play'>").appendTo(audio_block);
+ $("<div class='replay'>").appendTo(audio_block);
+ var source = $("<source/>").attr("src", data[i].audio);
+ var audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ $("<input type='hidden'/>").appendTo(audio_block);
+ $("<div class='audio_desc'>" + data[i].text + "</div>").appendTo(text);
+ $("<input type='hidden' value='" + data[i].answer + "'/>").appendTo(container);
+ if(data[i].cur_answer)
+ for(var j in data[i].cur_answer){
+ var tmp_letter = $("<li class='ui-state-default'>" + data[i].cur_answer[j] + "</li>");
+ tmp_array.push(tmp_letter);
+ }
+ else
+ for(j in data[i].answer){
+ tmp_letter = $("<li class='ui-state-default'>" + data[i].answer[j] + "</li>");
+ tmp_array.push(tmp_letter);
+ }
+
+ if(sankore.preference("ord_let_state","")){
+ if(sankore.preference("ord_let_state","") == "edit")
+ tmp_array = shuffle(tmp_array);
+ } else
+ tmp_array = shuffle(tmp_array);
+
+ for(j = 0; j<tmp_array.length;j++)
+ tmp_array[j].appendTo(imgs_container);
+
+ imgs_container.sortable({
+ revert: true,
+ placeholder: "highlight"
+ }).bind('sortupdate', function(event, ui) {
+ checkResult(event);
+ });
+ if(data[i].cur_answer)
+ imgs_container.trigger("sortupdate")
+ }
+}
+
+//example
+function showExample(){
+
+ var tmp_array = [];
+ var container = $("<div class='cont'>").appendTo("#data");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_container = $("<ul id='sortable' class='imgs_answers_gray'>").appendTo(container);
+
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+ var text = $("<div class='text_cont'>").appendTo(sub_container);
+ var audio_block = $("<div class='audio_block'>").appendTo(text);
+ $("<div class='play'>").appendTo(audio_block);
+ $("<div class='replay'>").appendTo(audio_block);
+ var source = $("<source/>").attr("src", "../../objects/example_en.mp3");
+ var audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ $("<input type='hidden'/>").appendTo(audio_block);
+ var audio_desc = $("<div class='audio_desc'>" + sankoreLang.short_desc + "</div>").appendTo(text);
+
+ $("<input type='hidden' value='" + sankoreLang.example + "'/>").appendTo(container);
+
+ for(var j in sankoreLang.example){
+ var tmp_letter = $("<li class='ui-state-default'>" + sankoreLang.example[j] + "</li>");
+ tmp_array.push(tmp_letter);
+ }
+
+ tmp_array = shuffle(tmp_array);
+ for(var i = 0; i<tmp_array.length;i++)
+ tmp_array[i].appendTo(imgs_container);
+ imgs_container.sortable({
+ revert: true,
+ placeholder: "highlight"
+ }).bind('sortupdate', function(event, ui) {
+ checkResult(event);
+ });
+}
+
+//add new container
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+//
+// $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont'>").appendTo(sub_container);
+// var audio_block = $("<div class='audio_block'>").appendTo(text);
+// audio_block.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
+// .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
+// .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
+// $("<div class='play'>").appendTo(audio_block);
+// $("<div class='replay'>").appendTo(audio_block);
+// var source = $("<source/>").attr("src", "");
+// var audio = $("<audio>").appendTo(audio_block);
+// audio.append(source);
+// $("<input type='hidden'/>").appendTo(audio_block);
+// $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
+//
+// var tmp_input = $("<input type='hidden' value=''/>").insertAfter(sub_container);
+// var close = $("<div class='close_cont'>").insertAfter(tmp_input);
+// $("<div class='audio_answer' contenteditable>" + sankoreLang.example + "</div>").insertAfter(close);
+// container.insertBefore($(".add_block"));
+//}
+
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
+
+//shuffles an array
+function shuffle( arr )
+{
+ var pos, tmp;
+
+ for( var i = 0; i < arr.length; i++ )
+ {
+ pos = Math.round( Math.random() * ( arr.length - 1 ) );
+ tmp = arr[pos];
+ arr[pos] = arr[i];
+ arr[i] = tmp;
+ }
+ return arr;
+}
+
+//check result
+function checkResult(event)
+{
+ var str = "";
+ var right_str = $(event.target).next().val();
+ $(event.target).find("li.ui-state-default").each(function(){
+ str += $(this).text();
+ });
+ if(str == right_str)
+ $(event.target).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_red")
+ .addClass("imgs_answers_green");
+ else
+ $(event.target).removeClass("imgs_answers_gray")
+ .removeClass("imgs_answers_green");
+}
+
+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;
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
+
+function onDropAudio(obj, event) {
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
+ if(tmp_type.substr(0, 5) == "audio"){
+ $(obj).find("audio").remove();
+ $(obj).find(":first-child").removeClass("stop").addClass("play");
+ var source = $("<source/>").attr("src", "../../" + tmp);
+ var audio = $("<audio>").appendTo($(obj));
+ audio.append(source);
+ }
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
+
+//get text
+function getAnswer(obj){
+ var answer = "";
+ obj.find("li.ui-state-default").each(function(){
+ answer += $(this).text();
+ });
+ return answer;
+}
+
+if (window.widget) {
+ window.widget.onremove = function(){
+ $("audio").each(function(){
+ this.pause();
+ $(this).parent().find(":first-child").removeClass("stop").addClass("play");
+ });
+ }
+}
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/fr/js/script.js b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/fr/js/script.js
index 450caf6..7ab3c7c 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/fr/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/fr/js/script.js
@@ -22,16 +22,13 @@ var sankoreLang = {
"<p>Le bouton âModifierâ vous permet :</p>"+
"<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun),</li>"+
- "<li>de déterminer le mot à reconstituer.</li></ul>"+
+ "<li>de déterminer le mot à reconstituer et modifier l'exercice.</li></ul>"+
- "<p>Pour créer un nouvel exercice, cliquez sur âNouveau blocâ en bas, puis</p>"+
- "<ul><li>insérez une consigne en cliquant sur le champ de texte âSaisir la consigne ici ...â,</li>"+
+ "<p>Dans le mode édition :</p>"+
+ "<ul><li>modifiez la consigne en cliquant sur le champ de texte,</li>"+
"<li>insérez un son dans la zone à gauche de la consigne par glisser-déposer dâun son à partir de votre bibliothèque (facultatif),</li>"+
- "<li>écrivez le mot souhaité à la place de âexempleâ.</li></ul>"+
-
- "<p>Pour supprimer un exercice, cliquez sur la croix à gauche du numéro de lâexercice.</p>"+
-
- "<p>Le bouton âAfficherâ vous permet dâutiliser lâactivité.</p>",
+ "<li>écrivez le mot souhaité à la place de âexempleâ,</li>"+
+ "<li>le bouton âAfficherâ vous permet dâutiliser lâactivité.</li></ul>",
theme: "Thème"
};
@@ -115,7 +112,7 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_array = [];
@@ -126,7 +123,7 @@ function start(){
.removeAttr("ondragleave")
.removeAttr("ondragover")
.removeAttr("ondrop")
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
var answer = ans_container.text();
ans_container.prev().val(answer)
ans_container.remove();
@@ -156,7 +153,7 @@ function start(){
$("#parameters").css("display","block");
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find("#sortable").removeClass("imgs_answers_red")
.removeClass("imgs_answers_green")
.addClass("imgs_answers_gray")
@@ -169,7 +166,7 @@ function start(){
$("<div class='audio_answer' contenteditable>" + container.find("ul").next().val() + "</div>").appendTo(container);
container.find("ul").remove();
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -183,9 +180,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
@@ -193,10 +190,10 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -288,7 +285,6 @@ function exportData(){
});
}
sankore.setPreference("ord_let", JSON.stringify(array_to_export));
- sankore.setPreference("ord_let_locale", sankore.locale().substr(0,2));
if($("#wgt_display").hasClass("selected"))
sankore.setPreference("ord_let_state", "display");
else
@@ -297,20 +293,19 @@ function exportData(){
//import
function importData(data){
- var tmp_loc = sankore.preference("ord_let_locale","")
- var tmp = 0;
+
for(var i in data){
var tmp_array = [];
var container = $("<div class='cont'>").appendTo("#data");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<ul id='sortable' class='imgs_answers_gray'>").appendTo(container);
- $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>").appendTo(sub_container);
var audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src",((tmp_loc != "en")?"":"../../") + data[i].audio);
+ var source = $("<source/>").attr("src", data[i].audio);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden'/>").appendTo(audio_block);
@@ -355,12 +350,12 @@ function showExample(){
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<ul id='sortable' class='imgs_answers_gray'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>").appendTo(sub_container);
var audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "objects/exemple.mp3");
+ var source = $("<source/>").attr("src", "../../objects/example_fr.mp3");
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden'/>").appendTo(audio_block);
@@ -385,37 +380,37 @@ function showExample(){
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
-
- $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- audio_block.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
- .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
- .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "");
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
-
- var tmp_input = $("<input type='hidden' value=''/>").insertAfter(sub_container);
- var close = $("<div class='close_cont'>").insertAfter(tmp_input);
- $("<div class='audio_answer' contenteditable>" + sankoreLang.example + "</div>").insertAfter(close);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+//
+// $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont'>").appendTo(sub_container);
+// var audio_block = $("<div class='audio_block'>").appendTo(text);
+// audio_block.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
+// .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
+// .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
+// $("<div class='play'>").appendTo(audio_block);
+// $("<div class='replay'>").appendTo(audio_block);
+// var source = $("<source/>").attr("src", "");
+// var audio = $("<audio>").appendTo(audio_block);
+// audio.append(source);
+// $("<input type='hidden'/>").appendTo(audio_block);
+// $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
+//
+// var tmp_input = $("<input type='hidden' value=''/>").insertAfter(sub_container);
+// var close = $("<div class='close_cont'>").insertAfter(tmp_input);
+// $("<div class='audio_answer' contenteditable>" + sankoreLang.example + "</div>").insertAfter(close);
+// container.insertBefore($(".add_block"));
+//}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/ru/js/script.js b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/ru/js/script.js
index 1a00bd2..85d5844 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/ru/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/ru/js/script.js
@@ -95,7 +95,7 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
var tmp_array = [];
@@ -106,7 +106,7 @@ function start(){
.removeAttr("ondragleave")
.removeAttr("ondragover")
.removeAttr("ondrop")
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
var answer = ans_container.text();
ans_container.prev().val(answer)
ans_container.remove();
@@ -136,7 +136,7 @@ function start(){
$("#parameters").css("display","block");
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find("#sortable").removeClass("imgs_answers_red")
.removeClass("imgs_answers_green")
.addClass("imgs_answers_gray")
@@ -149,7 +149,7 @@ function start(){
$("<div class='audio_answer' contenteditable>" + container.find("ul").next().val() + "</div>").appendTo(container);
container.find("ul").remove();
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -163,9 +163,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//adding new img
$(".add_img").live("click", function(){
@@ -173,10 +173,10 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
@@ -268,7 +268,6 @@ function exportData(){
});
}
sankore.setPreference("ord_let", JSON.stringify(array_to_export));
- sankore.setPreference("ord_let_locale", sankore.locale().substr(0,2));
if($("#wgt_display").hasClass("selected"))
sankore.setPreference("ord_let_state", "display");
else
@@ -277,20 +276,19 @@ function exportData(){
//import
function importData(data){
- var tmp_loc = sankore.preference("ord_let_locale","")
- var tmp = 0;
+
for(var i in data){
var tmp_array = [];
var container = $("<div class='cont'>").appendTo("#data");
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<ul id='sortable' class='imgs_answers_gray'>").appendTo(container);
- $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
+// $("<div class='number_cont'>"+ (++tmp) +"</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>").appendTo(sub_container);
var audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src",((tmp_loc != "en")?"":"../../") + data[i].audio);
+ var source = $("<source/>").attr("src", data[i].audio);
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden'/>").appendTo(audio_block);
@@ -335,12 +333,12 @@ function showExample(){
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<ul id='sortable' class='imgs_answers_gray'>").appendTo(container);
- var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// var number = $("<div class='number_cont'>1</div>").appendTo(sub_container);
var text = $("<div class='text_cont'>").appendTo(sub_container);
var audio_block = $("<div class='audio_block'>").appendTo(text);
$("<div class='play'>").appendTo(audio_block);
$("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "objects/example.mp3");
+ var source = $("<source/>").attr("src", "../../objects/example_ru.mp3");
var audio = $("<audio>").appendTo(audio_block);
audio.append(source);
$("<input type='hidden'/>").appendTo(audio_block);
@@ -365,37 +363,37 @@ function showExample(){
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
-
- $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont'>").appendTo(sub_container);
- var audio_block = $("<div class='audio_block'>").appendTo(text);
- audio_block.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
- .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
- .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", "");
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden'/>").appendTo(audio_block);
- $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
-
- var tmp_input = $("<input type='hidden' value=''/>").insertAfter(sub_container);
- var close = $("<div class='close_cont'>").insertAfter(tmp_input);
- $("<div class='audio_answer' contenteditable>" + sankoreLang.example + "</div>").insertAfter(close);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+//
+// $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont'>").appendTo(sub_container);
+// var audio_block = $("<div class='audio_block'>").appendTo(text);
+// audio_block.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).removeClass('audio_gray'); return false;")
+// .attr("ondragover", "$(this).addClass('audio_gray'); return false;")
+// .attr("ondrop", "$(this).removeClass('audio_gray'); return onDropAudio(this,event);");
+// $("<div class='play'>").appendTo(audio_block);
+// $("<div class='replay'>").appendTo(audio_block);
+// var source = $("<source/>").attr("src", "");
+// var audio = $("<audio>").appendTo(audio_block);
+// audio.append(source);
+// $("<input type='hidden'/>").appendTo(audio_block);
+// $("<div class='audio_desc' contenteditable>" + sankoreLang.enter + "</div>").appendTo(text);
+//
+// var tmp_input = $("<input type='hidden' value=''/>").insertAfter(sub_container);
+// var close = $("<div class='close_cont'>").insertAfter(tmp_input);
+// $("<div class='audio_answer' contenteditable>" + sankoreLang.example + "</div>").insertAfter(close);
+// container.insertBefore($(".add_block"));
+//}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
//shuffles an array
function shuffle( arr )
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/objects/beep.mp3 b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/objects/example_en.mp3
similarity index 100%
rename from Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/objects/beep.mp3
rename to Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/objects/example_en.mp3
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/fr/objects/exemple.mp3 b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/objects/example_fr.mp3
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/fr/objects/exemple.mp3
copy to Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/objects/example_fr.mp3
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/ru/objects/example.mp3 b/Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/objects/example_ru.mp3
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/locales/ru/objects/example.mp3
copy to Sankore-3.1/resources/library/interactivities/Ordre lettres.wgt/objects/example_ru.mp3
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/config.xml
index 0c0cf70..9cc7856 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/config.xml
@@ -6,7 +6,7 @@
version="1.1"
width="850"
height="420"
- ub:resizable="true">
+ ub:resizable="false">
<name>Words/Letters sortable</name>
<description>Sort the words/letters to make the right phrase/word.</description>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/index.html
index 2b442a4..f5e44aa 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/index.html
@@ -7,93 +7,33 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Template</title>
- <!--Styles-->
- <link rel="stylesheet" type="text/css" href="styles/master.css">
- <link rel="stylesheet" type="text/css" href="styles/of_puppets.css">
<!--Scripts-->
<script type="text/javascript" src="scripts/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="scripts/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="scripts/template2.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- $("#ub-widget").append('<div id="mp_setup"></div><div id="mp_word"></div>');
- modeView();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- modeView();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="ub-widget">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
+
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/locales/fr/index.html b/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/locales/en/index.html
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/locales/fr/index.html
copy to Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/locales/en/index.html
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/locales/en/scripts/template2.js b/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/locales/en/scripts/template2.js
new file mode 100644
index 0000000..e28ec2d
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/locales/en/scripts/template2.js
@@ -0,0 +1,435 @@
+
+/*
+ Sankore API
+*/
+
+function startEditing()
+{
+ modeEdit();
+}
+
+function stopEditing()
+{
+ modeView();
+}
+
+function initialize()
+{
+
+}
+
+function checkResponse()
+{
+ checkWord();
+}
+/*
+ / END sankore api
+*/
+
+var sankoreLang = {
+ view: "Display",
+ edit: "Edit",
+ example: "a*long*,*long*time*ago*...",
+ wgt_name: "Order words",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p><h2>Order words </h2> </p>" +
+"<p><h3>Order words to reconstruct a correct sentence</h3></p>" +
+
+"<p>The interactivity displays labels in a random order. Drag and drop words in correct order. If the result is correct, the area turns in green.</p> "+
+"<p>âReloadâ button resets the exercises. </p>" +
+
+"<p> Enter the âEditâ mode to : </p>" +
+"<ul> <li> choose the theme of the App : pad, slate, or none (by default : none), </li>" +
+"<li> determine the sentence and place separation between words. </li> </ul>" +
+
+ "<p>To create a new exercise : </p>" +
+"<ul><li>insert the desired sentence,</li>" +
+"<li> add spaces in the sentence, inserting â*â between each word. Do not place a star at the beginning or the end of your sentence.</li></ul>" +
+"<p>âDisplayâ button comes back to the activity.</p>",
+ theme: "Theme"
+};
+
+var word = "";
+var curWord = "";
+
+if(window.sankore){
+ word = (sankore.preference("rightOrdWords", ""))?sankore.preference("rightOrdWords", ""):sankoreLang.example;
+ curWord = (sankore.preference("currentOrdWords", ""))?sankore.preference("currentOrdWords", ""):"";
+} else {
+ word = sankoreLang.example;
+}
+
+// array of dom elements
+var letters = [];
+
+var editMode = false; // just a flag
+
+var wgtState = false; // just another flag
+
+// if use the "edit" button or rely on the api instead
+var isSankore = false;
+// whether to do window.resize or not (window = widget area)
+var isBrowser = ( typeof( widget ) == "undefined" );
+
+// hardcoded parameters, not very good
+var input_width = 606;
+var widget_padding = 0;
+var min_view_width = 400;
+
+
+$(document).ready(function(){
+ if(window.sankore){
+ if(sankore.preference("ord_words_style","")){
+ changeStyle(sankore.preference("ord_words_style",""));
+ } else
+ changeStyle("3")
+ } else
+ changeStyle("3")
+ $("#wgt_display").text(sankoreLang.view);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display","none");
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ modeView();
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display","block");
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ modeEdit();
+ }
+ }
+ });
+
+ $("#wgt_name").text(sankoreLang.wgt_name);
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").slideUp("100", function(){
+ tmp.removeClass("open");
+ $("#ub-widget").show();
+ });
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ $("#ub-widget").hide();
+ $("#help").slideDown("100", function(){
+ tmp.addClass("open");
+ });
+ }
+ });
+
+ $("#wgt_reload").text(sankoreLang.reload).click(function(){
+ if(wgtState)
+ $("#wgt_display").trigger("click");
+ else
+ {
+ $( "#mp_word" ).empty();
+
+ // create new set of letters
+ var letters;
+ letters = shuffle( createWordLetters( word ) );
+
+ for( i in letters ){
+ $("#mp_word").append( letters[i] );
+ }
+
+ // in sankore api there would be a function to check
+ // the answer, so no update parameter would be needed
+ if( !isSankore ){
+ $( "#mp_word" ).sortable( {
+ update: checkWord
+ } );
+ } else $( "#mp_word" ).sortable();
+
+ // adjustWidth
+ var totalLettersWidth = 0;
+ for( i in letters ){
+ var currentWidth = $( letters[i] ).outerWidth( true );
+ totalLettersWidth += currentWidth;
+ }
+ totalLettersWidth += 1;
+
+ var width = Math.max(
+ totalLettersWidth,
+ min_view_width
+ );
+
+ // shift the words to the right to center them
+ if( width > totalLettersWidth ){
+ $( "#mp_word" ).css( "margin-left", Math.round( (width - totalLettersWidth)/2 ) );
+ }
+ else{
+ $( "#mp_word" ).css( "margin-left", 0 );
+ }
+ }
+ });
+
+})
+
+/*
+=================
+createWordLetters
+=================
+returns array of dom elements
+*/
+function createWordLetters( word )
+{
+ var ch, el;
+ var letters = [];
+
+ if( word.indexOf( '*' ) != -1 )
+ {
+ var tmp = word.split( '*' );
+ for( i in tmp )
+ {
+ ch = tmp[i];
+ el = document.createElement( "div" );
+ $(el).addClass( "letter" ).text( ch );
+ letters.push( el );
+ }
+ }
+ else
+ {
+ for( var i = 0; i < word.length; i++ )
+ {
+ ch = word.charAt( i );
+ el = document.createElement( "div" );
+ $(el).addClass( "letter" ).text( ch );
+ letters.push( el );
+ }
+ }
+ return letters;
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select option:first").attr('selected',true);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select option:first").next().attr('selected',true);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select option:last").attr('selected',true);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
+
+/*
+=====================
+checkWord
+=====================
+scans the letters and checks
+if they are in the right order
+*/
+function checkWord()
+{
+ var str = "";
+ $( "#mp_word .letter" ).each( function(){
+ str += $(this).text();
+ });
+ var w = word;
+ while( w.indexOf( '*' ) != -1 )
+ {
+ w = w.replace( '*', '' );
+ }
+ //alert(str + " | " + w)
+ if( str == w ){
+ $( "#mp_word .letter" ).addClass( "right" );
+ //message( "Right!" );
+ } else {
+ $( "#mp_word .letter" ).removeClass( "right" );
+ }
+}
+
+/*
+==============
+shuffle
+==============
+shuffles an array
+*/
+function shuffle( arr )
+{
+ var pos, tmp;
+
+ for( var i = 0; i < arr.length; i++ )
+ {
+ pos = Math.round( Math.random() * ( arr.length - 1 ) );
+ tmp = arr[pos];
+ arr[pos] = arr[i];
+ arr[i] = tmp;
+ }
+ return arr;
+}
+
+
+
+/*
+==================
+modeView()
+==================
+turns the widget into the view mode
+*/
+function modeView()
+{
+ if( editMode ){
+ word = $( "#mp_word .wgt_cont" ).val();
+ }
+
+ wgtState = false;
+
+ // clean the previous word
+ $( "#mp_word" ).empty();
+
+ // create new set of letters
+ var letters;
+ if(window.sankore && curWord && !editMode)
+ letters = createWordLetters( curWord );
+ else
+ letters = shuffle( createWordLetters( word ) );
+
+ for( i in letters ){
+ $("#mp_word").append( letters[i] );
+ }
+
+ // in sankore api there would be a function to check
+ // the answer, so no update parameter would be needed
+ if( !isSankore ){
+ $( "#mp_word" ).sortable( {
+ update: checkWord
+ } );
+ } else $( "#mp_word" ).sortable();
+
+ // adjustWidth
+ var totalLettersWidth = 0;
+ for( i in letters ){
+ var currentWidth = $( letters[i] ).outerWidth( true );
+ totalLettersWidth += currentWidth;
+ }
+ totalLettersWidth += 1;
+
+ var width = Math.max(
+ totalLettersWidth,
+ min_view_width
+ );
+
+ // shift the words to the right to center them
+ if( width > totalLettersWidth ){
+ $( "#mp_word" ).css( "margin-left", Math.round( (width - totalLettersWidth)/2 ) );
+ }
+ else{
+ $( "#mp_word" ).css( "margin-left", 0 );
+ }
+
+ checkWord();
+}
+
+/*
+================
+modeEdit
+================
+*/
+function modeEdit()
+{
+ editMode = true;
+ wgtState = true;
+ $( "#mp_word").sortable( "destroy" );
+ $( "#mp_word").css( "margin-left", 0 ).empty().append('<textarea class="wgt_cont">'+word+'</textarea>');
+
+}
+
+if (window.widget) {
+ window.widget.onleave = function(){
+ sankore.setPreference("ord_words_style", $("#style_select").find("option:selected").val());
+ if($( "#mp_word .wgt_cont" ).val())
+ {
+ modeView();
+ var str = "";
+ $( "#mp_word .letter" ).each( function(){
+ str += $(this).text() + "*";
+ });
+ str = str.substr(0, str.length - 1);
+ sankore.setPreference("currentOrdWords", str);
+ modeEdit();
+ }
+ else{
+ str = "";
+ $( "#mp_word .letter" ).each( function(){
+ str += $(this).text() + "*";
+ });
+ str = str.substr(0, str.length - 1);
+ sankore.setPreference("currentOrdWords", str);
+ }
+ sankore.setPreference("rightOrdWords", word);
+ }
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/scripts/template2.js b/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/scripts/template2.js
deleted file mode 100644
index 127157e..0000000
--- a/Sankore-3.1/resources/library/interactivities/Ordre mots.wgt/scripts/template2.js
+++ /dev/null
@@ -1,435 +0,0 @@
-
-/*
- Sankore API
-*/
-
-function startEditing()
-{
- modeEdit();
-}
-
-function stopEditing()
-{
- modeView();
-}
-
-function initialize()
-{
-
-}
-
-function checkResponse()
-{
- checkWord();
-}
-/*
- / END sankore api
-*/
-
-var sankoreLang = {
- view: "Display",
- edit: "Edit",
- example: "a*long*,*long*time*ago*...",
- wgt_name: "Order words",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p><h2>Order words </h2> </p>" +
-"<p><h3>Order words to reconstruct a correct sentence</h3></p>" +
-
-"<p>The interactivity displays labels in a random order. Drag and drop words in correct order. If the result is correct, the area turns in green.</p> "+
-"<p>âReloadâ button resets the exercises. </p>" +
-
-"<p> Enter the âEditâ mode to : </p>" +
-"<ul> <li> choose the theme of the App : pad, slate, or none (by default : none), </li>" +
-"<li> Determine the sentence and place separation between words. </li> </ul>" +
-
- "<p>To create a new exercise : </p>" +
-"<ul><li>insert the desired sentence,</li>" +
-"<li> To add spaces in the sentence, insert â*â between each word. Do not place a star at the beginning or the end of your sentence.</li></ul>" +
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-var word = "";
-var curWord = "";
-
-if(window.sankore){
- word = (sankore.preference("rightOrdWords", ""))?sankore.preference("rightOrdWords", ""):sankoreLang.example;
- curWord = (sankore.preference("currentOrdWords", ""))?sankore.preference("currentOrdWords", ""):"";
-} else {
- word = sankoreLang.example;
-}
-
-// array of dom elements
-var letters = [];
-
-var editMode = false; // just a flag
-
-var wgtState = false; // just another flag
-
-// if use the "edit" button or rely on the api instead
-var isSankore = false;
-// whether to do window.resize or not (window = widget area)
-var isBrowser = ( typeof( widget ) == "undefined" );
-
-// hardcoded parameters, not very good
-var input_width = 606;
-var widget_padding = 0;
-var min_view_width = 400;
-
-
-$(document).ready(function(){
- if(window.sankore){
- if(sankore.preference("ord_words_style","")){
- changeStyle(sankore.preference("ord_words_style",""));
- } else
- changeStyle("3")
- } else
- changeStyle("3")
- $("#wgt_display").text(sankoreLang.view);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display","none");
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- modeView();
- }
- } else {
- if(!$(this).hasClass("selected")){
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- modeEdit();
- }
- }
- });
-
- $("#wgt_name").text(sankoreLang.wgt_name);
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").slideUp("100", function(){
- tmp.removeClass("open");
- $("#ub-widget").show();
- });
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- $("#ub-widget").hide();
- $("#help").slideDown("100", function(){
- tmp.addClass("open");
- });
- }
- });
-
- $("#wgt_reload").text(sankoreLang.reload).click(function(){
- if(wgtState)
- $("#wgt_display").trigger("click");
- else
- {
- $( "#mp_word" ).empty();
-
- // create new set of letters
- var letters;
- letters = shuffle( createWordLetters( word ) );
-
- for( i in letters ){
- $("#mp_word").append( letters[i] );
- }
-
- // in sankore api there would be a function to check
- // the answer, so no update parameter would be needed
- if( !isSankore ){
- $( "#mp_word" ).sortable( {
- update: checkWord
- } );
- } else $( "#mp_word" ).sortable();
-
- // adjustWidth
- var totalLettersWidth = 0;
- for( i in letters ){
- var currentWidth = $( letters[i] ).outerWidth( true );
- totalLettersWidth += currentWidth;
- }
- totalLettersWidth += 1;
-
- var width = Math.max(
- totalLettersWidth,
- min_view_width
- );
-
- // shift the words to the right to center them
- if( width > totalLettersWidth ){
- $( "#mp_word" ).css( "margin-left", Math.round( (width - totalLettersWidth)/2 ) );
- }
- else{
- $( "#mp_word" ).css( "margin-left", 0 );
- }
- }
- });
-
-})
-
-/*
-=================
-createWordLetters
-=================
-returns array of dom elements
-*/
-function createWordLetters( word )
-{
- var ch, el;
- var letters = [];
-
- if( word.indexOf( '*' ) != -1 )
- {
- var tmp = word.split( '*' );
- for( i in tmp )
- {
- ch = tmp[i];
- el = document.createElement( "div" );
- $(el).addClass( "letter" ).text( ch );
- letters.push( el );
- }
- }
- else
- {
- for( var i = 0; i < word.length; i++ )
- {
- ch = word.charAt( i );
- el = document.createElement( "div" );
- $(el).addClass( "letter" ).text( ch );
- letters.push( el );
- }
- }
- return letters;
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select option:first").attr('selected',true);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select option:first").next().attr('selected',true);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select option:last").attr('selected',true);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
-
-/*
-=====================
-checkWord
-=====================
-scans the letters and checks
-if they are in the right order
-*/
-function checkWord()
-{
- var str = "";
- $( "#mp_word .letter" ).each( function(){
- str += $(this).text();
- });
- var w = word;
- while( w.indexOf( '*' ) != -1 )
- {
- w = w.replace( '*', '' );
- }
- //alert(str + " | " + w)
- if( str == w ){
- $( "#mp_word .letter" ).addClass( "right" );
- //message( "Right!" );
- } else {
- $( "#mp_word .letter" ).removeClass( "right" );
- }
-}
-
-/*
-==============
-shuffle
-==============
-shuffles an array
-*/
-function shuffle( arr )
-{
- var pos, tmp;
-
- for( var i = 0; i < arr.length; i++ )
- {
- pos = Math.round( Math.random() * ( arr.length - 1 ) );
- tmp = arr[pos];
- arr[pos] = arr[i];
- arr[i] = tmp;
- }
- return arr;
-}
-
-
-
-/*
-==================
-modeView()
-==================
-turns the widget into the view mode
-*/
-function modeView()
-{
- if( editMode ){
- word = $( "#mp_word .wgt_cont" ).val();
- }
-
- wgtState = false;
-
- // clean the previous word
- $( "#mp_word" ).empty();
-
- // create new set of letters
- var letters;
- if(window.sankore && curWord && !editMode)
- letters = createWordLetters( curWord );
- else
- letters = shuffle( createWordLetters( word ) );
-
- for( i in letters ){
- $("#mp_word").append( letters[i] );
- }
-
- // in sankore api there would be a function to check
- // the answer, so no update parameter would be needed
- if( !isSankore ){
- $( "#mp_word" ).sortable( {
- update: checkWord
- } );
- } else $( "#mp_word" ).sortable();
-
- // adjustWidth
- var totalLettersWidth = 0;
- for( i in letters ){
- var currentWidth = $( letters[i] ).outerWidth( true );
- totalLettersWidth += currentWidth;
- }
- totalLettersWidth += 1;
-
- var width = Math.max(
- totalLettersWidth,
- min_view_width
- );
-
- // shift the words to the right to center them
- if( width > totalLettersWidth ){
- $( "#mp_word" ).css( "margin-left", Math.round( (width - totalLettersWidth)/2 ) );
- }
- else{
- $( "#mp_word" ).css( "margin-left", 0 );
- }
-
- checkWord();
-}
-
-/*
-================
-modeEdit
-================
-*/
-function modeEdit()
-{
- editMode = true;
- wgtState = true;
- $( "#mp_word").sortable( "destroy" );
- $( "#mp_word").css( "margin-left", 0 ).empty().append('<textarea class="wgt_cont">'+word+'</textarea>');
-
-}
-
-if (window.widget) {
- window.widget.onleave = function(){
- sankore.setPreference("ord_words_style", $("#style_select").find("option:selected").val());
- if($( "#mp_word .wgt_cont" ).val())
- {
- modeView();
- var str = "";
- $( "#mp_word .letter" ).each( function(){
- str += $(this).text() + "*";
- });
- str = str.substr(0, str.length - 1);
- sankore.setPreference("currentOrdWords", str);
- modeEdit();
- }
- else{
- str = "";
- $( "#mp_word .letter" ).each( function(){
- str += $(this).text() + "*";
- });
- str = str.substr(0, str.length - 1);
- sankore.setPreference("currentOrdWords", str);
- }
- sankore.setPreference("rightOrdWords", word);
- }
-}
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/config.xml
index 356b87b..7a43e58 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/config.xml
@@ -5,8 +5,8 @@
id="http://www.example.net/widgets/helloworld"
version="1.0"
width="850"
- height="400"
- ub:resizable="true">
+ height="500"
+ ub:resizable="false">
<name>Phrases sortable</name>
<description>Sort the phrases to make the right sentence.</description>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/index.html
index b733713..a82a4bd 100644
--- a/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/index.html
@@ -3,92 +3,30 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Template</title>
-
- <!--Styles-->
- <link rel="stylesheet" type="text/css" href="styles/master.css">
- <link rel="stylesheet" type="text/css" href="styles/of_puppets.css">
<!--Scripts-->
<script type="text/javascript" src="scripts/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="scripts/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="scripts/template2.js"></script>
<script type="text/javascript">
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- $("#ub-widget").append('<div id="mp_setup"></div><div id="mp_word"></div>');
- modeView();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- modeView();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="ub-widget">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
-
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
+
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/locales/en/index.html
new file mode 100644
index 0000000..9253317
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/locales/en/index.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Template</title>
+ <!--Styles-->
+ <link rel="stylesheet" type="text/css" href="../../styles/master.css">
+ <link rel="stylesheet" type="text/css" href="../../styles/of_puppets.css">
+ <!--Scripts-->
+ <script type="text/javascript" src="../../scripts/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="../../scripts/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="script/template2.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ $("#ub-widget").append('<div id="mp_setup"></div><div id="mp_word"></div>');
+ modeView();
+ });
+ </script>
+ </head>
+
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="ub-widget">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/scripts/template2.js b/Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/locales/en/script/template2.js
similarity index 100%
rename from Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/scripts/template2.js
rename to Sankore-3.1/resources/library/interactivities/Ordre phrase.wgt/locales/en/script/template2.js
diff --git a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/config.xml
index a7ce92c..b90d53f 100644
--- a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/config.xml
@@ -4,8 +4,8 @@
id="http://uniboard.mnemis.com/widgets/notes"
version="1.2"
width="950"
- height="600"
- ub:resizable="true">
+ height="530"
+ ub:resizable="false">
<name>Notes</name>
<author href="http://www.getuniboard.com"
diff --git a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/index.html
index 6f206bb..75790f3 100644
--- a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/index.html
@@ -3,86 +3,30 @@
<head>
<title>D'n'd</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link rel="stylesheet" type="text/css" href="css/basic.css"/>
<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang == "en"){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- start();
- }
- else{
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- start();
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="data">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
-
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/js/script.js b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/js/script.js
deleted file mode 100644
index 369719d..0000000
--- a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/js/script.js
+++ /dev/null
@@ -1,563 +0,0 @@
-var sankoreLang = {
- display: "Display",
- edit: "Edit",
- short_desc: "Select animals from the following list:",
- add: "Add new block",
- enter: "Enter your instruction here ...",
- cat: "cat",
- ball: "ball",
- shovel: "shovel",
- dog: "dog",
- tree: "tree",
- wgt_name: "Select",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p> <h2>Select</h2> </p>" +
-"<p> <h3> Select the correct element in the list </h3> </p>" +
-"<p> Choose correct element(s). If the result is correct, the area turns in green.</p>" +
-"<p> âReload âbutton resets the exercises.</p>" +
-"<p> Enter the âEditâ mode to :</p>" +
-"<ul><li> choose the theme of the App : pad, slate, or none (by default : none),</li>" +
-"<li> modify an exercise or create new ones in the same activity.</li></ul>" +
-"<p>To create a new exercise :</p>" +
-"<ul> <li> click on âNew blockâ,</li>" +
-"<li> insert an instruction clicking on the text field âEnter your instruction here ... â,</li>" +
-"<li> add text fields with â+Tâ,</li>" +
-"<li> select the correct answer clicking in the box,</li>" +
-"<li> change the order of images by dragging them.</li> </ul>" +
-"<p> To delete a frame, click the cross (X).</p>" +
-"<p> To delete a whole exercise, click the cross to the left. </p>" +
-"<p> âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-//main function
-function start(){
-
- $("#wgt_display").text(sankoreLang.display);
- $("#wgt_edit").text(sankoreLang.edit);
- $("#wgt_name").text(sankoreLang.wgt_name);
- $("#wgt_reload").text(sankoreLang.reload);
- $("#wgt_help").text(sankoreLang.help);
- $("#help").html(sankoreLang.help_content);
- $("#style_select option[value='1']").text(sankoreLang.slate);
- $("#style_select option[value='2']").text(sankoreLang.pad);
- $("#style_select option[value='3']").text(sankoreLang.none);
- var tmpl = $("div.inline label").html();
- $("div.inline label").html(sankoreLang.theme + tmpl)
-
- if(window.sankore){
- if(sankore.preference("selectionner","")){
- var data = jQuery.parseJSON(sankore.preference("selectionner",""));
- importData(data);
- } else
- showExample();
- if(sankore.preference("sel_style","")){
- changeStyle(sankore.preference("sel_style",""));
- $("#style_select").val(sankore.preference("sel_style",""));
- } else
- changeStyle("3")
- }
- else
- showExample();
-
- //events
- if (window.widget) {
- window.widget.onleave = function(){
- exportData();
- sankore.setPreference("sel_style", $("#style_select").find("option:selected").val());
- }
- }
-
- $("#wgt_help").click(function(){
- var tmp = $(this);
- if($(this).hasClass("open")){
- $(this).removeClass("help_pad").removeClass("help_wood")
- $("#help").slideUp("100", function(){
- tmp.removeClass("open");
- $("#data").show();
- });
- } else {
- ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
- $("#data").hide();
- $("#help").slideDown("100", function(){
- tmp.addClass("open");
- });
- }
- });
-
- $("#wgt_reload").click(function(){
- if($("#wgt_display").hasClass("selected")){
- $(".cont").each(function(){
- var container = $(this);
- container.find(".img_block, .text_block").each(function(){
- $(this).find("input:checkbox").removeAttr("checked");
- $(this).find("input:checkbox").parent().parent().removeClass("right");
- });
- });
- }
- else
- $("#wgt_display").trigger("click");
- });
-
- $("#style_select").change(function (event){
- changeStyle($(this).find("option:selected").val());
- })
-
- $("#wgt_display, #wgt_edit").click(function(event){
- if(this.id == "wgt_display"){
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- $(this).addClass("selected");
- $("#wgt_edit").removeClass("selected");
- $("#parameters").css("display","none");
- $(".add_block").remove();
- $(".cont").each(function(){
- var container = $(this);
-
- container.find(".text_cont").removeAttr("contenteditable");
- container.find(".add_img").remove();
- container.find(".close_cont").remove();
- container.find(".imgs_cont").removeAttr("ondragenter")
- .removeAttr("ondragleave")
- .removeAttr("ondragover")
- .removeAttr("ondrop");
- container.find(".img_block, .text_block").each(function(){
- $(this).find(".close_img").remove();
- $(this).find(".text_subblock").removeAttr("contenteditable");
- $(this).find("input:checkbox").removeAttr("checked")
- });
-
- });
- $(this).css("display", "none");
- $("#wgt_edit").css("display", "block");
- }
- } else {
- if(!$(this).hasClass("selected")){
- if(window.sankore)
- sankore.enableDropOnWidget(true);
- $(this).addClass("selected");
- $("#wgt_display").removeClass("selected");
- $("#parameters").css("display","block");
-
- $(".cont").each(function(){
- var container = $(this);
-
- $("<div class='close_cont'>").appendTo(container);
- container.find(".text_cont").attr("contenteditable","true");
- container.find(".imgs_cont").removeClass("right")
- .attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('over'); return false;")
- .attr("ondragover", "$(this).addClass('over'); return false;")
- .attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
-
- var add_img = $("<div class='add_img'>");
- container.find(".img_block, .text_block").each(function(){
- $("<div class='close_img'>").appendTo($(this));
- if($(this).find("input:hidden").val() == 0)
- $(this).find("input:checkbox").attr('checked', false);
- else
- $(this).find("input:checkbox").attr('checked', true);
- $(this).find(".text_subblock").attr("contenteditable","true");
- });
- add_img.insertBefore(container.find(".clear"));
- });
-
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
- $(this).css("display", "none");
- $("#wgt_display").css("display", "block");
- }
- }
- });
-
- //add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
-
- //checkbox events
- $("input:checkbox").live("click", function(){
- if($("#wgt_display").hasClass("selected")){
- var flag = true;
- var block = $(this).parent().parent();
- block.find(".text_block, .img_block, .audio_block").each(function(){
- if($(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 0)
- flag = false;
- else if(!$(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 1)
- flag = false;
- });
- if(flag)
- block.addClass("right");
- else
- block.removeClass("right");
- } else {
- if($(this).is(":checked"))
- $(this).parent().find("input:hidden").val(1);
- else
- $(this).parent().find("input:hidden").val(0);
- }
- });
-
- //play/pause event
- $(".play, .stop").live("click", function(){
- var tmp_audio = $(this);
- var audio = tmp_audio.parent().find("audio").get(0);
- if($(this).hasClass("play")){
- if(tmp_audio.parent().find("source").attr("src")){
- tmp_audio.removeClass("play").addClass("stop");
- var id = setInterval(function(){
- if(audio.currentTime == audio.duration){
- clearInterval(id);
- tmp_audio.removeClass("stop").addClass("play");
- }
- }, 10);
- tmp_audio.parent().find("input").val(id);
- audio.play();
- }
- } else {
- $(this).removeClass("stop").addClass("play");
- clearInterval( tmp_audio.parent().find("input").val())
- audio.pause();
- }
- });
-
- $(".replay").live("click", function(){
- var tmp_audio = $(this).prev();
- var audio = $(this).parent().find("audio").get(0);
- if(tmp_audio.parent().find("source").attr("src")){
- $(this).prev().removeClass("play").addClass("stop");
- clearInterval($(this).parent().find("input").val());
- var id = setInterval(function(){
- if(audio.currentTime == audio.duration){
- clearInterval(id);
- tmp_audio.removeClass("stop").addClass("play");
- }
- }, 10);
- tmp_audio.parent().find("input").val(id);
- audio.currentTime = 0;
- audio.play();
- }
- });
-
- //adding new img
- $(".add_img").live("click", function(){
- addTextBlock($(this));
- });
-
- //deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
-
- //deleting the img block
- $(".close_img").live("click", function(){
- $(this).parent().remove();
- });
-
- $("#wgt_reload, #wgt_display, #wgt_edit").live("mouseover",function(){
- exportData();
- })
-}
-
-//export
-function exportData(){
- var array_to_export = [];
- $(".cont").each(function(){
- var cont_obj = new Object();
- cont_obj.text = $(this).find(".text_cont").text();
- cont_obj.blocks = [];
- $(this).find(".img_block, .audio_block, .text_block").each(function(){
- var tmp_block = new Object();
- if($("#wgt_display").hasClass("selected"))
- tmp_block.state = "display";
- else
- tmp_block.state = "edit";
- if($(this).hasClass("img_block")){
- if($(this).find(".audio_block").size() == 0){
- tmp_block.src = $(this).find("img").attr("src");
- tmp_block.hidden = $(this).find("input:hidden").val();
- tmp_block.h = $(this).find("img").height();
- tmp_block.w = $(this).find("img").width();
- tmp_block.type = "img";
- tmp_block.checked = $(this).find("input:checkbox").attr("checked");
- }
- }
- if($(this).hasClass("audio_block")){
- tmp_block.src = $(this).find("source").attr("src");
- tmp_block.hidden = $(this).parent().find("input:hidden").val();
- tmp_block.type = "audio";
- tmp_block.checked = $(this).parent().find("input:checkbox").attr("checked");
- }
- if($(this).hasClass("text_block")){
- tmp_block.text = $(this).find(".text_subblock").text();
- tmp_block.hidden = $(this).find("input:hidden").val();
- tmp_block.type = "text";
- tmp_block.checked = $(this).find("input:checkbox").attr("checked");
- }
- cont_obj.blocks.push(tmp_block);
- });
- array_to_export.push(cont_obj);
- });
- if(window.sankore)
- sankore.setPreference("selectionner", JSON.stringify(array_to_export));
-}
-
-//import
-function importData(data){
-
- var tmp = 0;
- for(var i in data){
-
- var container = $("<div class='cont'>").appendTo("#data");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- $("<div class='clear'>").appendTo(imgs_container);
-
- $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
- $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
-
- for(var j in data[i].blocks){
- switch(data[i].blocks[j].type){
- case "text":
- var text_block = $("<div class='text_block'>").insertBefore(imgs_container.find(".clear"));
- $("<div class='text_subblock'>" + data[i].blocks[j].text + "</div>").appendTo(text_block);
- $("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(text_block);
- $("<input type='checkbox' class='ch_box'/>").attr("checked",(data[i].blocks[j].state == "display")?((data[i].blocks[j].checked == "checked")?true:false):false).appendTo(text_block);
- break;
- case "img":
- var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore(imgs_container.find(".clear"));
- $("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_block);
- $("<input type='checkbox' class='ch_box'/>").attr("checked",(data[i].blocks[j].state == "display")?((data[i].blocks[j].checked == "checked")?true:false):false).appendTo(img_block)
- var img = $("<img src=\"" + data[i].blocks[j].src + "\" style=\"display: inline;\"/>").appendTo(img_block);
- img.height(data[i].blocks[j].h);
- if((120 - data[i].blocks[j].h) > 0)
- img.css("margin",(120 - data[i].blocks[j].h)/2 + "px 0");
- break;
- case "audio":
- var img_tmp = $("<div class='img_block'>").insertBefore(imgs_container.find(".clear"));
- var audio_block = $("<div class='audio_block'>").appendTo(img_tmp);
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", data[i].blocks[j].src);
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_tmp);
- $("<input type='checkbox' class='ch_box'/>").attr("checked",(data[i].blocks[j].state == "display")?((data[i].blocks[j].checked == "checked")?true:false):false).appendTo(img_tmp)
- break;
- }
- }
- }
-
- var block = $("input:checkbox").parent().parent();
- block.each(function(){
- var flag = true;
- $(this).find(".text_block, .img_block, .audio_block").each(function(){
- if($(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 0)
- flag = false;
- else if(!$(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 1)
- flag = false;
- });
- if(flag)
- $(this).addClass("right");
- else
- $(this).removeClass("right");
- })
-}
-
-//example
-function showExample(){
-
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
-
- $("<div class='number_cont'>1</div>").appendTo(sub_container);
- $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
-
- var tmp1 = $("<div class='text_block'>").appendTo(imgs_container);
- $("<div class='text_subblock'>" + sankoreLang.cat + "</div>").appendTo(tmp1);
- $("<input type='hidden' value='1'/>").appendTo(tmp1);
- $("<input type='checkbox' class='ch_box'/>").appendTo(tmp1)
- var tmp2 = $("<div class='text_block'>").appendTo(imgs_container);
- $("<div class='text_subblock'>" + sankoreLang.ball + "</div>").appendTo(tmp2);
- $("<input type='hidden' value='0'/>").appendTo(tmp2);
- $("<input type='checkbox' class='ch_box'/>").appendTo(tmp2)
- var tmp3 = $("<div class='text_block'>").appendTo(imgs_container);
- $("<div class='text_subblock'>" + sankoreLang.shovel + "</div>").appendTo(tmp3);
- $("<input type='hidden' value='0'/>").appendTo(tmp3);
- $("<input type='checkbox' class='ch_box'/>").appendTo(tmp3)
- var tmp4 = $("<div class='text_block'>").appendTo(imgs_container);
- $("<div class='text_subblock'>" + sankoreLang.dog + "</div>").appendTo(tmp4);
- $("<input type='hidden' value='1'/>").appendTo(tmp4);
- $("<input type='checkbox' class='ch_box'/>").appendTo(tmp4)
- var tmp5 = $("<div class='text_block'>").appendTo(imgs_container);
- $("<div class='text_subblock'>" + sankoreLang.tree + "</div>").appendTo(tmp5);
- $("<input type='hidden' value='0'/>").appendTo(tmp5);
- $("<input type='checkbox' class='ch_box'/>").appendTo(tmp5)
- $("<div class='clear'>").appendTo(imgs_container);
-
- container.appendTo("#data")
-}
-
-//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- imgs_container.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('over'); return false;")
- .attr("ondragover", "$(this).addClass('over'); return false;")
- .attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
-
- $("<div class='close_cont'>").appendTo(container);
- $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
-
- $("<div class='add_img'>").appendTo(imgs_container);
- $("<div class='clear'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
-
-//add new img block
-function addTextBlock(dest){
- var tmp = $("<div class='text_block'>").insertBefore(dest)
- $("<div class='text_subblock' contenteditable='true'>" + sankoreLang.enter + "</div>").appendTo(tmp);
- $("<input type='hidden' value='0'/>").appendTo(tmp);
- $("<input type='checkbox' class='ch_box'/>").appendTo(tmp);
- $("<div class='close_img'>").appendTo(tmp);
-}
-
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
-
-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;
-}
-
-//changing the style
-function changeStyle(val){
- switch(val){
- case "1":
- $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
- $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
- $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
- $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
- $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
- $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
- $("#wgt_name").removeClass("pad_color");
- $("#wgt_display").addClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").addClass("radius_ft");
- break;
- case "2":
- $(".b_top_left").addClass("btl_pad").removeClass("without_back");
- $(".b_top_center").addClass("btc_pad").removeClass("without_back");
- $(".b_top_right").addClass("btr_pad").removeClass("without_back");
- $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
- $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
- $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
- $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
- $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").removeClass("without_radius").removeClass("radius_ft");
- break;
- case "3":
- $(".b_top_left").addClass("without_back").removeClass("btl_pad");
- $(".b_top_center").addClass("without_back").removeClass("btc_pad");
- $(".b_top_right").addClass("without_back").removeClass("btr_pad");
- $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
- $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
- $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
- $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
- $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
- $("#wgt_help").addClass("pad_color").addClass("pad_help");
- $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
- $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
- $("#wgt_name").addClass("pad_color");
- $("#wgt_display").removeClass("display_wood");
- $("#style_select").val(val);
- $("body, html").addClass("without_radius").removeClass("radius_ft");
- break;
- }
-}
-
-function onDropTarget(obj, event) {
- if (event.dataTransfer) {
- var format = "text/plain";
- var textData = event.dataTransfer.getData(format);
- if (!textData) {
- alert(":(");
- }
- textData = stringToXML(textData);
- var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
- var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
- if(tmp_type.substr(0, 5) == "audio"){
- var img_tmp = $("<div class='img_block'>").insertBefore($(obj).find(".add_img"));
- var audio_block = $("<div class='audio_block'>").appendTo(img_tmp)
- $("<div class='close_img'>").appendTo(img_tmp);
- $("<div class='play'>").appendTo(audio_block);
- $("<div class='replay'>").appendTo(audio_block);
- var source = $("<source/>").attr("src", tmp);
- var audio = $("<audio>").appendTo(audio_block);
- audio.append(source);
- $("<input type='hidden' value='0'/>").appendTo(img_tmp);
- $("<input type='checkbox' class='ch_box'/>").appendTo(img_tmp)
- } else {
- var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore($(obj).find(".add_img"));
- $("<div class='close_img'>").appendTo(img_block);
- $("<input type='hidden' value='0'/>").appendTo(img_block);
- $("<input type='checkbox' class='ch_box'/>").appendTo(img_block)
- var tmp_img = $("<img src=\"" + tmp + "\" style=\"display: inline;\"/>").appendTo(img_block);
- setTimeout(function(){
- if(tmp_img.height() >= tmp_img.width())
- tmp_img.attr("height", "120");
- else{
- tmp_img.attr("width","120");
- var h = tmp_img.height();
- tmp_img.attr("height",h);
- tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
- }
- }, 6);
- }
- }
- else {
- alert ("Your browser does not support the dataTransfer object.");
- }
-
- if (event.stopPropagation) {
- event.stopPropagation ();
- }
- else {
- event.cancelBubble = true;
- }
- return false;
-}
-
diff --git a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/en/index.html
new file mode 100644
index 0000000..81735dc
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/en/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>D'n'd</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="../../css/basic.css"/>
+ <script type="text/javascript" src="../../js/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="../../js/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="js/script.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ start();
+ });
+ </script>
+ </head>
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="data">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/en/js/script.js b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/en/js/script.js
new file mode 100644
index 0000000..711e7ff
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/en/js/script.js
@@ -0,0 +1,559 @@
+var sankoreLang = {
+ display: "Display",
+ edit: "Edit",
+ short_desc: "Select animals from the following list:",
+ add: "Add new block",
+ enter: "Enter your instruction here ...",
+ cat: "cat",
+ ball: "ball",
+ shovel: "shovel",
+ dog: "dog",
+ tree: "tree",
+ wgt_name: "Select",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p> <h2>Select</h2> </p>" +
+"<p> <h3> Select the correct element in the list </h3> </p>" +
+"<p> Choose correct element(s). If the result is correct, the area turns in green.</p>" +
+"<p> âReload âbutton resets the exercises.</p>" +
+"<p> Enter the âEditâ mode to :</p>" +
+"<ul><li> choose the theme of the App : pad, slate, or none (by default : none),</li>" +
+"<li> modify the exercise.</li></ul>" +
+"<p>In edition mode :</p>" +
+"<ul><li> edit the instruction clicking on the text field,</li>" +
+"<li> add text fields with â+Tâ,</li>" +
+"<li> select the correct answer clicking in the box,</li>" +
+"<li> change the order of images by dragging them,</li>" +
+"<li> delete a frame clicking the cross (X),</li>" +
+"<li> âDisplayâ button comes back to the activity.</li></ul>",
+ theme: "Theme"
+};
+
+//main function
+function start(){
+
+ $("#wgt_display").text(sankoreLang.display);
+ $("#wgt_edit").text(sankoreLang.edit);
+ $("#wgt_name").text(sankoreLang.wgt_name);
+ $("#wgt_reload").text(sankoreLang.reload);
+ $("#wgt_help").text(sankoreLang.help);
+ $("#help").html(sankoreLang.help_content);
+ $("#style_select option[value='1']").text(sankoreLang.slate);
+ $("#style_select option[value='2']").text(sankoreLang.pad);
+ $("#style_select option[value='3']").text(sankoreLang.none);
+ var tmpl = $("div.inline label").html();
+ $("div.inline label").html(sankoreLang.theme + tmpl)
+
+ if(window.sankore){
+ if(sankore.preference("selectionner","")){
+ var data = jQuery.parseJSON(sankore.preference("selectionner",""));
+ importData(data);
+ } else
+ showExample();
+ if(sankore.preference("sel_style","")){
+ changeStyle(sankore.preference("sel_style",""));
+ $("#style_select").val(sankore.preference("sel_style",""));
+ } else
+ changeStyle("3")
+ }
+ else
+ showExample();
+
+ //events
+ if (window.widget) {
+ window.widget.onleave = function(){
+ exportData();
+ sankore.setPreference("sel_style", $("#style_select").find("option:selected").val());
+ }
+ }
+
+ $("#wgt_help").click(function(){
+ var tmp = $(this);
+ if($(this).hasClass("open")){
+ $(this).removeClass("help_pad").removeClass("help_wood")
+ $("#help").slideUp("100", function(){
+ tmp.removeClass("open");
+ $("#data").show();
+ });
+ } else {
+ ($("#style_select").val() == 1)?$(this).removeClass("help_pad").addClass("help_wood"):$(this).removeClass("help_wood").addClass("help_pad");
+ $("#data").hide();
+ $("#help").slideDown("100", function(){
+ tmp.addClass("open");
+ });
+ }
+ });
+
+ $("#wgt_reload").click(function(){
+ if($("#wgt_display").hasClass("selected")){
+ $(".cont").each(function(){
+ var container = $(this);
+ container.find(".img_block, .text_block").each(function(){
+ $(this).find("input:checkbox").removeAttr("checked");
+ $(this).find("input:checkbox").parent().parent().removeClass("right");
+ });
+ });
+ }
+ else
+ $("#wgt_display").trigger("click");
+ });
+
+ $("#style_select").change(function (event){
+ changeStyle($(this).find("option:selected").val());
+ })
+
+ $("#wgt_display, #wgt_edit").click(function(event){
+ if(this.id == "wgt_display"){
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ $(this).addClass("selected");
+ $("#wgt_edit").removeClass("selected");
+ $("#parameters").css("display","none");
+// $(".add_block").remove();
+ $(".cont").each(function(){
+ var container = $(this);
+
+ container.find(".text_cont").removeAttr("contenteditable");
+ container.find(".add_img").remove();
+// container.find(".close_cont").remove();
+ container.find(".imgs_cont").removeAttr("ondragenter")
+ .removeAttr("ondragleave")
+ .removeAttr("ondragover")
+ .removeAttr("ondrop");
+ container.find(".img_block, .text_block").each(function(){
+ $(this).find(".close_img").remove();
+ $(this).find(".text_subblock").removeAttr("contenteditable");
+ $(this).find("input:checkbox").removeAttr("checked")
+ });
+
+ });
+ $(this).css("display", "none");
+ $("#wgt_edit").css("display", "block");
+ }
+ } else {
+ if(!$(this).hasClass("selected")){
+ if(window.sankore)
+ sankore.enableDropOnWidget(true);
+ $(this).addClass("selected");
+ $("#wgt_display").removeClass("selected");
+ $("#parameters").css("display","block");
+
+ $(".cont").each(function(){
+ var container = $(this);
+
+// $("<div class='close_cont'>").appendTo(container);
+ container.find(".text_cont").attr("contenteditable","true");
+ container.find(".imgs_cont").removeClass("right")
+ .attr("ondragenter", "return false;")
+ .attr("ondragleave", "$(this).removeClass('over'); return false;")
+ .attr("ondragover", "$(this).addClass('over'); return false;")
+ .attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
+
+ var add_img = $("<div class='add_img'>");
+ container.find(".img_block, .text_block").each(function(){
+ $("<div class='close_img'>").appendTo($(this));
+ if($(this).find("input:hidden").val() == 0)
+ $(this).find("input:checkbox").attr('checked', false);
+ else
+ $(this).find("input:checkbox").attr('checked', true);
+ $(this).find(".text_subblock").attr("contenteditable","true");
+ });
+ add_img.insertBefore(container.find(".clear"));
+ });
+
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+ $(this).css("display", "none");
+ $("#wgt_display").css("display", "block");
+ }
+ }
+ });
+
+ //add new block
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
+
+ //checkbox events
+ $("input:checkbox").live("click", function(){
+ if($("#wgt_display").hasClass("selected")){
+ var flag = true;
+ var block = $(this).parent().parent();
+ block.find(".text_block, .img_block, .audio_block").each(function(){
+ if($(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 0)
+ flag = false;
+ else if(!$(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 1)
+ flag = false;
+ });
+ if(flag)
+ block.addClass("right");
+ else
+ block.removeClass("right");
+ } else {
+ if($(this).is(":checked"))
+ $(this).parent().find("input:hidden").val(1);
+ else
+ $(this).parent().find("input:hidden").val(0);
+ }
+ });
+
+ //play/pause event
+ $(".play, .stop").live("click", function(){
+ var tmp_audio = $(this);
+ var audio = tmp_audio.parent().find("audio").get(0);
+ if($(this).hasClass("play")){
+ if(tmp_audio.parent().find("source").attr("src")){
+ tmp_audio.removeClass("play").addClass("stop");
+ var id = setInterval(function(){
+ if(audio.currentTime == audio.duration){
+ clearInterval(id);
+ tmp_audio.removeClass("stop").addClass("play");
+ }
+ }, 10);
+ tmp_audio.parent().find("input").val(id);
+ audio.play();
+ }
+ } else {
+ $(this).removeClass("stop").addClass("play");
+ clearInterval( tmp_audio.parent().find("input").val())
+ audio.pause();
+ }
+ });
+
+ $(".replay").live("click", function(){
+ var tmp_audio = $(this).prev();
+ var audio = $(this).parent().find("audio").get(0);
+ if(tmp_audio.parent().find("source").attr("src")){
+ $(this).prev().removeClass("play").addClass("stop");
+ clearInterval($(this).parent().find("input").val());
+ var id = setInterval(function(){
+ if(audio.currentTime == audio.duration){
+ clearInterval(id);
+ tmp_audio.removeClass("stop").addClass("play");
+ }
+ }, 10);
+ tmp_audio.parent().find("input").val(id);
+ audio.currentTime = 0;
+ audio.play();
+ }
+ });
+
+ //adding new img
+ $(".add_img").live("click", function(){
+ addTextBlock($(this));
+ });
+
+ //deleting a block
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
+
+ //deleting the img block
+ $(".close_img").live("click", function(){
+ $(this).parent().remove();
+ });
+
+ $("#wgt_reload, #wgt_display, #wgt_edit").live("mouseover",function(){
+ exportData();
+ })
+}
+
+//export
+function exportData(){
+ var array_to_export = [];
+ $(".cont").each(function(){
+ var cont_obj = new Object();
+ cont_obj.text = $(this).find(".text_cont").text();
+ cont_obj.blocks = [];
+ $(this).find(".img_block, .audio_block, .text_block").each(function(){
+ var tmp_block = new Object();
+ if($("#wgt_display").hasClass("selected"))
+ tmp_block.state = "display";
+ else
+ tmp_block.state = "edit";
+ if($(this).hasClass("img_block")){
+ if($(this).find(".audio_block").size() == 0){
+ tmp_block.src = $(this).find("img").attr("src").replace("../../","");
+ tmp_block.hidden = $(this).find("input:hidden").val();
+ tmp_block.h = $(this).find("img").height();
+ tmp_block.w = $(this).find("img").width();
+ tmp_block.type = "img";
+ tmp_block.checked = $(this).find("input:checkbox").attr("checked");
+ }
+ }
+ if($(this).hasClass("audio_block")){
+ tmp_block.src = $(this).find("source").attr("src").replace("../../","");
+ tmp_block.hidden = $(this).parent().find("input:hidden").val();
+ tmp_block.type = "audio";
+ tmp_block.checked = $(this).parent().find("input:checkbox").attr("checked");
+ }
+ if($(this).hasClass("text_block")){
+ tmp_block.text = $(this).find(".text_subblock").text();
+ tmp_block.hidden = $(this).find("input:hidden").val();
+ tmp_block.type = "text";
+ tmp_block.checked = $(this).find("input:checkbox").attr("checked");
+ }
+ cont_obj.blocks.push(tmp_block);
+ });
+ array_to_export.push(cont_obj);
+ });
+ if(window.sankore)
+ sankore.setPreference("selectionner", JSON.stringify(array_to_export));
+}
+
+//import
+function importData(data){
+
+ for(var i in data){
+
+ var container = $("<div class='cont'>").appendTo("#data");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+ $("<div class='clear'>").appendTo(imgs_container);
+
+// $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
+ $("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
+
+ for(var j in data[i].blocks){
+ switch(data[i].blocks[j].type){
+ case "text":
+ var text_block = $("<div class='text_block'>").insertBefore(imgs_container.find(".clear"));
+ $("<div class='text_subblock'>" + data[i].blocks[j].text + "</div>").appendTo(text_block);
+ $("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(text_block);
+ $("<input type='checkbox' class='ch_box'/>").attr("checked",(data[i].blocks[j].state == "display")?((data[i].blocks[j].checked == "checked")?true:false):false).appendTo(text_block);
+ break;
+ case "img":
+ var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore(imgs_container.find(".clear"));
+ $("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_block);
+ $("<input type='checkbox' class='ch_box'/>").attr("checked",(data[i].blocks[j].state == "display")?((data[i].blocks[j].checked == "checked")?true:false):false).appendTo(img_block)
+ var img = $("<img src=\"../../" + data[i].blocks[j].src + "\" style=\"display: inline;\"/>").appendTo(img_block);
+ img.height(data[i].blocks[j].h);
+ if((120 - data[i].blocks[j].h) > 0)
+ img.css("margin",(120 - data[i].blocks[j].h)/2 + "px 0");
+ break;
+ case "audio":
+ var img_tmp = $("<div class='img_block'>").insertBefore(imgs_container.find(".clear"));
+ var audio_block = $("<div class='audio_block'>").appendTo(img_tmp);
+ $("<div class='play'>").appendTo(audio_block);
+ $("<div class='replay'>").appendTo(audio_block);
+ var source = $("<source/>").attr("src", "../../" + data[i].blocks[j].src);
+ var audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ $("<input type='hidden' value='" + data[i].blocks[j].hidden + "'/>").appendTo(img_tmp);
+ $("<input type='checkbox' class='ch_box'/>").attr("checked",(data[i].blocks[j].state == "display")?((data[i].blocks[j].checked == "checked")?true:false):false).appendTo(img_tmp)
+ break;
+ }
+ }
+ }
+
+ var block = $("input:checkbox").parent().parent();
+ block.each(function(){
+ var flag = true;
+ $(this).find(".text_block, .img_block, .audio_block").each(function(){
+ if($(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 0)
+ flag = false;
+ else if(!$(this).find("input:checkbox").is(':checked') && $(this).find("input:hidden").val() == 1)
+ flag = false;
+ });
+ if(flag)
+ $(this).addClass("right");
+ else
+ $(this).removeClass("right");
+ })
+}
+
+//example
+function showExample(){
+
+ var container = $("<div class='cont'>");
+ var sub_container = $("<div class='sub_cont'>").appendTo(container);
+ var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+
+// $("<div class='number_cont'>1</div>").appendTo(sub_container);
+ $("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
+
+ var tmp1 = $("<div class='text_block'>").appendTo(imgs_container);
+ $("<div class='text_subblock'>" + sankoreLang.cat + "</div>").appendTo(tmp1);
+ $("<input type='hidden' value='1'/>").appendTo(tmp1);
+ $("<input type='checkbox' class='ch_box'/>").appendTo(tmp1)
+ var tmp2 = $("<div class='text_block'>").appendTo(imgs_container);
+ $("<div class='text_subblock'>" + sankoreLang.ball + "</div>").appendTo(tmp2);
+ $("<input type='hidden' value='0'/>").appendTo(tmp2);
+ $("<input type='checkbox' class='ch_box'/>").appendTo(tmp2)
+ var tmp3 = $("<div class='text_block'>").appendTo(imgs_container);
+ $("<div class='text_subblock'>" + sankoreLang.shovel + "</div>").appendTo(tmp3);
+ $("<input type='hidden' value='0'/>").appendTo(tmp3);
+ $("<input type='checkbox' class='ch_box'/>").appendTo(tmp3)
+ var tmp4 = $("<div class='text_block'>").appendTo(imgs_container);
+ $("<div class='text_subblock'>" + sankoreLang.dog + "</div>").appendTo(tmp4);
+ $("<input type='hidden' value='1'/>").appendTo(tmp4);
+ $("<input type='checkbox' class='ch_box'/>").appendTo(tmp4)
+ var tmp5 = $("<div class='text_block'>").appendTo(imgs_container);
+ $("<div class='text_subblock'>" + sankoreLang.tree + "</div>").appendTo(tmp5);
+ $("<input type='hidden' value='0'/>").appendTo(tmp5);
+ $("<input type='checkbox' class='ch_box'/>").appendTo(tmp5)
+ $("<div class='clear'>").appendTo(imgs_container);
+
+ container.appendTo("#data")
+}
+
+//add new container
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+// imgs_container.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).removeClass('over'); return false;")
+// .attr("ondragover", "$(this).addClass('over'); return false;")
+// .attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
+//
+// $("<div class='close_cont'>").appendTo(container);
+// $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
+//
+// $("<div class='add_img'>").appendTo(imgs_container);
+// $("<div class='clear'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
+
+//add new img block
+function addTextBlock(dest){
+ var tmp = $("<div class='text_block'>").insertBefore(dest)
+ $("<div class='text_subblock' contenteditable='true'>" + sankoreLang.enter + "</div>").appendTo(tmp);
+ $("<input type='hidden' value='0'/>").appendTo(tmp);
+ $("<input type='checkbox' class='ch_box'/>").appendTo(tmp);
+ $("<div class='close_img'>").appendTo(tmp);
+}
+
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
+
+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;
+}
+
+//changing the style
+function changeStyle(val){
+ switch(val){
+ case "1":
+ $(".b_top_left").removeClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").removeClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").removeClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").removeClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").removeClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").removeClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").removeClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").removeClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").removeClass("pad_color").removeClass("pad_reload");
+ $("#wgt_help").removeClass("pad_color").removeClass("pad_help");
+ $("#wgt_edit").removeClass("pad_color").removeClass("pad_edit");
+ $("#wgt_name").removeClass("pad_color");
+ $("#wgt_display").addClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").addClass("radius_ft");
+ break;
+ case "2":
+ $(".b_top_left").addClass("btl_pad").removeClass("without_back");
+ $(".b_top_center").addClass("btc_pad").removeClass("without_back");
+ $(".b_top_right").addClass("btr_pad").removeClass("without_back");
+ $(".b_center_left").addClass("bcl_pad").removeClass("without_back");
+ $(".b_center_right").addClass("bcr_pad").removeClass("without_back");
+ $(".b_bottom_right").addClass("bbr_pad").removeClass("without_back");
+ $(".b_bottom_left").addClass("bbl_pad").removeClass("without_back");
+ $(".b_bottom_center").addClass("bbc_pad").removeClass("without_back");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").removeClass("without_radius").removeClass("radius_ft");
+ break;
+ case "3":
+ $(".b_top_left").addClass("without_back").removeClass("btl_pad");
+ $(".b_top_center").addClass("without_back").removeClass("btc_pad");
+ $(".b_top_right").addClass("without_back").removeClass("btr_pad");
+ $(".b_center_left").addClass("without_back").removeClass("bcl_pad");
+ $(".b_center_right").addClass("without_back").removeClass("bcr_pad");
+ $(".b_bottom_right").addClass("without_back").removeClass("bbr_pad");
+ $(".b_bottom_left").addClass("without_back").removeClass("bbl_pad");
+ $(".b_bottom_center").addClass("without_back").removeClass("bbc_pad");
+ $("#wgt_help").addClass("pad_color").addClass("pad_help");
+ $("#wgt_reload").addClass("pad_color").addClass("pad_reload");
+ $("#wgt_edit").addClass("pad_color").addClass("pad_edit");
+ $("#wgt_name").addClass("pad_color");
+ $("#wgt_display").removeClass("display_wood");
+ $("#style_select").val(val);
+ $("body, html").addClass("without_radius").removeClass("radius_ft");
+ break;
+ }
+}
+
+function onDropTarget(obj, event) {
+ if (event.dataTransfer) {
+ var format = "text/plain";
+ var textData = event.dataTransfer.getData(format);
+ if (!textData) {
+ alert(":(");
+ }
+ textData = stringToXML(textData);
+ var tmp = textData.getElementsByTagName("path")[0].firstChild.textContent;
+ var tmp_type = textData.getElementsByTagName("type")[0].firstChild.textContent;
+ if(tmp_type.substr(0, 5) == "audio"){
+ var img_tmp = $("<div class='img_block'>").insertBefore($(obj).find(".add_img"));
+ var audio_block = $("<div class='audio_block'>").appendTo(img_tmp)
+ $("<div class='close_img'>").appendTo(img_tmp);
+ $("<div class='play'>").appendTo(audio_block);
+ $("<div class='replay'>").appendTo(audio_block);
+ var source = $("<source/>").attr("src", "../../" + tmp);
+ var audio = $("<audio>").appendTo(audio_block);
+ audio.append(source);
+ $("<input type='hidden' value='0'/>").appendTo(img_tmp);
+ $("<input type='checkbox' class='ch_box'/>").appendTo(img_tmp)
+ } else {
+ var img_block = $("<div class='img_block' style='text-align: center;'></div>").insertBefore($(obj).find(".add_img"));
+ $("<div class='close_img'>").appendTo(img_block);
+ $("<input type='hidden' value='0'/>").appendTo(img_block);
+ $("<input type='checkbox' class='ch_box'/>").appendTo(img_block)
+ var tmp_img = $("<img src=\"../../" + tmp + "\" style=\"display: inline;\"/>").appendTo(img_block);
+ setTimeout(function(){
+ if(tmp_img.height() >= tmp_img.width())
+ tmp_img.attr("height", "120");
+ else{
+ tmp_img.attr("width","120");
+ var h = tmp_img.height();
+ tmp_img.attr("height",h);
+ tmp_img.css("margin",(120 - tmp_img.height())/2 + "px 0");
+ }
+ }, 6);
+ }
+ }
+ else {
+ alert ("Your browser does not support the dataTransfer object.");
+ }
+
+ if (event.stopPropagation) {
+ event.stopPropagation ();
+ }
+ else {
+ event.cancelBubble = true;
+ }
+ return false;
+}
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/fr/js/script.js b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/fr/js/script.js
index 8788b5c..e873123 100644
--- a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/fr/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/fr/js/script.js
@@ -24,16 +24,13 @@ var sankoreLang = {
"<p>Le bouton âModifierâ vous permet :</p>"+
"<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun),</li>"+
- "<li>de modifier un exercice ou dâen créer de nouveaux dans la même activité. </li></ul>"+
+ "<li>de modifier l'exercice.</li></ul>"+
- "<p>En mode édition, pour créer un nouvel exercice, cliquez sur âNouveau blocâ en bas, puis</p>"+
- "<ul><li>insérez une consigne en cliquant sur le champ de texte âSaisir votre consigne ici ...â, </li>"+
- "<li>ajoutez des zones de texte en cliquant sur le gros â+Tâ vert en dessous puis entrez le texte voulu.</li></ul>"+
- "<p>Pour supprimer une zone de texte, cliquez sur la croix située dans le coin supérieur de celle-ci.</p>"+
-
- "<p>Pour supprimer un exercice, cliquez sur la croix à gauche du numéro de lâexercice.</p>"+
-
- "<p>Le bouton âAfficherâ vous permet dâutiliser lâactivité.</p>",
+ "<p>En mode édition :</p>"+
+ "<ul><li>modifiez la consigne en cliquant sur le champ de texte, </li>"+
+ "<li>ajoutez des zones de texte en cliquant sur le gros â+Tâ vert en dessous puis entrez le texte voulu,</li>"+
+ "<li>supprimez une zone de texte, cliquez sur la croix située dans le coin supérieur de celle-ci,</li>"+
+ "<li>le bouton âAfficherâ vous permet dâutiliser lâactivité.</li></ul>",
theme:"Thème"
};
@@ -118,13 +115,13 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
container.find(".text_cont").removeAttr("contenteditable");
container.find(".add_img").remove();
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".imgs_cont").removeAttr("ondragenter")
.removeAttr("ondragleave")
.removeAttr("ondragover")
@@ -150,7 +147,7 @@ function start(){
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".text_cont").attr("contenteditable","true");
container.find(".imgs_cont").removeClass("right")
.attr("ondragenter", "return false;")
@@ -170,7 +167,7 @@ function start(){
add_img.insertBefore(container.find(".clear"));
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -178,9 +175,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//checkbox events
$("input:checkbox").live("click", function(){
@@ -252,17 +249,19 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
$(this).parent().remove();
});
-
+ $("#wgt_reload, #wgt_display, #wgt_edit").live("mouseover",function(){
+ exportData();
+ })
}
//export
@@ -304,14 +303,13 @@ function exportData(){
});
array_to_export.push(cont_obj);
});
-
- sankore.setPreference("selectionner", JSON.stringify(array_to_export));
+ if(window.sankore)
+ sankore.setPreference("selectionner", JSON.stringify(array_to_export));
}
//import
function importData(data){
- var tmp = 0;
for(var i in data){
var container = $("<div class='cont'>").appendTo("#data");
@@ -319,7 +317,7 @@ function importData(data){
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
$("<div class='clear'>").appendTo(imgs_container);
- $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
+// $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
$("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
for(var j in data[i].blocks){
@@ -377,7 +375,7 @@ function showExample(){
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// $("<div class='number_cont'>1</div>").appendTo(sub_container);
$("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
var tmp1 = $("<div class='text_block'>").appendTo(imgs_container);
@@ -406,23 +404,23 @@ function showExample(){
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- imgs_container.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('over'); return false;")
- .attr("ondragover", "$(this).addClass('over'); return false;")
- .attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
-
- $("<div class='close_cont'>").appendTo(container);
- $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
-
- $("<div class='add_img'>").appendTo(imgs_container);
- $("<div class='clear'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+// imgs_container.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).removeClass('over'); return false;")
+// .attr("ondragover", "$(this).addClass('over'); return false;")
+// .attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
+//
+// $("<div class='close_cont'>").appendTo(container);
+// $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
+//
+// $("<div class='add_img'>").appendTo(imgs_container);
+// $("<div class='clear'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
//add new img block
function addTextBlock(dest){
@@ -433,12 +431,12 @@ function addTextBlock(dest){
$("<div class='close_img'>").appendTo(tmp);
}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
function stringToXML(text){
if (window.ActiveXObject){
@@ -452,7 +450,6 @@ function stringToXML(text){
return doc;
}
-
//changing the style
function changeStyle(val){
switch(val){
@@ -560,4 +557,4 @@ function onDropTarget(obj, event) {
event.cancelBubble = true;
}
return false;
-}
+}
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/ru/js/script.js b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/ru/js/script.js
index 8f4f358..d9a6069 100644
--- a/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/ru/js/script.js
+++ b/Sankore-3.1/resources/library/interactivities/Selectionner.wgt/locales/ru/js/script.js
@@ -100,13 +100,13 @@ function start(){
$(this).addClass("selected");
$("#wgt_edit").removeClass("selected");
$("#parameters").css("display","none");
- $(".add_block").remove();
+// $(".add_block").remove();
$(".cont").each(function(){
var container = $(this);
container.find(".text_cont").removeAttr("contenteditable");
container.find(".add_img").remove();
- container.find(".close_cont").remove();
+// container.find(".close_cont").remove();
container.find(".imgs_cont").removeAttr("ondragenter")
.removeAttr("ondragleave")
.removeAttr("ondragover")
@@ -132,7 +132,7 @@ function start(){
$(".cont").each(function(){
var container = $(this);
- $("<div class='close_cont'>").appendTo(container);
+// $("<div class='close_cont'>").appendTo(container);
container.find(".text_cont").attr("contenteditable","true");
container.find(".imgs_cont").removeClass("right")
.attr("ondragenter", "return false;")
@@ -152,7 +152,7 @@ function start(){
add_img.insertBefore(container.find(".clear"));
});
- $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
+// $("<div class='add_block'>" + sankoreLang.add + "</div>").appendTo("#data");
$(this).css("display", "none");
$("#wgt_display").css("display", "block");
}
@@ -160,9 +160,9 @@ function start(){
});
//add new block
- $(".add_block").live("click", function(){
- addContainer();
- });
+// $(".add_block").live("click", function(){
+// addContainer();
+// });
//checkbox events
$("input:checkbox").live("click", function(){
@@ -234,17 +234,19 @@ function start(){
});
//deleting a block
- $(".close_cont").live("click",function(){
- $(this).parent().remove();
- refreshBlockNumbers();
- });
+// $(".close_cont").live("click",function(){
+// $(this).parent().remove();
+// refreshBlockNumbers();
+// });
//deleting the img block
$(".close_img").live("click", function(){
$(this).parent().remove();
});
-
+ $("#wgt_reload, #wgt_display, #wgt_edit").live("mouseover",function(){
+ exportData();
+ })
}
//export
@@ -286,14 +288,13 @@ function exportData(){
});
array_to_export.push(cont_obj);
});
-
- sankore.setPreference("selectionner", JSON.stringify(array_to_export));
+ if(window.sankore)
+ sankore.setPreference("selectionner", JSON.stringify(array_to_export));
}
//import
function importData(data){
- var tmp = 0;
for(var i in data){
var container = $("<div class='cont'>").appendTo("#data");
@@ -301,7 +302,7 @@ function importData(data){
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
$("<div class='clear'>").appendTo(imgs_container);
- $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
+// $("<div class='number_cont'>" + (++tmp) + "</div>").appendTo(sub_container);
$("<div class='text_cont'>" + data[i].text + "</div>").appendTo(sub_container);
for(var j in data[i].blocks){
@@ -359,7 +360,7 @@ function showExample(){
var sub_container = $("<div class='sub_cont'>").appendTo(container);
var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- $("<div class='number_cont'>1</div>").appendTo(sub_container);
+// $("<div class='number_cont'>1</div>").appendTo(sub_container);
$("<div class='text_cont'>" + sankoreLang.short_desc + "</div>").appendTo(sub_container);
var tmp1 = $("<div class='text_block'>").appendTo(imgs_container);
@@ -388,23 +389,23 @@ function showExample(){
}
//add new container
-function addContainer(){
- var container = $("<div class='cont'>");
- var sub_container = $("<div class='sub_cont'>").appendTo(container);
- var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
- imgs_container.attr("ondragenter", "return false;")
- .attr("ondragleave", "$(this).removeClass('over'); return false;")
- .attr("ondragover", "$(this).addClass('over'); return false;")
- .attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
-
- $("<div class='close_cont'>").appendTo(container);
- $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
- var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
-
- $("<div class='add_img'>").appendTo(imgs_container);
- $("<div class='clear'>").appendTo(imgs_container);
- container.insertBefore($(".add_block"));
-}
+//function addContainer(){
+// var container = $("<div class='cont'>");
+// var sub_container = $("<div class='sub_cont'>").appendTo(container);
+// var imgs_container = $("<div class='imgs_cont'>").appendTo(container);
+// imgs_container.attr("ondragenter", "return false;")
+// .attr("ondragleave", "$(this).removeClass('over'); return false;")
+// .attr("ondragover", "$(this).addClass('over'); return false;")
+// .attr("ondrop", "$(this).removeClass('over'); return onDropTarget(this,event);");
+//
+// $("<div class='close_cont'>").appendTo(container);
+// $("<div class='number_cont'>"+ ($(".cont").size() + 1) +"</div>").appendTo(sub_container);
+// var text = $("<div class='text_cont' contenteditable>" + sankoreLang.enter + "</div>").appendTo(sub_container);
+//
+// $("<div class='add_img'>").appendTo(imgs_container);
+// $("<div class='clear'>").appendTo(imgs_container);
+// container.insertBefore($(".add_block"));
+//}
//add new img block
function addTextBlock(dest){
@@ -415,12 +416,12 @@ function addTextBlock(dest){
$("<div class='close_img'>").appendTo(tmp);
}
-function refreshBlockNumbers(){
- var i = 0;
- $(".cont").each(function(){
- $(this).find(".number_cont").text(++i);
- })
-}
+//function refreshBlockNumbers(){
+// var i = 0;
+// $(".cont").each(function(){
+// $(this).find(".number_cont").text(++i);
+// })
+//}
function stringToXML(text){
if (window.ActiveXObject){
@@ -434,7 +435,6 @@ function stringToXML(text){
return doc;
}
-
//changing the style
function changeStyle(val){
switch(val){
diff --git a/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/config.xml
index b622376..3d7726d 100644
--- a/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/config.xml
@@ -6,7 +6,7 @@
version="1.0"
width="850"
height="350"
- ub:resizable="true">
+ ub:resizable="false">
<name>Split a phrase</name>
<description>Split a phrase into words</description>
diff --git a/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/index.html
index f9f600c..8bf5f1c 100644
--- a/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/index.html
@@ -6,90 +6,33 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Template</title>
-
- <!--Styles-->
- <link rel="stylesheet" type="text/css" href="styles/master.css">
- <link rel="stylesheet" type="text/css" href="styles/wcontainer.css">
- <link rel="stylesheet" type="text/css" href="styles/app.css">
<!--Scripts-->
<script type="text/javascript" src="scripts/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="scripts/ext.js"></script>
- <script type="text/javascript" src="scripts/wcontainer.js"></script>
- <script type="text/javascript" src="scripts/app.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang != "en"){
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="ub-widget">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
</body>
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/fr/index.html b/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/en/index.html
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/fr/index.html
copy to Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/en/index.html
diff --git a/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/scripts/wcontainer.js b/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/en/scripts/wcontainer.js
similarity index 100%
rename from Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/scripts/wcontainer.js
rename to Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/en/scripts/wcontainer.js
diff --git a/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/fr/scripts/wcontainer.js b/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/fr/scripts/wcontainer.js
index 910b19f..01abcd8 100644
--- a/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/fr/scripts/wcontainer.js
+++ b/Sankore-3.1/resources/library/interactivities/Separe phrase.wgt/locales/fr/scripts/wcontainer.js
@@ -19,10 +19,10 @@ var sankoreLang = {
"<p>Le bouton âRechargerâ réinitialise lâexercice.</p>"+
- "<p>Le bouton âModifierâ vous permet :</p>"+
+ "<p>Le bouton âModifierâ vous permet de :</p>"+
- "<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun), </li>"+
- "<li>de déterminer la phrase sur laquelle travailler.</li></ul>"+
+ "<ul><li>choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun), </li>"+
+ "<li>déterminer la phrase sur laquelle travailler.</li></ul>"+
"<p>Ecrivez simplement une phrase dans la zone de texte.</p>"+
diff --git a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/config.xml
index 3f3b11a..952c9db 100644
--- a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/config.xml
@@ -6,7 +6,7 @@
version="1.0"
width="850"
height="400"
- ub:resizable="true">
+ ub:resizable="false">
<name>Split a text [alt]</name>
<description>Split a text into sentences</description>
diff --git a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/index.html
index 35a23fd..60abc83 100644
--- a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/index.html
@@ -1,97 +1,35 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
-
<html>
-
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Template</title>
- <!--Styles-->
- <link rel="stylesheet" type="text/css" href="styles/master.css">
- <link rel="stylesheet" type="text/css" href="styles/wcontainer.css">
- <link rel="stylesheet" type="text/css" href="styles/app.css">
<!--Scripts-->
<script type="text/javascript" src="scripts/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="scripts/ext.js"></script>
- <script type="text/javascript" src="scripts/wcontainer.js"></script>
- <script type="text/javascript" src="scripts/app2.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang != "en"){
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- alert(lang)
- },
- 200: function(){
-
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
-
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="ub-widget">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
-
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
+
</body>
-
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/fr/index.html b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/en/index.html
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/fr/index.html
copy to Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/en/index.html
diff --git a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/en/scripts/wcontainer.js b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/en/scripts/wcontainer.js
new file mode 100644
index 0000000..50b088a
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/en/scripts/wcontainer.js
@@ -0,0 +1,207 @@
+var sankoreLang = {
+ view: "Display",
+ edit: "Edit",
+ example: "hello, this is the first sentence. hi, this is the second sentence. hello again, this is the third sentence. good morning, this is the fourth sentence. hi, sorry, i\'m late, i\'m the fifth sentence.",
+ wgt_name: "Split a text",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p><h2>Split a text</h2></p>" +
+"<p><h3>Separate sentences in a text</h3></p>" +
+"<p>Text is written without the dots between sentences. The goal is to split the text correctly. If the result is correct, the area turns in green.</p>" +
+"<p>To add points between sentences, move the cursor and click between two words.</p>" +
+"<p>âReloadâ button resets the exercise.</p>" +
+"<p>Enter the âEditâ mode to :</p>" +
+"<ul><li>choose the theme of the App : pad, slate, or none (by default : none),</li>" +
+"<li>modify the text (write in the text field different phrases separated by dots).</li></ul>" +
+"<p>Do not use question and exclamation mark.</p>" +
+"<p>âDisplayâ button comes back to the activity.</p>",
+ theme: "Theme"
+};
+
+// if use the "view/edit" button or rely on the api instead
+var isSankore = false;
+// whether to do window.resize or not (window = widget area)
+var isBrowser = ( typeof( widget ) == "undefined" );
+
+function wcontainer( containerID )
+{
+ // some protecred variables
+ var thisInstance = this;
+ this.editMode = false;
+ var data = {}; // see setData and getData
+
+ // widget size parameters
+ this.minHeight = 100;
+ this.minWidth = 400;
+
+ // set to 0 for no max width restriction
+ this.maxWidth = 0;
+
+ // links to the elements of the widget
+ this.elements = {};
+
+ /*
+ ============
+ create
+ ============
+ - creates html base, inits this.elements, assings events
+ */
+ this.create = function( containerID )
+ {
+ var html =
+ '<div id="mp_content">' +
+ '<div class="viewmode" id="mp_view">' +
+ '</div>' +
+ '<div class="editmode" id="mp_edit">' +
+ '</div>' +
+ '</div>';
+
+ var container = $( containerID );
+
+ container.append( html );
+ this.elements.edit = container.find( ".editmode" );
+ this.elements.view = container.find( ".viewmode" );
+ this.elements.container = container;
+ this.elements.subcontainer = container.find( "#mp_content" );
+ this.elements.containerView = this.elements.subcontainer.find( ".viewmode" );
+ this.elements.containerEdit = this.elements.subcontainer.find( ".editmode" );
+
+ $("#wgt_edit").live("click", function(){
+ thisInstance.modeEdit();
+ } );
+
+ $("#wgt_display").live("click", function(){
+ thisInstance.modeView();
+ } );
+ };
+
+
+ /*
+ ===============
+ setViewContent
+ ===============
+ - assigns custom html to the viewmode container
+ */
+ this.setViewContent = function( html )
+ {
+ this.elements.container.find( "#mp_content .viewmode" ).html( html );
+ };
+
+ /*
+ ===============
+ setEditContent
+ ===============
+ - assigns custom html to the editmode container
+ */
+ this.setEditContent = function( html )
+ {
+ this.elements.container.find( "#mp_content .editmode" ).html( html );
+ };
+
+
+
+ /*
+ =========================
+ modeEdit and modeView
+ =========================
+ - switch the widget betweed modes
+ * for customization extend onEditMode and onViewMode
+ */
+ this.modeEdit = function()
+ {
+ this.onEditMode();
+ this.editMode = true;
+ this.elements.edit.removeClass( "hide" );
+ this.elements.view.addClass( "hide" );
+
+ //this.adjustSize();
+ };
+ this.modeView = function()
+ {
+ this.onViewMode();
+ this.editMode = false;
+ this.elements.edit.addClass( "hide" );
+ this.elements.view.removeClass( "hide" );
+
+ //this.adjustSize();
+ };
+
+ /*
+ ======================
+ setData and getData
+ ======================
+ - store some data inside
+ */
+ this.setData = function( name, value ){
+ data[name] = value;
+ };
+ this.getData = function( name ){
+ if( typeof( data[name] ) == "undefined" ){
+ return null;
+ } else return data[name];
+ };
+
+
+ // redefinable methods
+
+ /*
+ ==========================
+ onEditMode and onViewMode
+ ==========================
+ - these are called when the mode is being changed
+ */
+ this.onEditMode = function(){
+ //
+ };
+ this.onViewMode = function(){
+ //
+ };
+
+ /*
+ ======================
+ viewSize and editSize
+ ======================
+ - calculate container size for the adjustSize method
+ * they are likely to be redefined for each particular widget
+ */
+ this.viewSize = function(){
+ return {
+ w: this.elements.containerView.outerWidth(),
+ h: this.elements.containerView.outerHeight()
+ };
+ };
+ this.editSize = function(){
+ return {
+ w: this.elements.containerEdit.outerWidth(),
+ h: this.elements.containerEdit.outerHeight()
+ };
+ };
+
+ /*
+ =====================
+ checkAnswer
+ =====================
+ - check if the exercise in the view mode was done right
+ * redefine it for each particular widget
+ */
+ this.checkAnswer = function()
+ {
+ //
+ };
+
+
+ // constructor end
+
+ // if the constructor was called with a parameter,
+ // call create() automatically
+ if( arguments.length > 0 ){
+ this.create( containerID );
+ }
+ this.setData( "dw", this.elements.container.outerWidth( true ) - this.elements.container.width() );
+ this.setData( "dh", this.elements.container.outerHeight( true ) - this.elements.container.height() );
+ window.winstance = thisInstance;
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/fr/scripts/wcontainer.js b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/fr/scripts/wcontainer.js
index e40b9fe..b4d0812 100644
--- a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/fr/scripts/wcontainer.js
+++ b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/locales/fr/scripts/wcontainer.js
@@ -19,10 +19,10 @@ var sankoreLang = {
"<p>Le bouton âRechargerâ réinitialise lâexercice.</p>"+
- "<p>Le bouton âModifierâ vous permet :</p>"+
+ "<p>Le bouton âModifierâ vous permet de :</p>"+
- "<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun), </li>"+
- "<li>de déterminer le texte sur lequel travailler.</li></ul>"+
+ "<ul><li>choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut aucun), </li>"+
+ "<li>déterminer le texte sur lequel travailler.</li></ul>"+
"<p>Ecrivez simplement dans la zone de texte les différentes phrases séparées par des points.<b> NB : Les points dâinterrogation, les deux points â:â, les points-virgules â;â et les points dâexclamation ne sont pas pris en compte.</b></p>"+
diff --git a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/scripts/wcontainer.js b/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/scripts/wcontainer.js
deleted file mode 100644
index 22a313c..0000000
--- a/Sankore-3.1/resources/library/interactivities/Separe texte.wgt/scripts/wcontainer.js
+++ /dev/null
@@ -1,207 +0,0 @@
-var sankoreLang = {
- view: "Display",
- edit: "Edit",
- example: "hello, this is the first sentence. hi, this is the second sentence. hello again, this is the third sentence. good morning, this is the fourth sentence. hi, sorry, i\'m late, i\'m the fifth sentence.",
- wgt_name: "Split a text",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p><h2>Split a text</h2></p>" +
-"<p><h3>Separate sentences in a text</h3></p>" +
-"<p>Text is written without the dots between sentences. The goal is to split the text correctly. If the result is correct, the area turns in green.</p>" +
-"<p>To add points between sentences, move the cursor and click between two words.</p>" +
-"<p>âReloadâ button resets the exercise.</p>" +
-"<p>Enter the âEditâ mode to :</p>" +
-"<ul><li>choose the theme of the App : pad, slate, or none (by default : none),</li>" +
-"<li>modify the text (write in the text field different phrases separated by dots.)</li></ul>" +
-"<p>Do not use question and exclamation mark.</p>" +
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-// if use the "view/edit" button or rely on the api instead
-var isSankore = false;
-// whether to do window.resize or not (window = widget area)
-var isBrowser = ( typeof( widget ) == "undefined" );
-
-function wcontainer( containerID )
-{
- // some protecred variables
- var thisInstance = this;
- this.editMode = false;
- var data = {}; // see setData and getData
-
- // widget size parameters
- this.minHeight = 100;
- this.minWidth = 400;
-
- // set to 0 for no max width restriction
- this.maxWidth = 0;
-
- // links to the elements of the widget
- this.elements = {};
-
- /*
- ============
- create
- ============
- - creates html base, inits this.elements, assings events
- */
- this.create = function( containerID )
- {
- var html =
- '<div id="mp_content">' +
- '<div class="viewmode" id="mp_view">' +
- '</div>' +
- '<div class="editmode" id="mp_edit">' +
- '</div>' +
- '</div>';
-
- var container = $( containerID );
-
- container.append( html );
- this.elements.edit = container.find( ".editmode" );
- this.elements.view = container.find( ".viewmode" );
- this.elements.container = container;
- this.elements.subcontainer = container.find( "#mp_content" );
- this.elements.containerView = this.elements.subcontainer.find( ".viewmode" );
- this.elements.containerEdit = this.elements.subcontainer.find( ".editmode" );
-
- $("#wgt_edit").live("click", function(){
- thisInstance.modeEdit();
- } );
-
- $("#wgt_display").live("click", function(){
- thisInstance.modeView();
- } );
- };
-
-
- /*
- ===============
- setViewContent
- ===============
- - assigns custom html to the viewmode container
- */
- this.setViewContent = function( html )
- {
- this.elements.container.find( "#mp_content .viewmode" ).html( html );
- };
-
- /*
- ===============
- setEditContent
- ===============
- - assigns custom html to the editmode container
- */
- this.setEditContent = function( html )
- {
- this.elements.container.find( "#mp_content .editmode" ).html( html );
- };
-
-
-
- /*
- =========================
- modeEdit and modeView
- =========================
- - switch the widget betweed modes
- * for customization extend onEditMode and onViewMode
- */
- this.modeEdit = function()
- {
- this.onEditMode();
- this.editMode = true;
- this.elements.edit.removeClass( "hide" );
- this.elements.view.addClass( "hide" );
-
- //this.adjustSize();
- };
- this.modeView = function()
- {
- this.onViewMode();
- this.editMode = false;
- this.elements.edit.addClass( "hide" );
- this.elements.view.removeClass( "hide" );
-
- //this.adjustSize();
- };
-
- /*
- ======================
- setData and getData
- ======================
- - store some data inside
- */
- this.setData = function( name, value ){
- data[name] = value;
- };
- this.getData = function( name ){
- if( typeof( data[name] ) == "undefined" ){
- return null;
- } else return data[name];
- };
-
-
- // redefinable methods
-
- /*
- ==========================
- onEditMode and onViewMode
- ==========================
- - these are called when the mode is being changed
- */
- this.onEditMode = function(){
- //
- };
- this.onViewMode = function(){
- //
- };
-
- /*
- ======================
- viewSize and editSize
- ======================
- - calculate container size for the adjustSize method
- * they are likely to be redefined for each particular widget
- */
- this.viewSize = function(){
- return {
- w: this.elements.containerView.outerWidth(),
- h: this.elements.containerView.outerHeight()
- };
- };
- this.editSize = function(){
- return {
- w: this.elements.containerEdit.outerWidth(),
- h: this.elements.containerEdit.outerHeight()
- };
- };
-
- /*
- =====================
- checkAnswer
- =====================
- - check if the exercise in the view mode was done right
- * redefine it for each particular widget
- */
- this.checkAnswer = function()
- {
- //
- };
-
-
- // constructor end
-
- // if the constructor was called with a parameter,
- // call create() automatically
- if( arguments.length > 0 ){
- this.create( containerID );
- }
- this.setData( "dw", this.elements.container.outerWidth( true ) - this.elements.container.width() );
- this.setData( "dh", this.elements.container.outerHeight( true ) - this.elements.container.height() );
- window.winstance = thisInstance;
-}
diff --git a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/config.xml
index aa5f882..2bd02a3 100644
--- a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/config.xml
@@ -6,7 +6,7 @@
version="1.0"
width="770"
height="320"
- ub:resizable="true">
+ ub:resizable="false">
<name>Split a word</name>
<description>Split a word into syllables</description>
diff --git a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/index.html
index dcbdbbb..ed80196 100644
--- a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/index.html
@@ -1,97 +1,34 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
-
<html>
-
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Template</title>
-
- <!--Styles-->
- <link rel="stylesheet" type="text/css" href="styles/master.css">
- <link rel="stylesheet" type="text/css" href="styles/wcontainer.css">
- <link rel="stylesheet" type="text/css" href="styles/spl-word.css">
<!--Scripts-->
<script type="text/javascript" src="scripts/jquery-1.6.2.min.js"></script>
- <script type="text/javascript" src="scripts/jquery-ui-1.8.9.custom.min.js"></script>
- <script type="text/javascript" src="scripts/ext.js"></script>
- <script type="text/javascript" src="scripts/wcontainer.js"></script>
- <script type="text/javascript" src="scripts/spl-word.js"></script>
<script type="text/javascript">
if (parent && parent.loaded)
parent.loaded();
$(document).ready(function(){
- if(window.sankore)
- sankore.enableDropOnWidget(false);
- var lang = ""; //locale language
- if(window.sankore){
- lang = sankore.locale().substr(0,2);
- } else
- lang = "en";
- if(lang != "en"){
- returnStatus(lang);
- }
-
- function returnStatus(lang){
- $.ajax({
- type: 'POST',
- url:'locales/' + lang + '/index.html',
- statusCode: {
- 404: function() {
- alert(lang)
- },
- 200: function(){
- window.location.href = 'locales/' + lang + '/index.html';
- }
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"en"; //local language
+
+ $.ajax({
+ type: 'POST',
+ url: 'locales/' + lang + '/index.html',
+ statusCode: {
+ 404: function() {
+ window.location.href = 'locales/en/index.html';
+ },
+ 200: function(){
+ window.location.href = 'locales/' + lang + '/index.html';
}
- });
- }
+ }
+ });
});
</script>
</head>
-
<body>
- <table class="body_table" cellpadding=0 cellspacing=0>
- <tr style="height: 54px;">
- <td class="b_top_left"> </td>
- <td class="b_top_center">
- <div id="wgt_name"></div>
- <div id="wgt_help"></div>
- <div id="wgt_reload"></div>
- <div id="wgt_display" class="selected"></div>
- <div id="wgt_edit"></div>
- </td>
- <td class="b_top_right"> </td>
- </tr>
-
- <tr>
- <td class="b_center_left"> </td>
- <td>
- <div id="help"></div>
- <div id="ub-widget">
- <div id="parameters">
- <div class="inline">
- <label>
- <select id="style_select">
- <option value="1"></option>
- <option value="2"></option>
- <option value="3"></option>
- </select>
- </label>
- </div>
- </div>
- </div>
- </td>
- <td class="b_center_right"> </td>
- </tr>
-
- <tr style="height: 54px;">
- <td class="b_bottom_left"> </td>
- <td class="b_bottom_center"> </td>
- <td class="b_bottom_right"> </td>
- </tr>
- </table>
+
</body>
-
</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/en/index.html b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/en/index.html
new file mode 100644
index 0000000..cfb57e9
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/en/index.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Template</title>
+
+ <!--Styles-->
+ <link rel="stylesheet" type="text/css" href="../../styles/master.css">
+ <link rel="stylesheet" type="text/css" href="../../styles/wcontainer.css">
+ <link rel="stylesheet" type="text/css" href="../../styles/spl-word.css">
+ <!--Scripts-->
+ <script type="text/javascript" src="../../scripts/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="../../scripts/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript" src="../../scripts/ext.js"></script>
+ <script type="text/javascript" src="scripts/wcontainer.js"></script>
+ <script type="text/javascript" src="../../scripts/spl-word.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+ if(window.sankore)
+ sankore.enableDropOnWidget(false);
+ });
+ </script>
+ </head>
+
+ <body>
+ <table class="body_table" cellpadding=0 cellspacing=0>
+ <tr style="height: 54px;">
+ <td class="b_top_left"> </td>
+ <td class="b_top_center">
+ <div id="wgt_name"></div>
+ <div id="wgt_help"></div>
+ <div id="wgt_reload"></div>
+ <div id="wgt_display" class="selected"></div>
+ <div id="wgt_edit"></div>
+ </td>
+ <td class="b_top_right"> </td>
+ </tr>
+
+ <tr>
+ <td class="b_center_left"> </td>
+ <td>
+ <div id="help"></div>
+ <div id="ub-widget">
+ <div id="parameters">
+ <div class="inline">
+ <label>
+ <select id="style_select">
+ <option value="1"></option>
+ <option value="2"></option>
+ <option value="3"></option>
+ </select>
+ </label>
+ </div>
+ </div>
+ </div>
+ </td>
+ <td class="b_center_right"> </td>
+ </tr>
+
+ <tr style="height: 54px;">
+ <td class="b_bottom_left"> </td>
+ <td class="b_bottom_center"> </td>
+ <td class="b_bottom_right"> </td>
+ </tr>
+ </table>
+ </body>
+
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/en/scripts/wcontainer.js b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/en/scripts/wcontainer.js
new file mode 100644
index 0000000..55d2f6b
--- /dev/null
+++ b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/en/scripts/wcontainer.js
@@ -0,0 +1,205 @@
+var sankoreLang = {
+ view: "Display",
+ edit: "Edit",
+ example: "so*phis*ti*ca*ted",
+ wgt_name: "Syllables",
+ reload: "Reload",
+ slate: "slate",
+ pad: "pad",
+ none: "none",
+ help: "Help",
+ help_content:
+"<p><h2> Syllables </h2></p>" +
+"<p><h3> Separate the syllables of a word</h3></p>" +
+
+"<p>The goal is split the word correctly. If the result is correct, the area turns in green. </p>" +
+"<p>To add a separation between two syllables, move the cursor and click between two characters.</p>" +
+"<p>âReloadâ button resets the exercise. </ P>" +
+
+"<p>Enter the âEditâ mode to : </p>" +
+"<ul><li> choose the theme of the App : pad, slate, or none (by default : none),</li>" +
+"<li>modify the word (write in the text field and separate syllables with *).</li> </ul>" +
+"<p>âDisplayâ button comes back to the activity.</p>",
+ theme: "Theme"
+};
+
+// if use the "view/edit" button or rely on the api instead
+var isSankore = false;
+// whether to do window.resize or not (window = widget area)
+var isBrowser = ( typeof( widget ) == "undefined" );
+
+function wcontainer( containerID )
+{
+ // some protecred variables
+ var thisInstance = this;
+ this.editMode = false;
+ var data = {}; // see setData and getData
+
+ // widget size parameters
+ this.minHeight = 100;
+ this.minWidth = 400;
+
+ // links to the elements of the widget
+ this.elements = {};
+
+ /*
+ ============
+ create
+ ============
+ - creates html base, inits this.elements, assings events
+ */
+ this.create = function( containerID )
+ {
+ var html =
+ '<div id="mp_content">' +
+ '<div class="viewmode">' +
+ '</div>' +
+ '<div class="editmode">' +
+ '</div>' +
+ '</div>';
+
+ var container = $( containerID );
+
+ container.append( html );
+ this.elements.edit = container.find( ".editmode" );
+ this.elements.view = container.find( ".viewmode" );
+ this.elements.container = container;
+ this.elements.containerView = container.find( "#mp_content .viewmode" );
+ this.elements.containerEdit = container.find( "#mp_content .editmode" );
+
+ $("#wgt_edit").live("click", function(){
+ thisInstance.modeEdit();
+ } );
+
+ $("#wgt_display").live("click", function(){
+ thisInstance.modeView();
+ } );
+ };
+
+
+ /*
+ ===============
+ setViewContent
+ ===============
+ - assigns custom html to the viewmode container
+ */
+ this.setViewContent = function( html )
+ {
+ this.elements.container.find( "#mp_content .viewmode" ).html( html );
+ };
+
+ /*
+ ===============
+ setEditContent
+ ===============
+ - assigns custom html to the editmode container
+ */
+ this.setEditContent = function( html )
+ {
+ this.elements.container.find( "#mp_content .editmode" ).html( html );
+ };
+
+
+
+ /*
+ =========================
+ modeEdit and modeView
+ =========================
+ - switch the widget betweed modes
+ * for customization extend onEditMode and onViewMode
+ */
+ this.modeEdit = function()
+ {
+ this.onEditMode();
+ this.editMode = true;
+ this.elements.edit.removeClass( "hide" );
+ this.elements.view.addClass( "hide" );
+
+ //this.adjustSize();
+ };
+ this.modeView = function()
+ {
+ this.onViewMode();
+ this.editMode = false;
+ this.elements.edit.addClass( "hide" );
+ this.elements.view.removeClass( "hide" );
+
+ //this.adjustSize();
+ };
+
+
+ /*
+ ======================
+ setData and getData
+ ======================
+ - store some data inside
+ */
+ this.setData = function( name, value ){
+ data[name] = value;
+ };
+ this.getData = function( name ){
+ if( typeof( data[name] ) == "undefined" ){
+ return null;
+ } else return data[name];
+ };
+
+
+ // redefinable methods
+
+ /*
+ ==========================
+ onEditMode and onViewMode
+ ==========================
+ - these are called when the mode is being changed
+ */
+ this.onEditMode = function(){
+ //
+ };
+ this.onViewMode = function(){
+ //
+ };
+
+ /*
+ ======================
+ viewSize and editSize
+ ======================
+ - calculate container size for the adjustSize method
+ * they are likely to be redefined for each particular widget
+ */
+ this.viewSize = function(){
+ return {
+ w: this.elements.containerView.outerWidth(),
+ h: this.elements.containerView.outerHeight()
+ };
+ };
+ this.editSize = function(){
+ return {
+ w: this.elements.containerEdit.outerWidth(),
+ h: this.elements.containerEdit.outerHeight()
+ };
+ };
+
+ /*
+ =====================
+ checkAnswer
+ =====================
+ - check if the exercise in the view mode was done right
+ * redefine it for each particular widget
+ */
+ this.checkAnswer = function()
+ {
+ //
+ };
+
+
+ // constructor end
+
+ // if the constructor was called with a parameter,
+ // call create() automatically
+ if( arguments.length > 0 ){
+ this.create( containerID );
+ }
+ this.setData( "dw", this.elements.container.outerWidth( true ) - this.elements.container.width() );
+ this.setData( "dh", this.elements.container.outerHeight( true ) - this.elements.container.height() );
+ window.winstance = thisInstance;
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/fr/scripts/wcontainer.js b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/fr/scripts/wcontainer.js
index c0859bc..b90d7c7 100644
--- a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/fr/scripts/wcontainer.js
+++ b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/locales/fr/scripts/wcontainer.js
@@ -16,9 +16,9 @@ var sankoreLang = {
"<p>Le bouton âRechargerâ réinitialise lâexercice.</p>"+
- "<p>Le bouton âModifierâ vous permet :</p>"+
- "<ul><li>de choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut tablette), </li>"+
- "<li>de déterminer le mot sur lequel travailler.</li></ul>"+
+ "<p>Le bouton âModifierâ vous permet de :</p>"+
+ "<ul><li>choisir le thème de lâinteractivité : tablette, ardoise ou aucun (par défaut tablette), </li>"+
+ "<li>déterminer le mot sur lequel travailler.</li></ul>"+
"<p>Ecrivez simplement dans la zone de texte le mot en insérant entre les syllabes une étoile *.</p>"+
diff --git a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/scripts/wcontainer.js b/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/scripts/wcontainer.js
deleted file mode 100644
index 489fe74..0000000
--- a/Sankore-3.1/resources/library/interactivities/Syllabes.wgt/scripts/wcontainer.js
+++ /dev/null
@@ -1,205 +0,0 @@
-var sankoreLang = {
- view: "Display",
- edit: "Edit",
- example: "so*phis*ti*ca*ted",
- wgt_name: "Syllables",
- reload: "Reload",
- slate: "slate",
- pad: "pad",
- none: "none",
- help: "Help",
- help_content:
-"<p><h2> Syllables </h2></p>" +
-"<p><h3> Separate the syllables of a word</h3></p>" +
-
-"<p>The goal is split the word correctly. If the result is correct, the area turns in green. </p>" +
-"<p>To add a separation between two syllables, move the cursor and click between two characters.</p>" +
-"<p>âReloadâ button resets the exercise. </ P>" +
-
-"<p>Enter the âEditâ mode to : </p>" +
-"<ul><li> choose the theme of the App : pad, slate, or none (by default : none),</li>" +
-"<li>modify the word (write in the text field and separate syllables with *).</li> </ul>" +
-"<p>âDisplayâ button comes back to the activity.</p>",
- theme: "Theme"
-};
-
-// if use the "view/edit" button or rely on the api instead
-var isSankore = false;
-// whether to do window.resize or not (window = widget area)
-var isBrowser = ( typeof( widget ) == "undefined" );
-
-function wcontainer( containerID )
-{
- // some protecred variables
- var thisInstance = this;
- this.editMode = false;
- var data = {}; // see setData and getData
-
- // widget size parameters
- this.minHeight = 100;
- this.minWidth = 400;
-
- // links to the elements of the widget
- this.elements = {};
-
- /*
- ============
- create
- ============
- - creates html base, inits this.elements, assings events
- */
- this.create = function( containerID )
- {
- var html =
- '<div id="mp_content">' +
- '<div class="viewmode">' +
- '</div>' +
- '<div class="editmode">' +
- '</div>' +
- '</div>';
-
- var container = $( containerID );
-
- container.append( html );
- this.elements.edit = container.find( ".editmode" );
- this.elements.view = container.find( ".viewmode" );
- this.elements.container = container;
- this.elements.containerView = container.find( "#mp_content .viewmode" );
- this.elements.containerEdit = container.find( "#mp_content .editmode" );
-
- $("#wgt_edit").live("click", function(){
- thisInstance.modeEdit();
- } );
-
- $("#wgt_display").live("click", function(){
- thisInstance.modeView();
- } );
- };
-
-
- /*
- ===============
- setViewContent
- ===============
- - assigns custom html to the viewmode container
- */
- this.setViewContent = function( html )
- {
- this.elements.container.find( "#mp_content .viewmode" ).html( html );
- };
-
- /*
- ===============
- setEditContent
- ===============
- - assigns custom html to the editmode container
- */
- this.setEditContent = function( html )
- {
- this.elements.container.find( "#mp_content .editmode" ).html( html );
- };
-
-
-
- /*
- =========================
- modeEdit and modeView
- =========================
- - switch the widget betweed modes
- * for customization extend onEditMode and onViewMode
- */
- this.modeEdit = function()
- {
- this.onEditMode();
- this.editMode = true;
- this.elements.edit.removeClass( "hide" );
- this.elements.view.addClass( "hide" );
-
- //this.adjustSize();
- };
- this.modeView = function()
- {
- this.onViewMode();
- this.editMode = false;
- this.elements.edit.addClass( "hide" );
- this.elements.view.removeClass( "hide" );
-
- //this.adjustSize();
- };
-
-
- /*
- ======================
- setData and getData
- ======================
- - store some data inside
- */
- this.setData = function( name, value ){
- data[name] = value;
- };
- this.getData = function( name ){
- if( typeof( data[name] ) == "undefined" ){
- return null;
- } else return data[name];
- };
-
-
- // redefinable methods
-
- /*
- ==========================
- onEditMode and onViewMode
- ==========================
- - these are called when the mode is being changed
- */
- this.onEditMode = function(){
- //
- };
- this.onViewMode = function(){
- //
- };
-
- /*
- ======================
- viewSize and editSize
- ======================
- - calculate container size for the adjustSize method
- * they are likely to be redefined for each particular widget
- */
- this.viewSize = function(){
- return {
- w: this.elements.containerView.outerWidth(),
- h: this.elements.containerView.outerHeight()
- };
- };
- this.editSize = function(){
- return {
- w: this.elements.containerEdit.outerWidth(),
- h: this.elements.containerEdit.outerHeight()
- };
- };
-
- /*
- =====================
- checkAnswer
- =====================
- - check if the exercise in the view mode was done right
- * redefine it for each particular widget
- */
- this.checkAnswer = function()
- {
- //
- };
-
-
- // constructor end
-
- // if the constructor was called with a parameter,
- // call create() automatically
- if( arguments.length > 0 ){
- this.create( containerID );
- }
- this.setData( "dw", this.elements.container.outerWidth( true ) - this.elements.container.width() );
- this.setData( "dh", this.elements.container.outerHeight( true ) - this.elements.container.height() );
- window.winstance = thisInstance;
-}
diff --git a/Sankore-3.1/resources/library/interactivities/Tables.wgt/css/ubw-main.css b/Sankore-3.1/resources/library/interactivities/Tables.wgt/css/ubw-main.css
index 66280eb..51e38b1 100644
--- a/Sankore-3.1/resources/library/interactivities/Tables.wgt/css/ubw-main.css
+++ b/Sankore-3.1/resources/library/interactivities/Tables.wgt/css/ubw-main.css
@@ -215,6 +215,7 @@ html, body {
#parameters label > select, #parameters label > input{
margin-left: 10px;
+ width: 80px;
}
#parameters > div.inline {
diff --git a/Sankore-3.1/resources/library/interactivities/Train.wgt/css/ubw-main.css b/Sankore-3.1/resources/library/interactivities/Train.wgt/css/ubw-main.css
index 66280eb..ac5c3b0 100644
--- a/Sankore-3.1/resources/library/interactivities/Train.wgt/css/ubw-main.css
+++ b/Sankore-3.1/resources/library/interactivities/Train.wgt/css/ubw-main.css
@@ -1,308 +1,309 @@
html, body {
- margin:0;
- padding: 0;
- font-family: "helvetica neue";
- font-size: 14px;
- color: #666666;
+ margin:0;
+ padding: 0;
+ font-family: "helvetica neue";
+ font-size: 14px;
+ color: #666666;
}
#ubwidget {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- background: url("images/bg.png");
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: url("images/bg.png");
}
.theme-pad #ubwidget {
- border-radius: 40px;
- border-width: 52px;
-
- -webkit-border-image: url("images/pad-bd.png") 52 repeat;
- -moz-border-image: url("images/pad-bd.png") 52 repeat;
- border-image: url("images/pad-bd.png") 52 repeat;
+ border-radius: 40px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/pad-bd.png") 52 repeat;
+ -moz-border-image: url("images/pad-bd.png") 52 repeat;
+ border-image: url("images/pad-bd.png") 52 repeat;
}
.theme-slate #ubwidget {
- border-radius: 44px;
- border-width: 52px;
-
- -webkit-border-image: url("images/slate-bd.png") 52 repeat;
- -moz-border-image: url("images/slate-bd.png") 52 repeat;
- border-image: url("images/slate-bd.png") 52 repeat;
+ border-radius: 44px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/slate-bd.png") 52 repeat;
+ -moz-border-image: url("images/slate-bd.png") 52 repeat;
+ border-image: url("images/slate-bd.png") 52 repeat;
}
#ubwidget > .wrapper {
- position: absolute;
- top: 0px;
- bottom: 0px;
- left: 0px;
- right: 0px;
- overflow: hidden;
+ position: absolute;
+ top: 0px;
+ bottom: 0px;
+ left: 0px;
+ right: 0px;
+ overflow: hidden;
}
.theme-slate #ubwidget > .wrapper, .theme-pad #ubwidget > .wrapper {
- position: absolute;
- top: -49px;
- bottom: -5px;
- left: -5px;
- right: -5px;
- overflow: hidden;
+ position: absolute;
+ top: -49px;
+ bottom: -5px;
+ left: -5px;
+ right: -5px;
+ overflow: hidden;
}
#toolbar {
- display: table;
- width: 100%;
- height: 44px;
- font-size: 24px;
- color: #FFCC99;
- padding:0 10px;
+ display: table;
+ width: 100%;
+ height: 44px;
+ font-size: 24px;
+ color: #FFCC99;
+ padding:0 10px;
}
.theme-pad #toolbar, .theme-slate #toolbar {
- height: 38px;
- padding: 6px 0 0;
+ height: 38px;
+ padding: 6px 0 0;
}
.theme-slate #toolbar {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
}
#toolbar > * {
- display: table-cell;
- height: 100%;
- vertical-align: middle;
+ display: table-cell;
+ height: 100%;
+ vertical-align: middle;
}
#toolbar .actions {
- text-align: right;
+ text-align: right;
}
#toolbar button, h1 {
- font-weight: normal;
- font-size: 24px;
- color: #FFCC99;
- margin: 0;
+ font-weight: normal;
+ font-size: 24px;
+ color: #FFCC99;
+ margin: 0;
}
.theme-slate #toolbar button, .theme-slate h1 {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
}
#toolbar button {
- border: none;
- padding: none;
- outline: none;
- background: none;
-
- cursor: pointer;
- padding-left: 34px;
- margin-left: 10px;
- height: 32px;
+ border: none;
+ padding: none;
+ outline: none;
+ background: none;
+
+ cursor: pointer;
+ padding-left: 34px;
+ margin-left: 10px;
+ height: 32px;
}
#toolbar button span {
- display: block;
- line-height: 32px;
+ display: block;
+ line-height: 32px;
}
#toolbar button[role='edit'] {
- background: url("images/toolbar-edit.png") left top no-repeat;
+ background: url("images/toolbar-edit.png") left top no-repeat;
}
#toolbar button[role='view'] {
- display: none;
- color: #FFF;
- background: url("images/toolbar-edit.png") left -32px no-repeat;
+ display: none;
+ color: #FFF;
+ background: url("images/toolbar-edit.png") left -32px no-repeat;
}
#toolbar button[role='reload'] {
- background: url("images/toolbar-reload.png") left top no-repeat;
+ background: url("images/toolbar-reload.png") left top no-repeat;
}
#toolbar button[role='help'] {
- background: url("images/toolbar-help.png") left top no-repeat;
- display: none;
+ background: url("images/toolbar-help.png") left top no-repeat;
+ display: none;
}
.hasHelp #toolbar button[role='help'] {
- display: inline-block;
+ display: inline-block;
}
.showHelp #toolbar button[role='help'] {
- color: #FFF;
- background-position: left -32px;
+ color: #FFF;
+ background-position: left -32px;
}
.theme-slate #toolbar button[role='edit'] {
- background-image: url("images/slate-toolbar-edit.png");
+ background-image: url("images/slate-toolbar-edit.png");
}
.theme-slate #toolbar button[role='view'] {
- text-shadow: #7F613F 0 -1px 0;
- background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
+ text-shadow: #7F613F 0 -1px 0;
+ background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
}
.theme-slate #toolbar button[role='reload'] {
- background-image: url("images/slate-toolbar-reload.png");
+ background-image: url("images/slate-toolbar-reload.png");
}
.theme-slate #toolbar button[role='help'] {
- background-image: url("images/slate-toolbar-help.png");
+ background-image: url("images/slate-toolbar-help.png");
}
.showHelp.theme-slate #toolbar button[role='help'] {
- text-shadow: #7F613F 0 -1px 0;
+ text-shadow: #7F613F 0 -1px 0;
}
.onEdit #toolbar button[role='view'] {
- display: inline-block;
+ display: inline-block;
}
.onEdit #toolbar button[role='edit'] {
- display: none;
+ display: none;
}
#help {
- width: 300px;
- height: 400px;
- position: absolute;
- margin-top: 10px;
- right: 10px;
- z-index: 10000;
- display: none;
+ width: 300px;
+ height: 400px;
+ position: absolute;
+ margin-top: 10px;
+ right: 10px;
+ z-index: 10000;
+ display: none;
}
.showHelp #help {
- display: block;
+ display: block;
}
#content {
- position: absolute;
- top: 44px;
- bottom: 0;
- overflow: auto;
- left: 0;
- right: 0;
+ position: absolute;
+ top: 44px;
+ bottom: 0;
+ overflow: auto;
+ left: 0;
+ right: 0;
- background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
}
#parameters {
- display:none;
- padding: 10px 20px;
- background: url("images/parameters-bg.png");
-
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- -mz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
+ display:none;
+ padding: 10px 20px;
+ background: url("images/parameters-bg.png");
+
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -mz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
}
#parameters label {
- font-style: italic;
+ font-style: italic;
}
#parameters label > select, #parameters label > input{
- margin-left: 10px;
+ margin-left: 10px;
+ width: 80px;
}
#parameters > div.inline {
- display: inline-block;
+ display: inline-block;
}
#parameters > div.inline+div.inline {
- margin-left: 20px;
+ margin-left: 20px;
}
#parameters input[type=text],
#parameters input[type=number] {
- height: 26px;
- border: 1px solid #BBB;
- background-color: #FFF;
-
- padding: 0 4px;
-
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- -ms-border-radius: 4px;
- border-radius: 4px;
-
- -webkit-box-shadow: 0 1px 0 #FFF;
- -moz-box-shadow: 0 1px 0 #FFF;
- -ms-box-shadow: 0 1px 0 #FFF;
- box-shadow: 0 1px 0 #FFF;
+ height: 26px;
+ border: 1px solid #BBB;
+ background-color: #FFF;
+
+ padding: 0 4px;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ border-radius: 4px;
+
+ -webkit-box-shadow: 0 1px 0 #FFF;
+ -moz-box-shadow: 0 1px 0 #FFF;
+ -ms-box-shadow: 0 1px 0 #FFF;
+ box-shadow: 0 1px 0 #FFF;
}
#parameters input.tiny {
- width: 40px;
+ width: 40px;
}
#parameters input.small {
- width: 80px;
+ width: 80px;
}
#parameters input.medium {
- width: 120px;
+ width: 120px;
}
#parameters input.long {
- width: 160px;
+ width: 160px;
}
#scene {
- padding: 20px;
+ padding: 20px;
}
#scene > * {
- margin: 0 auto;
+ margin: 0 auto;
}
.onEdit #scene {
}
.onEdit #parameters {
- display: block;
+ display: block;
}
/*
.card-container {
- -webkit-perspective: 600px;
- width:100%;
- height: 100%;
+ -webkit-perspective: 600px;
+ width:100%;
+ height: 100%;
}
.card {
- position: relative;
- width:100%;
- height: 100%;
+ position: relative;
+ width:100%;
+ height: 100%;
}
.card > div {
- position: absolute;
- width:100%;
- height: 100%;
- -webkit-transform-style: preserve-3d;
- -webkit-transition: all .5s ease-in-out;
- -webkit-backface-visibility: hidden;
+ position: absolute;
+ width:100%;
+ height: 100%;
+ -webkit-transform-style: preserve-3d;
+ -webkit-transition: all .5s ease-in-out;
+ -webkit-backface-visibility: hidden;
}
.card > div:first-child {
- -webkit-transform: rotateY( 0deg );
+ -webkit-transform: rotateY( 0deg );
}
.card > div:last-child {
- -webkit-transform: rotateY( -180deg );
+ -webkit-transform: rotateY( -180deg );
}
.card.flip > div:first-child {
- -webkit-transform: rotateY( 180deg );
+ -webkit-transform: rotateY( 180deg );
}
.card.flip > div:last-child {
- -webkit-transform: rotateY( 0deg );
+ -webkit-transform: rotateY( 0deg );
}
*/
diff --git a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/config.xml b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/config.xml
index 44588cf..b586201 100644
--- a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/config.xml
+++ b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/config.xml
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget xmlns="http://www.w3.org/ns/widgets"
- xmlns:ub="http://uniboard.mnemis.com/widgets"
- id="http://www.njin.fr/sankore/apps/tableur"
- version="1.0"
- width="1050"
- height="560"
- ub:resizable="true">
-
- <name>La boite à transformation</name>
- <author href="http://www.njin.fr" email="contact at njin.fr">njin</author>
- <description></description>
-
- <content src="index.html"/>
-</widget>
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets"
+ xmlns:ub="http://uniboard.mnemis.com/widgets"
+ id="http://www.njin.fr/sankore/apps/tableur"
+ version="1.0"
+ width="1050"
+ height="560"
+ ub:resizable="false">
+
+ <name>La boite à transformation</name>
+ <author href="http://www.njin.fr" email="contact at njin.fr">njin</author>
+ <description></description>
+
+ <content src="index.html"/>
+</widget>
diff --git a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/css/ubw-main.css b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/css/ubw-main.css
index 66280eb..0cf76d8 100644
--- a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/css/ubw-main.css
+++ b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/css/ubw-main.css
@@ -1,308 +1,319 @@
-html, body {
- margin:0;
- padding: 0;
- font-family: "helvetica neue";
- font-size: 14px;
- color: #666666;
-}
-
-#ubwidget {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- background: url("images/bg.png");
-}
-
-.theme-pad #ubwidget {
- border-radius: 40px;
- border-width: 52px;
-
- -webkit-border-image: url("images/pad-bd.png") 52 repeat;
- -moz-border-image: url("images/pad-bd.png") 52 repeat;
- border-image: url("images/pad-bd.png") 52 repeat;
-}
-
-.theme-slate #ubwidget {
- border-radius: 44px;
- border-width: 52px;
-
- -webkit-border-image: url("images/slate-bd.png") 52 repeat;
- -moz-border-image: url("images/slate-bd.png") 52 repeat;
- border-image: url("images/slate-bd.png") 52 repeat;
-}
-
-#ubwidget > .wrapper {
- position: absolute;
- top: 0px;
- bottom: 0px;
- left: 0px;
- right: 0px;
- overflow: hidden;
-}
-
-
-.theme-slate #ubwidget > .wrapper, .theme-pad #ubwidget > .wrapper {
- position: absolute;
- top: -49px;
- bottom: -5px;
- left: -5px;
- right: -5px;
- overflow: hidden;
-}
-
-#toolbar {
- display: table;
- width: 100%;
- height: 44px;
- font-size: 24px;
- color: #FFCC99;
- padding:0 10px;
-}
-
-.theme-pad #toolbar, .theme-slate #toolbar {
- height: 38px;
- padding: 6px 0 0;
-}
-
-.theme-slate #toolbar {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
-}
-
-
-#toolbar > * {
- display: table-cell;
- height: 100%;
- vertical-align: middle;
-}
-
-#toolbar .actions {
- text-align: right;
-}
-
-#toolbar button, h1 {
- font-weight: normal;
- font-size: 24px;
- color: #FFCC99;
- margin: 0;
-}
-
-.theme-slate #toolbar button, .theme-slate h1 {
- color: #7F613F;
- text-shadow: #FFDCA9 0 1px 0;
-}
-
-#toolbar button {
- border: none;
- padding: none;
- outline: none;
- background: none;
-
- cursor: pointer;
- padding-left: 34px;
- margin-left: 10px;
- height: 32px;
-}
-
-#toolbar button span {
- display: block;
- line-height: 32px;
-}
-
-#toolbar button[role='edit'] {
- background: url("images/toolbar-edit.png") left top no-repeat;
-}
-
-#toolbar button[role='view'] {
- display: none;
- color: #FFF;
- background: url("images/toolbar-edit.png") left -32px no-repeat;
-}
-
-#toolbar button[role='reload'] {
- background: url("images/toolbar-reload.png") left top no-repeat;
-}
-
-#toolbar button[role='help'] {
- background: url("images/toolbar-help.png") left top no-repeat;
- display: none;
-}
-
-.hasHelp #toolbar button[role='help'] {
- display: inline-block;
-}
-
-.showHelp #toolbar button[role='help'] {
- color: #FFF;
- background-position: left -32px;
-}
-
-.theme-slate #toolbar button[role='edit'] {
- background-image: url("images/slate-toolbar-edit.png");
-}
-
-.theme-slate #toolbar button[role='view'] {
- text-shadow: #7F613F 0 -1px 0;
- background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
-}
-
-.theme-slate #toolbar button[role='reload'] {
- background-image: url("images/slate-toolbar-reload.png");
-}
-
-.theme-slate #toolbar button[role='help'] {
- background-image: url("images/slate-toolbar-help.png");
-}
-
-.showHelp.theme-slate #toolbar button[role='help'] {
- text-shadow: #7F613F 0 -1px 0;
-}
-
-
-.onEdit #toolbar button[role='view'] {
- display: inline-block;
-}
-
-.onEdit #toolbar button[role='edit'] {
- display: none;
-}
-
-#help {
- width: 300px;
- height: 400px;
- position: absolute;
- margin-top: 10px;
- right: 10px;
- z-index: 10000;
- display: none;
-}
-
-.showHelp #help {
- display: block;
-}
-
-#content {
- position: absolute;
- top: 44px;
- bottom: 0;
- overflow: auto;
- left: 0;
- right: 0;
-
- background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
- background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
-}
-
-#parameters {
- display:none;
- padding: 10px 20px;
- background: url("images/parameters-bg.png");
-
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- -mz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-
-#parameters label {
- font-style: italic;
-}
-
-#parameters label > select, #parameters label > input{
- margin-left: 10px;
-}
-
-#parameters > div.inline {
- display: inline-block;
-}
-
-#parameters > div.inline+div.inline {
- margin-left: 20px;
-}
-
-#parameters input[type=text],
-#parameters input[type=number] {
- height: 26px;
- border: 1px solid #BBB;
- background-color: #FFF;
-
- padding: 0 4px;
-
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- -ms-border-radius: 4px;
- border-radius: 4px;
-
- -webkit-box-shadow: 0 1px 0 #FFF;
- -moz-box-shadow: 0 1px 0 #FFF;
- -ms-box-shadow: 0 1px 0 #FFF;
- box-shadow: 0 1px 0 #FFF;
-}
-
-#parameters input.tiny {
- width: 40px;
-}
-
-#parameters input.small {
- width: 80px;
-}
-
-#parameters input.medium {
- width: 120px;
-}
-
-#parameters input.long {
- width: 160px;
-}
-
-#scene {
- padding: 20px;
-}
-
-#scene > * {
- margin: 0 auto;
-}
-.onEdit #scene {
-}
-
-.onEdit #parameters {
- display: block;
-}
-
-/*
-.card-container {
- -webkit-perspective: 600px;
- width:100%;
- height: 100%;
-}
-.card {
- position: relative;
- width:100%;
- height: 100%;
-}
-.card > div {
- position: absolute;
- width:100%;
- height: 100%;
- -webkit-transform-style: preserve-3d;
- -webkit-transition: all .5s ease-in-out;
- -webkit-backface-visibility: hidden;
-}
-.card > div:first-child {
- -webkit-transform: rotateY( 0deg );
-}
-.card > div:last-child {
- -webkit-transform: rotateY( -180deg );
-}
-.card.flip > div:first-child {
- -webkit-transform: rotateY( 180deg );
-}
-.card.flip > div:last-child {
- -webkit-transform: rotateY( 0deg );
-}
-*/
+html, body {
+ margin:0;
+ padding: 0;
+ font-family: "helvetica neue";
+ font-size: 14px;
+ color: #666666;
+}
+
+#ubwidget {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ background: url("images/bg.png");
+}
+
+.theme-pad #ubwidget {
+ border-radius: 40px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/pad-bd.png") 52 repeat;
+ -moz-border-image: url("images/pad-bd.png") 52 repeat;
+ border-image: url("images/pad-bd.png") 52 repeat;
+}
+
+.theme-slate #ubwidget {
+ border-radius: 44px;
+ border-width: 52px;
+
+ -webkit-border-image: url("images/slate-bd.png") 52 repeat;
+ -moz-border-image: url("images/slate-bd.png") 52 repeat;
+ border-image: url("images/slate-bd.png") 52 repeat;
+}
+
+#ubwidget > .wrapper {
+ position: absolute;
+ top: 0px;
+ bottom: 0px;
+ left: 0px;
+ right: 0px;
+ overflow: hidden;
+}
+
+
+.theme-slate #ubwidget > .wrapper, .theme-pad #ubwidget > .wrapper {
+ position: absolute;
+ top: -49px;
+ bottom: -5px;
+ left: -5px;
+ right: -5px;
+ overflow: hidden;
+}
+
+#toolbar {
+ display: table;
+ width: 100%;
+ height: 44px;
+ font-size: 24px;
+ color: #FFCC99;
+ padding:0 10px;
+}
+
+.theme-pad #toolbar, .theme-slate #toolbar {
+ height: 38px;
+ padding: 6px 0 0;
+}
+
+.theme-slate #toolbar {
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
+}
+
+
+#toolbar > * {
+ display: table-cell;
+ height: 100%;
+ vertical-align: middle;
+}
+
+#toolbar .actions {
+ text-align: right;
+}
+
+#toolbar button, h1 {
+ font-weight: normal;
+ font-size: 24px;
+ color: #FFCC99;
+ margin: 0;
+}
+
+.theme-slate #toolbar button, .theme-slate h1 {
+ color: #7F613F;
+ text-shadow: #FFDCA9 0 1px 0;
+}
+
+#toolbar button {
+ border: none;
+ padding: none;
+ outline: none;
+ background: none;
+
+ cursor: pointer;
+ padding-left: 34px;
+ margin-left: 10px;
+ height: 32px;
+}
+
+#toolbar button span {
+ display: block;
+ line-height: 32px;
+}
+
+#toolbar button[role='edit'] {
+ background: url("images/toolbar-edit.png") left top no-repeat;
+}
+
+#toolbar button[role='view'] {
+ display: none;
+ color: #FFF;
+ background: url("images/toolbar-edit.png") left -32px no-repeat;
+}
+
+#toolbar button[role='reload'] {
+ background: url("images/toolbar-reload.png") left top no-repeat;
+}
+
+#toolbar button[role='help'] {
+ background: url("images/toolbar-help.png") left top no-repeat;
+ display: none;
+}
+
+.hasHelp #toolbar button[role='help'] {
+ display: inline-block;
+}
+
+.showHelp #toolbar button[role='help'] {
+ color: #FFF;
+ background-position: left -32px;
+}
+
+.theme-slate #toolbar button[role='edit'] {
+ background-image: url("images/slate-toolbar-edit.png");
+}
+
+.theme-slate #toolbar button[role='view'] {
+ text-shadow: #7F613F 0 -1px 0;
+ background: url("images/slate-toolbar-edit.png") left -32px no-repeat;
+}
+
+.theme-slate #toolbar button[role='reload'] {
+ background-image: url("images/slate-toolbar-reload.png");
+}
+
+.theme-slate #toolbar button[role='help'] {
+ background-image: url("images/slate-toolbar-help.png");
+}
+
+.showHelp.theme-slate #toolbar button[role='help'] {
+ text-shadow: #7F613F 0 -1px 0;
+}
+
+
+.onEdit #toolbar button[role='view'] {
+ display: inline-block;
+}
+
+.onEdit #toolbar button[role='edit'] {
+ display: none;
+}
+
+#help {
+ width: 300px;
+ height: 400px;
+ position: absolute;
+ margin-top: 10px;
+ right: 10px;
+ z-index: 10000;
+ display: none;
+}
+
+.showHelp #help {
+ display: block;
+}
+
+#content {
+ position: absolute;
+ top: 44px;
+ bottom: 0;
+ overflow: auto;
+ left: 0;
+ right: 0;
+
+ background-image: -moz-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -webkit-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -o-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: -ms-radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+ background-image: radial-gradient(center center, ellipse closest-side, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0) 100%);
+}
+
+#parameters {
+ display:none;
+ padding: 10px 20px;
+ background: url("images/parameters-bg.png");
+
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -mz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+#parameters label {
+ font-style: italic;
+}
+
+#parameters select, #parameters input{
+ margin-left: 10px;
+}
+
+#parameters > div.inline {
+ display: inline-table
+}
+
+#parameters > div.inline > div{
+ float: left;
+ height: 28px;
+ margin-right: 8px;
+ padding-top: 5px;
+ font-family: "helvetica neue";
+ font-size: 14px;
+ color: #666666;
+ font-style: italic;
+}
+
+#parameters > div.inline+div.inline {
+ margin-left: 20px;
+}
+
+#parameters input[type=text],
+#parameters input[type=number] {
+ height: 26px;
+ border: 1px solid #BBB;
+ background-color: #FFF;
+
+ padding: 0 4px;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ border-radius: 4px;
+
+ -webkit-box-shadow: 0 1px 0 #FFF;
+ -moz-box-shadow: 0 1px 0 #FFF;
+ -ms-box-shadow: 0 1px 0 #FFF;
+ box-shadow: 0 1px 0 #FFF;
+}
+
+#parameters input.tiny {
+ width: 40px;
+}
+
+#parameters input.small {
+ width: 80px;
+}
+
+#parameters input.medium {
+ width: 120px;
+}
+
+#parameters input.long {
+ width: 160px;
+}
+
+#scene {
+ padding: 20px;
+}
+
+#scene > * {
+ margin: 0 auto;
+}
+.onEdit #scene {
+}
+
+.onEdit #parameters {
+ display: block;
+}
+
+/*
+.card-container {
+ -webkit-perspective: 600px;
+ width:100%;
+ height: 100%;
+}
+.card {
+ position: relative;
+ width:100%;
+ height: 100%;
+}
+.card > div {
+ position: absolute;
+ width:100%;
+ height: 100%;
+ -webkit-transform-style: preserve-3d;
+ -webkit-transition: all .5s ease-in-out;
+ -webkit-backface-visibility: hidden;
+}
+.card > div:first-child {
+ -webkit-transform: rotateY( 0deg );
+}
+.card > div:last-child {
+ -webkit-transform: rotateY( -180deg );
+}
+.card.flip > div:first-child {
+ -webkit-transform: rotateY( 180deg );
+}
+.card.flip > div:last-child {
+ -webkit-transform: rotateY( 0deg );
+}
+*/
diff --git a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/help.html b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/help.html
index c8cd974..60c671b 100644
--- a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/help.html
+++ b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/help.html
@@ -1,58 +1,58 @@
-<!doctype html>
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <link rel="stylesheet" href="css/ubw-help.css">
-
- <script src="js/lib/modernizr.js" type="text/javascript"></script>
- <script src="js/lib/jquery-1.7.1.min.js" type="text/javascript"></script>
- <script src="js/lib/mustache.js" type="text/javascript"></script>
-</head>
-
-<body>
- <div id="core">
- <div class="wrapper">
- <div>
- <script>
- function loadFile(filename, locale) {
- var toload = filename;
- var nextlocale = undefined;
-
- if(locale.length >= 5) {
- toload += '_' + locale.substring(0, 5) +'-template.js';
- nextlocale = locale.substring(0, 2);
- }
-
- else if(locale.length >= 2){
- toload += '_' + locale.substring(0, 2) +'-template.js';
- nextlocale = '';
- }
- else
- toload += '-template.js';
-
- $.ajax({
- url: toload,
- async: false,
- contentType:'text/plain;charset=UTF-8',
- dataType: 'text',
- success: function(data, status) {
- $("#core>.wrapper>div").html(Mustache.render(data, window));
- }
- })
- .fail(function() {
- if(nextlocale !== undefined)
- loadFile(filename, nextlocale);
- });
- }
- $(document).ready(function(){
- var locale = window.parent.sankore ? window.parent.sankore.locale() : "";
- loadFile("js/help", locale);
- });
- </script>
- </div>
- </div>
- </div>
-</body>
-
-</html>
+<!doctype html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link rel="stylesheet" href="css/ubw-help.css">
+
+ <script src="js/lib/modernizr.js" type="text/javascript"></script>
+ <script src="js/lib/jquery-1.7.1.min.js" type="text/javascript"></script>
+ <script src="js/lib/mustache.js" type="text/javascript"></script>
+</head>
+
+<body>
+ <div id="core">
+ <div class="wrapper">
+ <div>
+ <script>
+ function loadFile(filename, locale) {
+ var toload = filename;
+ var nextlocale = undefined;
+
+ if(locale.length >= 5) {
+ toload += '_' + locale.substring(0, 5) +'-template.js';
+ nextlocale = locale.substring(0, 2);
+ }
+
+ else if(locale.length >= 2){
+ toload += '_' + locale.substring(0, 2) +'-template.js';
+ nextlocale = '';
+ }
+ else
+ toload += '-template.js';
+
+ $.ajax({
+ url: toload,
+ async: false,
+ contentType:'text/plain;charset=UTF-8',
+ dataType: 'text',
+ success: function(data, status) {
+ $("#core>.wrapper>div").html(Mustache.render(data, window));
+ }
+ })
+ .fail(function() {
+ if(nextlocale !== undefined)
+ loadFile(filename, nextlocale);
+ });
+ }
+ $(document).ready(function(){
+ var locale = window.parent.sankore ? window.parent.sankore.locale() : "";
+ loadFile("js/help", locale);
+ });
+ </script>
+ </div>
+ </div>
+ </div>
+</body>
+
+</html>
diff --git a/Sankore-3.1/resources/library/pictures/Animaux/boeuf.png b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/images/boeuf.png
similarity index 100%
copy from Sankore-3.1/resources/library/pictures/Animaux/boeuf.png
copy to Sankore-3.1/resources/library/interactivities/Transformation.wgt/images/boeuf.png
diff --git a/Sankore-3.1/resources/library/pictures/Animaux/coq.png b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/images/coq.png
similarity index 100%
copy from Sankore-3.1/resources/library/pictures/Animaux/coq.png
copy to Sankore-3.1/resources/library/interactivities/Transformation.wgt/images/coq.png
diff --git a/Sankore-3.1/resources/library/pictures/Animaux/poule.png b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/images/poule.png
similarity index 100%
copy from Sankore-3.1/resources/library/pictures/Animaux/poule.png
copy to Sankore-3.1/resources/library/interactivities/Transformation.wgt/images/poule.png
diff --git a/Sankore-3.1/resources/library/pictures/Animaux/vache.png b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/images/vache.png
similarity index 100%
copy from Sankore-3.1/resources/library/pictures/Animaux/vache.png
copy to Sankore-3.1/resources/library/interactivities/Transformation.wgt/images/vache.png
diff --git a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/index.html b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/index.html
index f81722f..dbbb0e6 100644
--- a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/index.html
+++ b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/index.html
@@ -1,39 +1,39 @@
-<!doctype html>
-<html xmlns="http://www.w3.org/1999/xhtml">
-
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-
- <link rel="stylesheet" href="css/ubw-main.css">
- <link rel="stylesheet" href="css/main.css">
-
- <script src="js/templates.js" type="text/javascript" charset="utf-8"></script>
-
- <script src="js/lib/modernizr.js" type="text/javascript"></script>
- <script src="js/lib/jquery-1.7.1.min.js" type="text/javascript"></script>
- <script src="js/lib/jquery.i18n.properties-min-1.0.9.js" type="text/javascript" charset="utf-8"></script>
- <script src="js/lib/mustache.js" type="text/javascript"></script>
- <script src="js/lib/ubw-main.js" type="text/javascript"></script>
- <script src="js/main.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-
-<body class="hasHelp">
- <div id="ubwidget" data-number="2" data-themes="pad">
- <div class="wrapper">
- <div id="toolbar">
- </div>
- <div id="help">
- <iframe src="help.html" width="100%" height="100%" frameborder="0"></iframe>
- </div>
- <div id="content">
- <div id="parameters">
- </div>
- <div id="scene">
- </div>
- </div>
- </div>
- </div>
-</body>
-
-</html>
+<!doctype html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+ <link rel="stylesheet" href="css/ubw-main.css">
+ <link rel="stylesheet" href="css/main.css">
+
+ <script src="js/templates.js" type="text/javascript" charset="utf-8"></script>
+
+ <script src="js/lib/modernizr.js" type="text/javascript"></script>
+ <script src="js/lib/jquery-1.7.1.min.js" type="text/javascript"></script>
+ <script src="js/lib/jquery.i18n.properties-min-1.0.9.js" type="text/javascript" charset="utf-8"></script>
+ <script src="js/lib/mustache.js" type="text/javascript"></script>
+ <script src="js/lib/ubw-main.js" type="text/javascript"></script>
+ <script src="js/main.js" type="text/javascript" charset="utf-8"></script>
+
+</head>
+
+<body class="hasHelp">
+ <div id="ubwidget" data-number="2" data-themes="pad">
+ <div class="wrapper">
+ <div id="toolbar">
+ </div>
+ <div id="help">
+ <iframe src="help.html" width="100%" height="100%" frameborder="0"></iframe>
+ </div>
+ <div id="content">
+ <div id="parameters">
+ </div>
+ <div id="scene">
+ </div>
+ </div>
+ </div>
+ </div>
+</body>
+
+</html>
diff --git a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/lib/ubw-main.js b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/lib/ubw-main.js
index 06213d1..38e685f 100644
--- a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/lib/ubw-main.js
+++ b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/lib/ubw-main.js
@@ -13,257 +13,287 @@
* 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 app = Object.create(App, {
- container: {
- value: ubwidget
- },
- parameters: {
- value: parameters
- },
- reload: {
- value: reload
- }
- });
-
- app.init();
- app.onEdit = false;
+ var parameters = Object.create(Parameters,{
+ container: {
+ value: ubwidget
+ },
+ delegate: {
+ value: window.sankore || Object.create(ParametersDelegate)
+ }
+ });
- if(templates.toolbar) {
- $("#toolbar").html(Mustache.render(templates.toolbar, window));
- }
- if(templates.parameters) {
- $("#parameters").html(Mustache.render(templates.parameters, window));
- }
+ var app = Object.create(App, {
+ container: {
+ value: ubwidget
+ },
+ parameters: {
+ value: parameters
+ },
+ reload: {
+ value: reload
+ }
+ });
+ if(!window.sankore.preference("trans","")){
+ app.parameters.value("#Picture0before", JSON.stringify({
+ alt: "coq.png",
+ src: "images/coq.png",
+ title: "coq.png"
+ }))
+ app.parameters.value("#Picture0after", JSON.stringify({
+ alt: "poule.png",
+ src: "images/poule.png",
+ title: "poule.png"
+ }))
+ app.parameters.value("#Picture1before", JSON.stringify({
+ alt: "boeuf.png",
+ src: "images/boeuf.png",
+ title: "boeuf.png"
+ }))
+ app.parameters.value("#Picture1after", JSON.stringify({
+ alt: "vache.png",
+ src: "images/vache.png",
+ title: "vache.png"
+ }))
+ app.parameters.value("#UsePicture0before", true)
+ app.parameters.value("#UsePicture0after", true)
+ app.parameters.value("#UsePicture1before", true)
+ app.parameters.value("#UsePicture1after", true)
+ }
+ app.init();
+ app.onEdit = false;
+ //e("#Picture"+key, JSON.stringify(f));
+
+
+ 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;
+ $(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");
+ });
- $("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"));
+ callback({
+ src: $(file).find("path:eq(0)").text()
+ });
+ 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;
})();
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/main.js b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/main.js
index c896992..40aa288 100644
--- a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/main.js
+++ b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/main.js
@@ -31,13 +31,28 @@ function cards(app, index) {
var beforecontent = parameters.value("#"+index+"before");
var aftercontent = parameters.value("#"+index+"after");
-
+
+ /*var sample1 = "", sample2 = "";
+
+ if(!window.sankore || !window.sankore.preference("trans","")){
+ if(index == 1){
+ sample1 = "<img src='images/coq.png' class='uploadPic' title='coq.png' alt='coq.png'/>";
+ sample2 = "<img src='images/poule.png' class='uploadPic' title='poule.png' alt='poule.png'/>";
+ } else {
+ sample1 = "<img src='images/boeuf.png' class='uploadPic' title='boeuf.png' alt='boeuf.png'/>";
+ sample2 = "<img src='images/vache.png' class='uploadPic' title='vache.png' alt='vache.png'/>";
+ }
+ }*/
+
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(!window.sankore || !window.sankore.preference("trans",""))
+ //usePicture = true;
+
if(usePicture) {
before.addClass("usePicture");
var f = $.parseJSON(parameters.value("#Picture"+index+"before"));
@@ -49,6 +64,9 @@ function cards(app, index) {
usePicture = parameters.value("#UsePicture"+index+"after") === "true"
|| parameters.value("#UsePicture"+index+"after") == true;
+
+ //if(!window.sankore || !window.sankore.preference("trans",""))
+ //usePicture = true;
if(usePicture) {
after.addClass("usePicture");
@@ -66,6 +84,7 @@ function cards(app, index) {
}
function makeEditable(app, row, index) {
+ var tmp_flag = false;
var parameters = app.parameters;
var editable = row.find(".text>div").eq(0);
var key = index+editable.parent().parent().parent().attr('rel');
@@ -78,7 +97,7 @@ function makeEditable(app, row, index) {
function setSwicth() {
var val = parameters.value("#UsePicture"+key) === "true"
- || parameters.value("#UsePicture"+key) === true;
+ || parameters.value("#UsePicture"+key) === true;
if(val) {
row.addClass("usePicture");
}else {
@@ -204,4 +223,10 @@ $(document).ready(function(){
toolbar: toolbarTemplate,
parameters: parametersTemplate
}, callbacks);
+
+ if (window.widget) {
+ window.widget.onleave = function(){
+ sankore.setPreference("trans", "true");
+ }
+ }
});
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/templates.js b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/templates.js
index 7200068..7e3c7d3 100644
--- a/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/templates.js
+++ b/Sankore-3.1/resources/library/interactivities/Transformation.wgt/js/templates.js
@@ -1,26 +1,24 @@
-var toolbarTemplate =
- '<h1 class="title">{{fr.njin.i18n.document.title}}</h1>'+
- '<div class="actions">'+
- '<button role="edit"><span>{{fr.njin.i18n.toolbar.edit}}</span></button>'+
- '<button role="view"><span>{{fr.njin.i18n.toolbar.view}}</span></button>'+
- '<button role="reload"><span>{{fr.njin.i18n.toolbar.reload}}</span></button>'+
- '<button role="help"><span>{{fr.njin.i18n.toolbar.help}}</span></button>'+
- '</div>';
-
-var parametersTemplate =
- '<div class="inline">'+
- '<label>{{fr.njin.i18n.parameters.label.themes}}'+
- '<select name="themes" role="parameter">'+
- '<option value="pad">{{fr.njin.i18n.parameters.label.pad.themes}}</option>'+
- '<option value="slate">{{fr.njin.i18n.parameters.label.slate.themes}}</option>'+
- '<option value="none">{{fr.njin.i18n.parameters.label.none.themes}}</option>'+
- '</select>'+
- '</label>'+
- '</div>'+
- '<div class="inline">'+
- '<label>{{fr.njin.i18n.transformation.parameters.label.number}}'+
- '<input class="tiny" type="number" name="number" min="2" role="parameter">'+
- '</label>'+
- '</div>'+
- '<div id="edit-cards">'+
+var toolbarTemplate =
+ '<h1 class="title">{{fr.njin.i18n.document.title}}</h1>'+
+ '<div class="actions">'+
+ '<button role="edit"><span>{{fr.njin.i18n.toolbar.edit}}</span></button>'+
+ '<button role="view"><span>{{fr.njin.i18n.toolbar.view}}</span></button>'+
+ '<button role="reload"><span>{{fr.njin.i18n.toolbar.reload}}</span></button>'+
+ '<button role="help"><span>{{fr.njin.i18n.toolbar.help}}</span></button>'+
+ '</div>';
+
+var parametersTemplate =
+ '<div class="inline">'+
+ '<div>{{fr.njin.i18n.parameters.label.themes}}</div>'+
+ '<select name="themes" role="parameter">'+
+ '<option value="pad">{{fr.njin.i18n.parameters.label.pad.themes}}</option>'+
+ '<option value="slate">{{fr.njin.i18n.parameters.label.slate.themes}}</option>'+
+ '<option value="none">{{fr.njin.i18n.parameters.label.none.themes}}</option>'+
+ '</select>'+
+ '</div>'+
+ '<div class="inline">'+
+ '<div>{{fr.njin.i18n.transformation.parameters.label.number}}</div>'+
+ '<input class="tiny" type="number" name="number" min="2" role="parameter">'+
+ '</div>'+
+ '<div id="edit-cards">'+
'</div>';
\ No newline at end of file
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/config.xml b/Sankore-3.1/resources/library/search/Application Planete.wgs/config.xml
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/config.xml
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/config.xml
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/css/basic.css b/Sankore-3.1/resources/library/search/Application Planete.wgs/css/basic.css
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/css/basic.css
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/css/basic.css
diff --git a/Sankore-3.1/resources/library/search/Application Planete.wgs/icon.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/icon.png
new file mode 100644
index 0000000..1aca527
Binary files /dev/null and b/Sankore-3.1/resources/library/search/Application Planete.wgs/icon.png differ
diff --git a/Sankore-3.1/resources/library/search/Application Planete.wgs/icon.thumbnail.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/icon.thumbnail.png
new file mode 100644
index 0000000..1aca527
Binary files /dev/null and b/Sankore-3.1/resources/library/search/Application Planete.wgs/icon.thumbnail.png differ
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/down.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/down.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/down.png
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/images/down.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/greySquare.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/greySquare.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/greySquare.png
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/images/greySquare.png
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/images/icon-close.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/icon-close.png
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Contraste.wgt/images/icon-close.png
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/images/icon-close.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/popupBack.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/popupBack.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/popupBack.png
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/images/popupBack.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/search.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/search.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/search.png
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/images/search.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/search_app.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/search_app.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/search_app.png
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/images/search_app.png
diff --git a/Sankore-3.1/resources/library/search/Application Planete.wgs/images/thumbnail_icon.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/thumbnail_icon.png
new file mode 100644
index 0000000..1aca527
Binary files /dev/null and b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/thumbnail_icon.png differ
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/images/trgDown.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/trgDown.png
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Contraste.wgt/images/trgDown.png
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/images/trgDown.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/trgUp.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/trgUp.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/trgUp.png
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/images/trgUp.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/up.png b/Sankore-3.1/resources/library/search/Application Planete.wgs/images/up.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/up.png
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/images/up.png
diff --git a/Sankore-3.1/resources/library/search/Application Planete.wgs/index.html b/Sankore-3.1/resources/library/search/Application Planete.wgs/index.html
new file mode 100644
index 0000000..7a127e1
--- /dev/null
+++ b/Sankore-3.1/resources/library/search/Application Planete.wgs/index.html
@@ -0,0 +1,264 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>Planete Sankore Interactivity Search</title>
+ <link rel="stylesheet" type="text/css" href="css/basic.css"/>
+ <script type="text/javascript" src="scripts/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript">
+ var category = "widget";
+ var ict = "AssetMetadata.Application";
+ var type = "application";
+ var thumbnails = true;
+ var minHeight = 177;
+ var minWidth = 150;
+
+ var currentIndex = 0;
+ var currentTerm = "";
+ var limit = 10;
+ var filtersDisplayed = false; //display or hide filters
+
+ function addPaginationLinks(totalResults) {
+ var curPage = currentIndex; // check what page the app is on
+ var pagesDiv = $("<div id='resultFooter' class='resultFooter'>");
+ for (var i = 0; i < 8; i++) {
+ if (i * limit < totalResults) {
+
+ var link = $("<a class='pager_button'></a>").attr('href', 'javascript:gotoPage('+i+');').html(i+1).appendTo(pagesDiv);
+ if (curPage == i) {
+ link.addClass('active');
+ }
+ }
+ }
+
+ $("#disc_nav_cont #resultFooter").remove();
+ pagesDiv.insertBefore($('#disclaimer'));
+
+ $(".imgContainer").each(function(){
+ this.addEventListener("dragstart", imageDragging, false);
+ })
+
+ $(".imgContainer").each(function(){
+ this.addEventListener("dragenter", imageDragenter, false);
+ })
+
+ $(".imgContainer").each(function(){
+ this.addEventListener("dragleave", imageDragleave, false);
+ })
+
+ $(".imgContainer").each(function(){
+ this.addEventListener("dragover", imageDragover, false);
+ })
+ }
+
+ function searchFail(jqXHR, textStatus, errorThrown) {
+ alert('Impossible to connect to Planete Sankore: ' + textStatus + ' ' + errorThrown);
+ }
+
+ function searchComplete(json) {
+ // Grab our content div, clear it.
+ var totalResults = json.totalResults;
+ var contentDiv = $('#searchResult').empty();
+ // Loop through our results, printing them to the page.
+ var results = json.rows;
+ for (var i = 0; i < results.length; i++) {
+ // For each result write it's title and image to the screen
+ var result = results[i];
+ var imgContainer = $("<div class='imgContainer' draggable='true'>");
+ var title = document.createElement('div');
+ var iUrl = $("<input type='hidden'/>");
+ var iContent = $("<input type='hidden'/>");
+ var iHeight = $("<input type='hidden'/>");
+ var iWidth = $("<input type='hidden'/>");
+ var iTitle = $("<input type='hidden'/>");
+ var iThumbnailUrl = $("<input type='hidden'/>");
+ // We use titleNoFormatting so that no HTML tags are left in the
+ // title
+ title.innerHTML = result.title;
+ var newImg = document.createElement('img');
+
+ // There is also a result.file property which has the escaped version
+ if (thumbnails) {
+ var filename = result.file.substring(result.file.lastIndexOf("/")+1);
+ newImg.src = result.file + "/" + filename + "/icon.svg";
+ newImg.onerror = function() {
+ newImg.src = result.file + "/" + filename + "/icon.png";
+ iThumbnailUrl.attr("value",newImg.src);
+ };
+ } else {
+ newImg.src = "./images/thumbnail_icon.png";
+ }
+ var imgWidth = (result.tbWidth > minWidth)?result.tbWidth:minWidth;
+ var imgHeight = (result.tbHeight > minHeight)?result.tbHeight:minHeight;
+ imgContainer.width(imgWidth).height(imgHeight);
+ imgContainer.append($(newImg));
+ iUrl.attr("value", result.file + "?type=" + type);
+ iContent.attr("value", result.title);
+ iHeight.attr("value", result.height);
+ iWidth.attr("value", result.width);
+ iTitle.attr("value",decodeURIComponent(result.file.substring(result.file.lastIndexOf("/")+1)));
+ iThumbnailUrl.attr("value",newImg.src);
+ imgContainer.append($(title));
+ imgContainer.append(iUrl);
+ imgContainer.append(iContent);
+ imgContainer.append(iHeight);
+ imgContainer.append(iWidth);
+ imgContainer.append(iTitle);
+ imgContainer.append(iThumbnailUrl);
+
+ // Put our title + image in the content
+ imgContainer.appendTo(contentDiv);
+
+ }
+ // Now add links to additional pages of search results.
+ addPaginationLinks(totalResults);
+ }
+
+ function imageDragging(e){
+ e.dataTransfer.setData("text/plain",$(this).find("input:hidden").eq(0).val());
+ }
+
+ function imageDragleave(e){
+ return false;
+ }
+
+ function imageDragover(e){
+ return false;
+ }
+
+ function imageDragenter(e){
+ return false;
+ }
+
+ $(document).ready(function(){
+
+ //variables
+ var mode = false; //search or view mode
+ var hide = false; //hide or no main panel
+
+ //basic containers and elements
+ var disc_nav_cont = $("<div id='disc_nav_cont' class='disc_nav_cont'>").appendTo("body");
+ var disclaimer = $("<div id='disclaimer' class='disclaimer'>Recherche d'applications (.wgt) sur Sankoré<div>").appendTo(disc_nav_cont);
+ var search = $("<div id='search' class='search'>").appendTo("body");
+
+ var togglePages = $("<div id='togglePages' class='togglePages'>").appendTo(search);
+ var toggleIcon = $("<div id='toggleIcon' class='toggleIcon'>").appendTo(togglePages);
+
+ var subSearchInput = $("<div id='subSearchInput' class='subSearch'>").appendTo(search);
+ var subSearchFilter = $("<div id='subSearchFilter' class='subSearch'>").appendTo(search);
+
+ var searchInput = $("<input id='searchInput' class='searchInput' type='text'/>").appendTo(subSearchInput);
+ var searchButton = $("<div id='searchButton' class='searchButton'>").appendTo(subSearchInput);
+ // var toggleFilters = $("<div id='toggleFilters' class='toggleFilters'>").appendTo(subSearchInput);
+
+ //adding filters to the wgt
+ var selectFilter = $("<select id='sizeFilter' class='filterSelect'>")
+ .append($("<option value='0'>Any</option>"))
+ .append($("<option value='1'>Small</option>"))
+ .append($("<option value='2'>Medium</option>"))
+ .append($("<option value='3'>Large</option>"))
+ .append($("<option value='4'>Extra large</option>"));
+ $("<div class='filterContainer'>").append("<span>Size:</span>").append(selectFilter).appendTo(subSearchFilter);
+
+ //mouse click actions
+ /*
+ toggleFilters.click(function(){
+ if(filtersDisplayed){
+ subSearchFilter.hide();
+ toggleFilters.css("background-image","url(images/down.png)");
+ filtersDisplayed = false;
+ } else {
+ subSearchFilter.show();
+ toggleFilters.css("background-image","url(images/up.png)");
+ filtersDisplayed = true;
+ }
+ });
+ */
+
+ /*togglePages.click(function(event){
+ if(mode){
+ hide = false;
+ $("#search, #disclaimer").slideDown('slow', function(){
+ toggleIcon.css("background-image","url(images/trgUp.png)");
+ togglePages.appendTo("#search").css("top","").css("bottom","-14px");
+ });
+ mode = false;
+ } else {
+ hide = true;
+ $("#search, #disclaimer").slideUp('slow', function(){
+ toggleIcon.css("background-image","url(images/trgDown.png)");
+ togglePages.appendTo("body").css("top","0");
+ });
+ mode = true;
+ }
+ });*/
+
+ searchButton.click(function(){
+ if(!hide){
+ runSearch(searchInput.val(), 0);
+ //togglePages.trigger("click");
+ }
+ });
+
+ searchInput.keydown(function(event){
+ if(!hide){
+ if((event.keyCode == 0xA)||(event.keyCode == 0xD)){
+ runSearch(searchInput.val(), 0);
+ //togglePages.trigger("click");
+ }
+
+ }
+ });
+ (
+ $(".imgContainer").live("click",function(){
+ sankore.sendFileMetadata(createMetaData($(this)));
+ }));
+
+ /*$(window).resize(function(){
+ disclaimer.width($("body").width()-20);
+ search.width($("body").width()-20);
+ toggleIcon.css("margin-left",(togglePages.width()/2 - 7));
+ })*/
+
+ });
+
+ function gotoPage(i) {
+ runSearch(currentTerm, i);
+ }
+
+ // launching the search on planete sankore
+ function runSearch(term, index) {
+ currentTerm = term;
+ currentIndex = index;
+ var start = index * limit;
+ var url = "http://planete.sankore.org/xwiki/bin/view/Search/Resources?xpage=plain&category=" + category + "&ict=" + ict + "&level=&sort=title&dir=ASC&terms=" + escape(term) + "&start=" + start + "&limit=" + limit;
+ $.ajax({
+ url: url,
+ success: searchComplete,
+ error: searchFail,
+ dataType: "json"
+ });
+ }
+
+ function createMetaData(parent){
+ var meta = "";
+ //alert($(this).find("input:hidden").eq(0).val());
+ meta = "<metadata><data><key>Type</key><value>Audio</value></data><data><key>Url</key><value>" +
+ parent.find("input:hidden").eq(0).val() +
+ "</value></data><data><key>Content</key><value>" +
+ parent.find("input:hidden").eq(1).val() +
+ "</value></data><data><key>Height</key><value>n/a</value></data>"+
+ "<data><key>Width</key><value>n/a</value></data><data><key>Title</key><value>" +
+ parent.find("input:hidden").eq(4).val() +
+ "</value></data><data><key>thumbnailUrl</key><value>" +
+ parent.find("input:hidden").eq(5).val() +
+ "</value></data></metadata>";
+ return meta;
+ }
+ </script>
+
+ </head>
+ <body style="font-family: Arial;border: 0 none;">
+ <div id="searchResult"></div>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/scripts/jquery-1.6.2.min.js b/Sankore-3.1/resources/library/search/Application Planete.wgs/scripts/jquery-1.6.2.min.js
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/scripts/jquery-1.6.2.min.js
copy to Sankore-3.1/resources/library/search/Application Planete.wgs/scripts/jquery-1.6.2.min.js
diff --git a/Sankore-3.1/resources/library/search/Google images.wgs/css/basic.css b/Sankore-3.1/resources/library/search/Google images.wgs/css/basic.css
index 9e5abdc..deaeaef 100644
--- a/Sankore-3.1/resources/library/search/Google images.wgs/css/basic.css
+++ b/Sankore-3.1/resources/library/search/Google images.wgs/css/basic.css
@@ -72,14 +72,14 @@ a {
#searchResult {
overflow: hidden;
text-align: center;
- margin-top: 50px;
+ /* margin-top: 50px;*/
margin-bottom: 85px;
}
.search{
- position: fixed;
+ /*position: fixed;
top: 0;
- left: 0;
+ left: 0;*/
padding: 5px;
background-color: #BBBBBB;
border-bottom: solid 4px #EEEEEE;
@@ -127,12 +127,13 @@ a {
.subSearch{
margin: 0;
- float: left;
+ /*float: left; */
}
#subSearchInput{
width: 100%;
- float: left;
+ /*height: 46px;*/
+ display: inline-table;
box-sizing: border-box;
-webkit-box-sizing: border-box;
padding: 5px;
@@ -141,7 +142,6 @@ a {
#subSearchFilter{
width: 100%;
- float: left;
display: none;
}
diff --git a/Sankore-3.1/resources/library/search/Google images.wgs/index.html b/Sankore-3.1/resources/library/search/Google images.wgs/index.html
index b1c7647..d59d44b 100644
--- a/Sankore-3.1/resources/library/search/Google images.wgs/index.html
+++ b/Sankore-3.1/resources/library/search/Google images.wgs/index.html
@@ -61,7 +61,7 @@
// Loop through our results, printing them to the page.
var results = imageSearch.results;
- console.log(results);
+
for (var i = 0; i < results.length; i++) {
// For each result write it's title and image to the screen
var result = results[i];
@@ -159,10 +159,10 @@
//localization
locale = locales[lang];
-
+ var search = $("<div id='search' class='search'>").insertBefore("#searchResult");
var disc_nav_cont = $("<div id='disc_nav_cont' class='disc_nav_cont'>").appendTo("body");
var disclaimer = $("<div id='disclaimer' class='disclaimer'>"+locale.disclaimer_title+"<div>").appendTo(disc_nav_cont);
- var search = $("<div id='search' class='search'>").appendTo("body");
+
//var togglePages = $("<div id='togglePages' class='togglePages'>").appendTo(search);
//var toggleIcon = $("<div id='toggleIcon' class='toggleIcon'>").appendTo(togglePages);
@@ -250,7 +250,7 @@
filtersDisplayed = false;
} else {
//$("#search").height(120);
- subSearchFilter.show();
+ subSearchFilter.css("display","inline-block");
toggleFilters.css("background-image","url(images/up.png)");
filtersDisplayed = true;
}
@@ -296,7 +296,7 @@
});
$(".imgContainer").live("click",function(){
- sankore.sendFileMetadata(createMetaData($(this)));
+ sankore.sendFileMetadata(createMetaData($(this)));
});
//checking filters
@@ -427,17 +427,18 @@
imgSearch.setRestriction(google.search.ImageSearch.RESTRICT_RIGHTS,google.search.ImageSearch.RIGHTS_COMMERCIAL_MODIFICATION);
break;
}
+ imgSearch.setRestriction(google.search.Search.RESTRICT_SAFESEARCH,google.search.Search.SAFESEARCH_STRICT);
return imgSearch;
}
$(window).resize(function(){
- var width = "200px";
- if ($('#search').width() < 230) {
- width = $("#search").width()-40;
- } else {
- width = "200px";
- }
- $('select').selectBox('destroy').css('width', width).selectBox();
+ var width = "200px";
+ if ($('#search').width() < 230) {
+ width = $("#search").width()-40;
+ } else {
+ width = "200px";
+ }
+ $('select').selectBox('destroy').css('width', width).selectBox();
});
$(window).trigger("resize");
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/config.xml b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/config.xml
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/config.xml
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/config.xml
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/css/basic.css b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/css/basic.css
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/css/basic.css
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/css/basic.css
diff --git a/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/icon.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/icon.png
new file mode 100644
index 0000000..81c9865
Binary files /dev/null and b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/icon.png differ
diff --git a/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/icon.thumbnail.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/icon.thumbnail.png
new file mode 100644
index 0000000..81c9865
Binary files /dev/null and b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/icon.thumbnail.png differ
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/down.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/down.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/down.png
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/down.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/greySquare.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/greySquare.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/greySquare.png
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/greySquare.png
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/images/icon-close.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/icon-close.png
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Contraste.wgt/images/icon-close.png
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/icon-close.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/popupBack.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/popupBack.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/popupBack.png
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/popupBack.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/search.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/search.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/search.png
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/search.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/search_app.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/search_app.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/search_app.png
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/search_app.png
diff --git a/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/thumbnail_icon.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/thumbnail_icon.png
new file mode 100644
index 0000000..81c9865
Binary files /dev/null and b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/thumbnail_icon.png differ
diff --git a/Sankore-3.1/resources/library/interactivities/Contraste.wgt/images/trgDown.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/trgDown.png
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Contraste.wgt/images/trgDown.png
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/trgDown.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/trgUp.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/trgUp.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/trgUp.png
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/trgUp.png
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/images/up.png b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/up.png
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/images/up.png
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/images/up.png
diff --git a/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/index.html b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/index.html
new file mode 100644
index 0000000..309c5ac
--- /dev/null
+++ b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/index.html
@@ -0,0 +1,264 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>Planete Sankore Interactivity Search</title>
+ <link rel="stylesheet" type="text/css" href="css/basic.css"/>
+ <script type="text/javascript" src="scripts/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript">
+ var category = "widget";
+ var ict = "AssetMetadata.Interactivite";
+ var type = "interactivite";
+ var thumbnails = true;
+ var minHeight = 177;
+ var minWidth = 150;
+
+ var currentIndex = 0;
+ var currentTerm = "";
+ var limit = 10;
+ var filtersDisplayed = false; //display or hide filters
+
+ function addPaginationLinks(totalResults) {
+ var curPage = currentIndex; // check what page the app is on
+ var pagesDiv = $("<div id='resultFooter' class='resultFooter'>");
+ for (var i = 0; i < 8; i++) {
+ if (i * limit < totalResults) {
+
+ var link = $("<a class='pager_button'></a>").attr('href', 'javascript:gotoPage('+i+');').html(i+1).appendTo(pagesDiv);
+ if (curPage == i) {
+ link.addClass('active');
+ }
+ }
+ }
+
+ $("#disc_nav_cont #resultFooter").remove();
+ pagesDiv.insertBefore($('#disclaimer'));
+
+ $(".imgContainer").each(function(){
+ this.addEventListener("dragstart", imageDragging, false);
+ })
+
+ $(".imgContainer").each(function(){
+ this.addEventListener("dragenter", imageDragenter, false);
+ })
+
+ $(".imgContainer").each(function(){
+ this.addEventListener("dragleave", imageDragleave, false);
+ })
+
+ $(".imgContainer").each(function(){
+ this.addEventListener("dragover", imageDragover, false);
+ })
+ }
+
+function searchFail(jqXHR, textStatus, errorThrown) {
+ alert('Impossible to connect to Planete Sankore: ' + textStatus + ' ' + errorThrown);
+}
+
+function searchComplete(json) {
+ // Grab our content div, clear it.
+ var totalResults = json.totalResults;
+ var contentDiv = $('#searchResult').empty();
+ // Loop through our results, printing them to the page.
+ var results = json.rows;
+ for (var i = 0; i < results.length; i++) {
+ // For each result write it's title and image to the screen
+ var result = results[i];
+ var imgContainer = $("<div class='imgContainer' draggable='true'>");
+ var title = document.createElement('div');
+ var iUrl = $("<input type='hidden'/>");
+ var iContent = $("<input type='hidden'/>");
+ var iHeight = $("<input type='hidden'/>");
+ var iWidth = $("<input type='hidden'/>");
+ var iTitle = $("<input type='hidden'/>");
+ var iThumbnailUrl = $("<input type='hidden'/>");
+
+ // We use titleNoFormatting so that no HTML tags are left in the
+ // title
+ title.innerHTML = result.title;
+ var newImg = document.createElement('img');
+
+ // There is also a result.file property which has the escaped version
+ if (thumbnails) {
+ var filename = result.file.substring(result.file.lastIndexOf("/")+1);
+ newImg.src = result.file + "/" + filename + "/icon.svg";
+ newImg.onerror = function() {
+ newImg.src = result.file + "/" + filename + "/icon.png";
+ iThumbnailUrl.attr("value",newImg.src);
+ };
+ } else {
+ newImg.src = "./images/thumbnail_icon.png";
+ }
+ var imgWidth = (result.tbWidth > minWidth)?result.tbWidth:minWidth;
+ var imgHeight = (result.tbHeight > minHeight)?result.tbHeight:minHeight;
+ imgContainer.width(imgWidth).height(imgHeight);
+ imgContainer.append($(newImg));
+ iUrl.attr("value", result.file + "?type=" + type);
+ iContent.attr("value", result.title);
+ iHeight.attr("value", result.height);
+ iWidth.attr("value", result.width);
+ iTitle.attr("value",decodeURIComponent(result.file.substring(result.file.lastIndexOf("/")+1)));
+ iThumbnailUrl.attr("value",newImg.src);
+ imgContainer.append($(title));
+ imgContainer.append(iUrl);
+ imgContainer.append(iContent);
+ imgContainer.append(iHeight);
+ imgContainer.append(iWidth);
+ imgContainer.append(iTitle);
+ imgContainer.append(iThumbnailUrl);
+ // Put our title + image in the content
+ imgContainer.appendTo(contentDiv);
+
+ }
+ // Now add links to additional pages of search results.
+ addPaginationLinks(totalResults);
+}
+
+function imageDragging(e){
+ e.dataTransfer.setData("text/plain",$(this).find("input:hidden").eq(0).val());
+}
+
+function imageDragleave(e){
+ return false;
+}
+
+function imageDragover(e){
+ return false;
+}
+
+function imageDragenter(e){
+ return false;
+}
+
+$(document).ready(function(){
+
+ //variables
+ var mode = false; //search or view mode
+ var hide = false; //hide or no main panel
+
+ //basic containers and elements
+ var disc_nav_cont = $("<div id='disc_nav_cont' class='disc_nav_cont'>").appendTo("body");
+ var disclaimer = $("<div id='disclaimer' class='disclaimer'>Recherche d'interactivités (.wgt) sur Sankoré<div>").appendTo(disc_nav_cont);
+ var search = $("<div id='search' class='search'>").appendTo("body");
+
+ var togglePages = $("<div id='togglePages' class='togglePages'>").appendTo(search);
+ var toggleIcon = $("<div id='toggleIcon' class='toggleIcon'>").appendTo(togglePages);
+
+ var subSearchInput = $("<div id='subSearchInput' class='subSearch'>").appendTo(search);
+ var subSearchFilter = $("<div id='subSearchFilter' class='subSearch'>").appendTo(search);
+
+ var searchInput = $("<input id='searchInput' class='searchInput' type='text'/>").appendTo(subSearchInput);
+ var searchButton = $("<div id='searchButton' class='searchButton'>").appendTo(subSearchInput);
+ // var toggleFilters = $("<div id='toggleFilters' class='toggleFilters'>").appendTo(subSearchInput);
+
+ //adding filters to the wgt
+ var selectFilter = $("<select id='sizeFilter' class='filterSelect'>")
+ .append($("<option value='0'>Any</option>"))
+ .append($("<option value='1'>Small</option>"))
+ .append($("<option value='2'>Medium</option>"))
+ .append($("<option value='3'>Large</option>"))
+ .append($("<option value='4'>Extra large</option>"));
+ $("<div class='filterContainer'>").append("<span>Size:</span>").append(selectFilter).appendTo(subSearchFilter);
+
+ //mouse click actions
+ /*
+ toggleFilters.click(function(){
+ if(filtersDisplayed){
+ subSearchFilter.hide();
+ toggleFilters.css("background-image","url(images/down.png)");
+ filtersDisplayed = false;
+ } else {
+ subSearchFilter.show();
+ toggleFilters.css("background-image","url(images/up.png)");
+ filtersDisplayed = true;
+ }
+ });
+ */
+
+ /*togglePages.click(function(event){
+ if(mode){
+ hide = false;
+ $("#search, #disclaimer").slideDown('slow', function(){
+ toggleIcon.css("background-image","url(images/trgUp.png)");
+ togglePages.appendTo("#search").css("top","").css("bottom","-14px");
+ });
+ mode = false;
+ } else {
+ hide = true;
+ $("#search, #disclaimer").slideUp('slow', function(){
+ toggleIcon.css("background-image","url(images/trgDown.png)");
+ togglePages.appendTo("body").css("top","0");
+ });
+ mode = true;
+ }
+ });*/
+
+ searchButton.click(function(){
+ if(!hide){
+ runSearch(searchInput.val(), 0);
+ //togglePages.trigger("click");
+ }
+ });
+
+ searchInput.keydown(function(event){
+ if(!hide){
+ if((event.keyCode == 0xA)||(event.keyCode == 0xD)){
+ runSearch(searchInput.val(), 0);
+ //togglePages.trigger("click");
+ }
+
+ }
+ });
+ (
+ $(".imgContainer").live("click",function(){
+ sankore.sendFileMetadata(createMetaData($(this)));
+ }));
+
+ /*$(window).resize(function(){
+ disclaimer.width($("body").width()-20);
+ search.width($("body").width()-20);
+ toggleIcon.css("margin-left",(togglePages.width()/2 - 7));
+ })*/
+
+});
+
+function gotoPage(i) {
+ runSearch(currentTerm, i);
+}
+
+// launching the search on planete sankore
+function runSearch(term, index) {
+ currentTerm = term;
+ currentIndex = index;
+ var start = index * limit;
+ var url = "http://planete.sankore.org/xwiki/bin/view/Search/Resources?xpage=plain&category=" + category + "&ict=" + ict + "&level=&sort=title&dir=ASC&terms=" + escape(term) + "&start=" + start + "&limit=" + limit;
+ $.ajax({
+url: url,
+success: searchComplete,
+error: searchFail,
+dataType: "json"
+});
+}
+
+function createMetaData(parent){
+ var meta = "";
+ //alert($(this).find("input:hidden").eq(0).val());
+ meta = "<metadata><data><key>Type</key><value>Audio</value></data><data><key>Url</key><value>" +
+ parent.find("input:hidden").eq(0).val() +
+ "</value></data><data><key>Content</key><value>" +
+ parent.find("input:hidden").eq(1).val() +
+ "</value></data><data><key>Height</key><value>n/a</value></data>"+
+ "<data><key>Width</key><value>n/a</value></data><data><key>Title</key><value>" +
+ parent.find("input:hidden").eq(4).val() +
+ "</value></data><data><key>thumbnailUrl</key><value>" +
+ parent.find("input:hidden").eq(5).val() +
+ "</value></data></metadata>";
+ return meta;
+}
+</script>
+
+ </head>
+ <body style="font-family: Arial;border: 0 none;">
+ <div id="searchResult"></div>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/scripts/jquery-1.6.2.min.js b/Sankore-3.1/resources/library/search/Interactivite Planete.wgs/scripts/jquery-1.6.2.min.js
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/scripts/jquery-1.6.2.min.js
copy to Sankore-3.1/resources/library/search/Interactivite Planete.wgs/scripts/jquery-1.6.2.min.js
diff --git a/Sankore-3.1/resources/sankore.qrc b/Sankore-3.1/resources/sankore.qrc
index fcefa2e..af5dbd1 100644
--- a/Sankore-3.1/resources/sankore.qrc
+++ b/Sankore-3.1/resources/sankore.qrc
@@ -33,6 +33,8 @@
<file>images/resizeTool.svg</file>
<file>images/resizeRuler.svg</file>
<file>images/resizeCompass.svg</file>
+ <file>images/circle.svg</file>
+ <file>images/roundeRrectangle.svg</file>
<file>images/closeTool.svg</file>
<file>images/hflipTool.svg</file>
<file>images/vflipTool.svg</file>
@@ -342,9 +344,7 @@
<file>images/moveUpDisabled.svg</file>
<file>images/teacher_close.png</file>
<file>images/teacher_open.png</file>
- <file>images/teacher_close_disabled.png</file>
<file>style.qss</file>
- <file>images/teacher_open_disabled.png</file>
<file>images/libpalette/WebSearchCategory.svg</file>
<file>images/download_close.png</file>
<file>images/download_open.png</file>
@@ -367,5 +367,20 @@
<file>images/duplicateDisabled.svg</file>
<file>images/teacherGuide/flash_24x24.svg</file>
<file>images/toque.svg</file>
+ <file>images/createLinkPalette/LinkPage.svg</file>
+ <file>images/createLinkPalette/LinkWeb.svg</file>
+ <file>images/createLinkPalette/PlayAudio.svg</file>
+ <file>images/libpalette/BookmarkCategory.svg</file>
+ <file>images/libpalette/bookmarkIcon.svg</file>
+ <file>images/toolbar/bookmark.png</file>
+ <file>images/toolbar/bookmark.svg</file>
+ <file>images/trapFlashPalette/downloadToBoard.svg</file>
+ <file>images/trapFlashPalette/downloadToLibrary.svg</file>
+ <file>images/trapFlashPalette/linkToBoard.svg</file>
+ <file>images/trapFlashPalette/linkToLibrary.svg</file>
+ <file>images/trapFlashPalette/trappedFlashIcon.svg</file>
+ <file>images/trapFlashPalette/trappedSoundIcon.svg</file>
+ <file>images/trapFlashPalette/trappedVideoIcon.svg</file>
+ <file>images/trapFlashPalette/trappedIcon.svg</file>
</qresource>
</RCC>
diff --git a/Sankore-3.1/resources/startupHints/config.xml b/Sankore-3.1/resources/startupHints/config.xml
new file mode 100644
index 0000000..25b99bd
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/config.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets"
+ xmlns:ub="http://uniboard.mnemis.com/widgets"
+ id="http://uniboard.mnemis.com/widgets/notes"
+ version="1.2"
+ width="610"
+ height="360"
+ ub:resizable="false">
+
+ <name>Notes</name>
+ <author href="http://www.getuniboard.com"
+ email="info at mnemis.com">Mnemis SA</author>
+ <description>Associer images</description>
+
+ <content src="index.html"/>
+</widget>
diff --git a/Sankore-3.1/resources/startupHints/css/basic.css b/Sankore-3.1/resources/startupHints/css/basic.css
new file mode 100644
index 0000000..37d15d2
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/css/basic.css
@@ -0,0 +1,80 @@
+html, body{
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ font-family: sans-serif;
+ overflow: hidden;
+}
+
+body{
+ background-color: #aaaaaa;
+}
+
+#main{
+ background-color: #eeeeee;
+ width: 99%;
+ margin: 0px;
+ margin-left:1px;
+ padding: 0px;
+ height: 99%;
+ border-color:#999999;
+ border-width:2px;
+ border-radius:10px;
+ border-style:solid;
+}
+
+#content{
+ width: 100%;
+ margin: 0px;
+ padding: 0px;
+ height: 300px;
+}
+
+iframe{
+ border: none;
+ padding: 5px;
+}
+
+#separator{
+ width: 96%;
+ margin: 0 auto;
+ border: 2px solid #ccc;
+}
+
+#controls{
+ height: 30px;
+}
+
+#navigation{
+ margin-left: 10px;
+ height: 100%;
+ float: left;
+ margin-top: 5px;
+}
+
+#left{
+ width: 30px;
+ height: 30px;
+ background-image: url(../images/left.png);
+ cursor: pointer;
+ float: left;
+}
+
+#right{
+ width: 30px;
+ height: 30px;
+ background-image: url(../images/right.png);
+ cursor: pointer;
+ float: right;
+}
+
+#title{
+ width: 250px;
+ height: 100%;
+ float: left;
+ margin: 0 5px;
+ text-align: center;
+ vertical-align: middle;
+ display: table;
+}
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/icon.svg b/Sankore-3.1/resources/startupHints/icon.svg
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Ass images.wgt/icon.svg
copy to Sankore-3.1/resources/startupHints/icon.svg
diff --git a/Sankore-3.1/resources/startupHints/images/left.png b/Sankore-3.1/resources/startupHints/images/left.png
new file mode 100644
index 0000000..786b87a
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/images/left.png differ
diff --git a/Sankore-3.1/resources/startupHints/images/right.png b/Sankore-3.1/resources/startupHints/images/right.png
new file mode 100644
index 0000000..4d40983
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/images/right.png differ
diff --git a/Sankore-3.1/resources/startupHints/index.html b/Sankore-3.1/resources/startupHints/index.html
new file mode 100644
index 0000000..1ce5509
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/index.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Introduce</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <link rel="stylesheet" type="text/css" href="css/basic.css"/>
+ <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
+ <script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
+ <script type="text/javascript">
+ var current = 1, files_count = 0;
+ $(document).ready(function(){
+ var lang = (window.sankore)?sankore.locale().substr(0,2):"fr", tmp = false;
+
+ while(1){
+ $.ajax({
+ type: 'POST',
+ url:'locales/' + lang + '/' + (files_count + 1) + '.html',
+ async: false,
+ success: function(data){
+ files_count ++;
+ },
+ error: function(){
+ if(files_count == 0 && lang != "en")
+ lang = "en";
+ else
+ tmp = true;
+ }
+ });
+ if(tmp)
+ break;
+ }
+
+ if(files_count > 0){
+ current = Math.floor((Math.random()*files_count)+1);
+
+ $("#source").attr("src", "locales/" + lang + "/1.html");
+ $("#right").click(function(){
+ if(current < files_count){
+ current++;
+ } else
+ current = 1;
+
+ $("#source").attr("src", "locales/" + lang + "/" + current + ".html");
+ })
+
+ $("#left").click(function(){
+ if(current > 1){
+ current--;
+ } else
+ current = files_count;
+
+ $("#source").attr("src", "locales/" + lang + "/" + current + ".html");
+ })
+ } else
+ $("#source").attr("src", "locales/" + lang + "/error.html");
+
+ });
+
+ function setTitle(){
+ var iframe = document.getElementById("source");
+ $("#title span").html(current + "/" + files_count + ": " + iframe.contentWindow.document.getElementsByTagName("title")[0].innerHTML);
+ }
+ </script>
+ </head>
+ <body>
+ <div id="main">
+ <div id="content">
+ <iframe width='98%' height='95%' src='' id='source' onload='setTitle()'></iframe>
+ </div>
+ <div id="separator"></div>
+ <div id="controls">
+ <div id="navigation">
+ <div id="left"></div>
+ <div id="title"><span style='display: table-cell; vertical-align: inherit; width: 100%;'></span></div>
+ <div id="right"></div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/Sankore-3.1/resources/library/search/Audio Planete.wgs/scripts/jquery-1.6.2.min.js b/Sankore-3.1/resources/startupHints/js/jquery-1.6.2.min.js
similarity index 100%
copy from Sankore-3.1/resources/library/search/Audio Planete.wgs/scripts/jquery-1.6.2.min.js
copy to Sankore-3.1/resources/startupHints/js/jquery-1.6.2.min.js
diff --git a/Sankore-3.1/resources/startupHints/js/jquery-ui-1.8.9.custom.min.js b/Sankore-3.1/resources/startupHints/js/jquery-ui-1.8.9.custom.min.js
new file mode 100644
index 0000000..145ba1f
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/js/jquery-ui-1.8.9.custom.min.js
@@ -0,0 +1,781 @@
+/*!
+ * jQuery UI 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.9",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
+NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
+"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
+if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
+"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
+d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
+c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
+b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
+a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
+e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
+this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
+widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
+enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*!
+ * jQuery UI Mouse 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(true===c.data(b.target,a.widgetName+".preventClickEvent")){c.removeData(b.target,a.widgetName+".preventClickEvent");b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=
+a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
+this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);
+return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&c.data(a.target,this.widgetName+".preventClickEvent",
+true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+;/*
+ * jQuery UI Position 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
+left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
+k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
+m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
+d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
+a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
+g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
+;/*
+ * jQuery UI Draggable 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
+this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-
+this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();
+d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||
+this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&
+this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
+a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
+0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
+this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-
+(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment==
+"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?
+0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
+10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==
+Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():
+f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;
+if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])e=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/
+b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;e=this.originalPageX+Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=this.containment?!(e-this.offset.click.left<this.containment[0]||e-this.offset.click.left>this.containment[2])?e:!(e-this.offset.click.left<this.containment[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:g-this.offset.click.top-
+this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=
+this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.9"});
+d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var g=d.data(this,"sortable");if(g&&!g.options.disabled){c.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=
+0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=
+c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,
+true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=
+0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=
+a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","iframeFix",{start:function(){var a=d(this).data("draggable").options;d(a.iframeFix===true?"iframe":a.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},
+stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=
+document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-
+c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-
+(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable",
+"snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,g=b.offset.left,n=g+c.helperProportions.width,m=b.offset.top,o=m+c.helperProportions.height,h=
+c.snapElements.length-1;h>=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e<g&&g<k+e&&j-e<m&&m<l+e||i-e<g&&g<k+e&&j-e<o&&o<l+e||i-e<n&&n<k+e&&j-e<m&&m<l+e||i-e<n&&n<k+e&&j-e<o&&o<l+e){if(f.snapMode!="inner"){var p=Math.abs(j-o)<=e,q=Math.abs(l-m)<=e,r=Math.abs(i-n)<=e,s=Math.abs(k-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",
+{top:l,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k}).left-c.margins.left}var t=p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(j-m)<=e;q=Math.abs(l-o)<=e;r=Math.abs(i-g)<=e;s=Math.abs(k-n)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l-c.helperProportions.height,
+left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[h].snapping&&(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=p||q||r||s||t}else{c.snapElements[h].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,
+a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,
+b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
+;/*
+ * jQuery UI Droppable 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ * jquery.ui.draggable.js
+ */
+(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
+a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
+this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.9"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
+switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
+i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
+"none";if(c[f].visible){c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight};e=="mousedown"&&c[f]._activate.call(c[f],b)}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
+a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
+d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
+;/*
+ * jQuery UI Resizable 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
+_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
+String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
+this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};
+if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),
+d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=
+this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:
+this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",
+b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;
+f={width:c.size.width-(f?0:c.sizeDiff.width),height:c.size.height-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",
+b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=
+a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,
+k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),
+c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=
+this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+
+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,
+arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,
+{version:"1.8.9"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,
+function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=
+(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=
+false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-
+a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",
+b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top",
+"Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,
+f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=
+a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+
+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&
+e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",
+height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=
+d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
+;/*
+ * jQuery UI Selectable 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
+selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
+c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
+c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
+this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
+a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
+!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
+e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.9"})})(jQuery);
+;/*
+ * jQuery UI Sortable 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable");
+this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,
+arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=
+c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,
+{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();
+if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",
+a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");
+if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+
+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+
+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+
+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,
+c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==
+document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-
+1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});
+this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&
+a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?
+"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?
+c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;
+return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=
+d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});
+return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=
+d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&this.helper)this.offset.parent=
+this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=
+e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];
+if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);
+c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===
+1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=
+this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):
+b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==
+""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
+this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
+10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions=
+{width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||
+document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,
+b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=
+document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():
+e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-
+this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<
+this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&
+this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=
+this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();
+this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],
+this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",
+g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||
+this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,
+originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.9"})})(jQuery);
+;/*
+ * jQuery UI Accordion 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
+a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
+if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
+function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+
+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex");
+this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
+b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
+a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
+c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
+if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
+if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
+e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
+e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
+tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.9",animations:{slide:function(a,b){a=
+c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);f[i]={value:j[1],
+unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",paddingTop:"hide",
+paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
+;/*
+ * jQuery UI Autocomplete 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.position.js
+ */
+(function(d){d.widget("ui.autocomplete",{options:{appendTo:"body",delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,f;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){f=false;var e=d.ui.keyCode;
+switch(c.keyCode){case e.PAGE_UP:a._move("previousPage",c);break;case e.PAGE_DOWN:a._move("nextPage",c);break;case e.UP:a._move("previous",c);c.preventDefault();break;case e.DOWN:a._move("next",c);c.preventDefault();break;case e.ENTER:case e.NUMPAD_ENTER:if(a.menu.active){f=true;c.preventDefault()}case e.TAB:if(!a.menu.active)return;a.menu.select(c);break;case e.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=a.element.val()){a.selectedItem=
+null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(f){f=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||
+"body",b)[0]).mousedown(function(c){var e=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(g){g.target!==a.element[0]&&g.target!==e&&!d.ui.contains(e,g.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,e){e=e.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:e})&&/^key/.test(c.originalEvent.type)&&a.element.val(e.value)},selected:function(c,e){var g=e.item.data("item.autocomplete"),
+h=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=h;setTimeout(function(){a.previous=h;a.selectedItem=g},1)}false!==a._trigger("select",c,{item:g})&&a.element.val(g.value);a.term=a.element.val();a.close(c);a.selectedItem=g},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");
+this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,f;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,e){e(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source===
+"string"){f=this.options.source;this.source=function(c,e){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:f,data:c,dataType:"json",success:function(g,h,i){i===a.xhr&&e(g);a.xhr=null},error:function(g){g===a.xhr&&e([]);a.xhr=null}})}}else this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;
+this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==
+this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position))},
+_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var f=this;d.each(b,function(c,e){f._renderItem(a,e)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);
+else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(a,b){var f=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return f.test(c.label||c.value||c)})}})})(jQuery);
+(function(d){d.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(b){if(d(b.target).closest(".ui-menu-item a").length){b.preventDefault();a.select(b)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+-1).mouseenter(function(b){a.activate(b,d(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var f=b.offset().top-this.element.offset().top,c=this.element.attr("scrollTop"),e=this.element.height();if(f<0)this.element.attr("scrollTop",c+f);else f>=e&&this.element.attr("scrollTop",c+f-e+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:b})},
+deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,f){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);
+a.length?this.activate(f,a):this.activate(f,this.element.children(b))}else this.activate(f,this.element.children(b))},nextPage:function(a){if(this.hasScroll())if(!this.active||this.last())this.activate(a,this.element.children(".ui-menu-item:first"));else{var b=this.active.offset().top,f=this.element.height(),c=this.element.children(".ui-menu-item").filter(function(){var e=d(this).offset().top-b-f+d(this).height();return e<10&&e>-10});c.length||(c=this.element.children(".ui-menu-item:last"));this.activate(a,
+c)}else this.activate(a,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(".ui-menu-item:last"));else{var b=this.active.offset().top,f=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-b+f-d(this).height();return c<10&&c>-10});result.length||(result=this.element.children(".ui-menu-item:first"));
+this.activate(a,result)}else this.activate(a,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element.attr("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})})(jQuery);
+;/*
+ * jQuery UI Button 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,e=a([]);if(c)e=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return e};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
+i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",e="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
+function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(e)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");
+b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var f=b.element[0];h(f).not(f).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");
+g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(f){if(c.disabled)return false;if(f.keyCode==a.ui.keyCode.SPACE||f.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(f){f.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",
+c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){this.buttonElement=this.element.parents().last().find("label[for="+this.element.attr("id")+"]");this.element.addClass("ui-helper-hidden-accessible");var b=this.element.is(":checked");b&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=
+this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||
+this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
+true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary");
+this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},
+destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery);
+;/*
+ * jQuery UI Dialog 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.button.js
+ * jquery.ui.draggable.js
+ * jquery.ui.mouse.js
+ * jquery.ui.position.js
+ * jquery.ui.resizable.js
+ */
+(function(c,j){var k={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},l={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&
+c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",
+-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role",
+"button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=
+b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&
+a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0]){e=c(this).css("z-index");
+isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);
+d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===f[0]&&e.shiftKey){g.focus(1);return false}}});
+c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(f,
+h){h=c.isFunction(h)?{click:h,text:f}:h;f=c('<button type="button"></button>').attr(h,true).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&f.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=
+d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,
+position:f.position,size:f.size}}a=a===j?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,
+h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===
+1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);if(g in k)e=true;if(g in
+l)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");
+break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=this.options,b,d,e=
+this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-b,0));this.uiDialog.is(":data(resizable)")&&
+this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.9",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===
+0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
+height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
+b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
+function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+;/*
+ * jQuery UI Slider 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */
+(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options;this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");a.disabled&&this.element.addClass("ui-slider-disabled ui-disabled");
+this.range=d([]);if(a.range){if(a.range===true){this.range=d("<div></div>");if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}else this.range=d("<div></div>");this.range.appendTo(this.element).addClass("ui-slider-range");if(a.range==="min"||a.range==="max")this.range.addClass("ui-slider-range-"+a.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
+if(a.values&&a.values.length)for(;d(".ui-slider-handle",this.element).length<a.values.length;)d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();
+else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!b.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e=
+false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");h=b._start(c,f);if(h===false)return}break}i=b.options.step;h=b.options.values&&b.options.values.length?(g=b.values(f)):(g=b.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=b._valueMin();break;case d.ui.keyCode.END:g=b._valueMax();break;case d.ui.keyCode.PAGE_UP:g=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h===
+b._valueMax())return;g=b._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===b._valueMin())return;g=b._trimAlignValue(h-i);break}b._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(c,e);b._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
+this._mouseDestroy();return this},_mouseCapture:function(b){var a=this.options,c,e,f,h,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(a.range===true&&this.values(1)===a.min){g+=1;f=d(this.handles[g])}if(this._start(b,
+g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();a=f.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-f.width()/2,top:b.pageY-a.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},
+_mouseDrag:function(b){var a=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;
+if(this.orientation==="horizontal"){a=this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=
+this.values(a);c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var e;if(this.options.values&&this.options.values.length){e=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>e||a===1&&c<e))c=e;if(c!==this.values(a)){e=this.values();e[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:e});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],
+value:c});b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
+this._trimAlignValue(b);this._refreshValue();this._change(null,0)}return this._value()},values:function(b,a){var c,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f<c.length;f+=1){c[f]=this._trimAlignValue(e[f]);this._change(null,f)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):this.value();
+else return this._values()},_setOption:function(b,a){var c,e=0;if(d.isArray(this.options.values))e=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<e;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
+return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
+_refreshValue:function(){var b=this.options.range,a=this.options,c=this,e=!this._animateOff?a.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},a.animate);
+if(k===1)c.range[e?"animate":"css"]({width:f-g+"%"},{queue:false,duration:a.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},a.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:a.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
+1)[e?"animate":"css"]({width:f+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.9"})})(jQuery);
+;/*
+ * jQuery UI Tabs 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading…</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
+e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
+d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
+(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
+this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
+g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
+function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
+this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
+-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
+d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
+e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
+j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
+if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
+this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
+load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
+"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.9"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
+a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
+;/*
+ * jQuery UI Datepicker 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ * jquery.ui.core.js
+ */
+(function(d,G){function K(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}function E(a,b){d.extend(a,b);for(var c in b)if(b[c]==
+null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.9"}});var y=(new Date).getTime();d.extend(K.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();
+f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}},
+_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&
+b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==
+""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,
+c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),
+true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});
+b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);
+this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",
+this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,
+function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:
+f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},
+e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true);E(e.settings,f);this._attachments(d(a),e);this._autoSize(e);this._setDateDatepicker(a,h);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);
+this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]?
+d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||
+a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,
+e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,
+"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==G?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},
+_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=
+d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,
+c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&
+d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a));var e=a.dpDiv.find("iframe.ui-datepicker-cover");e.length&&e.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",
+function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=
+-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,
+"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input.focus();if(a.yearshtml){var f=a.yearshtml;setTimeout(function(){f===a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);f=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},
+_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-
+g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1);)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?
+b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
+0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=
+false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=
+d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);
+else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=
+a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,
+g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=z+1<a.length&&a.charAt(z+1)==p)&&z++;return p},m=function(p){var v=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&v?4:p=="o"?3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,v,H){p=o(p)?H:v;for(v=0;v<p.length;v++)if(b.substr(s,p[v].length).toLowerCase()==p[v].toLowerCase()){s+=p[v].length;return v+1}throw"Unknown name at position "+
+s;},r=function(){if(b.charAt(s)!=a.charAt(z))throw"Unexpected literal at position "+s;s++},s=0,z=0;z<a.length;z++)if(k)if(a.charAt(z)=="'"&&!o("'"))k=false;else r();else switch(a.charAt(z)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var w=new Date(m("@"));c=w.getFullYear();j=w.getMonth()+1;l=w.getDate();break;case "!":w=new Date((m("!")-this._ticksTo1970)/1E4);c=w.getFullYear();j=w.getMonth()+
+1;l=w.getDate();break;case "'":if(o("'"))r();else k=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}w=this._daylightSavingAdjust(new Date(c,j-1,l));if(w.getFullYear()!=c||w.getMonth()+1!=j||w.getDate()!=l)throw"Invalid date";return w},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",
+RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&
+a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",
+b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+=
+"0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==G?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=
+f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=
+(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,
+l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=
+a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),
+b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=
+this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+
+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+
+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+y+'.datepicker._hideDatepicker();">'+this._get(a,
+"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=
+this._get(a,"monthNames"),w=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),v=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var L=this._getDefaultDate(a),I="",C=0;C<i[0];C++){for(var M="",D=0;D<i[1];D++){var N=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",x="";if(l){x+='<div class="ui-datepicker-group';if(i[1]>1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-
+1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&C==0?c?f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,C>0||D>0,z,w)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var A=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=
+(t+h)%7;A+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}x+=A+"</tr></thead><tbody>";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O<A;O++){x+="<tr>";var P=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var F=
+p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,J=B&&!H||!F[0]||k&&q<k||o&&q>o;P+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(B?" ui-datepicker-other-month":"")+(q.getTime()==N.getTime()&&g==a.selectedMonth&&a._keyEvent||L.getTime()==q.getTime()&&L.getTime()==N.getTime()?" "+this._dayOverClass:"")+(J?" "+this._unselectableClass+" ui-state-disabled":"")+(B&&!v?"":" "+F[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":
+""))+'"'+((!B||v)&&F[2]?' title="'+F[2]+'"':"")+(J?"":' onclick="DP_jQuery_'+y+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(B&&!v?" ":J?'<span class="ui-state-default">'+q.getDate()+"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(B?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=
+P+"</tr>"}g++;if(g>11){g=0;m++}x+="</tbody></table>"+(l?"</div>"+(i[0]>0&&D==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");M+=x}I+=M}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',
+o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&
+l)?" ":""));a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+
+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";if(d.browser.mozilla)k+='<select class="ui-datepicker-year"><option value="'+c+'" selected="selected">'+c+"</option></select>";else{k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=
+a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,
+"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
+c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
+"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
+function(a){if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));
+return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new K;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.9";window["DP_jQuery_"+y]=d})(jQuery);
+;/*
+ * jQuery UI Progressbar 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
+this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.9"})})(jQuery);
+;/*
+ * jQuery UI Effects 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */
+jQuery.effects||function(f,j){function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
+16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return o.transparent;return o[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return n(b)}function p(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
+a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
+a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
+"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=n(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var o={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
+0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
+211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},r=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
+d){if(f.isFunction(b)){d=b;b=null}return this.queue("fx",function(){var e=f(this),g=e.attr("style")||" ",h=q(p.call(this)),l,v=e.attr("className");f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});l=q(p.call(this));e.attr("className",v);e.animate(u(h,l),a,b,function(){f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)});h=f.queue(this);l=h.splice(h.length-1,1)[0];
+h.splice(1,0,l);f.dequeue(this)})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,
+a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.9",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,
+a){var b;switch(c[0]){case "top":b=0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",
+border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);
+return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments);
+else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),
+b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,
+a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,
+a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==
+e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=
+g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
+h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,
+a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
+;/*
+ * jQuery UI Effects Blind 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
+g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
+;/*
+ * jQuery UI Effects Bounce 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Bounce
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
+3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
+b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Clip 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Clip
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
+c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Drop 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Drop
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
+"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Explode 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Explode
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
+0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
+e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
+;/*
+ * jQuery UI Effects Fade 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fade
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Fold 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
+10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
+;/*
+ * jQuery UI Effects Highlight 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
+this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Pulsate 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
+a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Scale 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Scale
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
+b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
+1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
+p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
+if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
+a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
+child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
+n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Shake 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Shake
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
+(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
+;/*
+ * jQuery UI Effects Slide 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Slide
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
+var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
+;/*
+ * jQuery UI Effects Transfer 1.8.9
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Effects/Transfer
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */
+(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
+b.dequeue()})})}})(jQuery);
+;
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/en/1.html b/Sankore-3.1/resources/startupHints/locales/en/1.html
new file mode 100644
index 0000000..9bd4f5a
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/en/1.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Modify the handwritten strokes</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130430;14521700">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msonormal { margin-bottom: 0.14in; font-family: "Cambria" }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Handwritten
+strokes created with the stylus or the markers are now considered as
+objects just as images, texts, â¦</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Therefore,
+they benefit from the same properties as the other objects which
+means that you can now move them, modify their size, rotate, apply a
+symmetry, group them and add an action.</FONT></FONT></FONT></P>
+<P CLASS="msonormal" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="images/image0041.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=129 HEIGHT=126 BORDER=0>
+</P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/en/2.html b/Sankore-3.1/resources/startupHints/locales/en/2.html
new file mode 100644
index 0000000..9822ed9
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/en/2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Move the z position of the objects</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130430;14572700">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msonormal { margin-bottom: 0.14in; font-family: "Cambria" }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Each
+object can now be moved forward or backward in the scene</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>When
+you select the object with the pointer tool, the edition frame shows
+two new buttons on the lower left side. The first icon from the left
+lets you move, step by step, the position of the object to the front
+(compared to the other objects) while the second icon lets you move
+the object to the back.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>A
+long clic on the icon will send the object all the way to the back or
+bring it all the way to the front. A visual signal, in the form of an
+animated circle, will let you know when the modification to the
+object has been applied.</FONT></FONT></FONT></P>
+<P CLASS="msonormal" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="images/image0061.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=284 HEIGHT=187 BORDER=0>
+</P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/en/3.html b/Sankore-3.1/resources/startupHints/locales/en/3.html
new file mode 100644
index 0000000..80b17fe
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/en/3.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Apply symmetry on images</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130430;15000600">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msonormal { margin-bottom: 0.14in; font-family: "Cambria" }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>You
+can now apply an horizontal or vertical symmetry of an image by
+dragging one of the side of the image to the opposite side.</FONT></FONT></FONT></P>
+<P CLASS="msonormal" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="images/image0091.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=281 HEIGHT=202 BORDER=0></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/en/4.html b/Sankore-3.1/resources/startupHints/locales/en/4.html
new file mode 100644
index 0000000..53f44c1
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/en/4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Use the magnifier tool</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130430;15033100">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>You
+can now highlight part of an illustration, text or any part of the
+board by using the Magnifier tool that is located in the
+« Applications » folder in the library (right drawer).</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>The
+Magnifier tool gives you the option to choose a rectangular or
+circular shape as well as the possibility to modify its size and zoom
+level.</FONT></FONT></FONT></P>
+<P ALIGN=CENTER><IMG SRC="images/image0131.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=329 HEIGHT=311 BORDER=0></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/en/5.html b/Sankore-3.1/resources/startupHints/locales/en/5.html
new file mode 100644
index 0000000..c64b6ba
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/en/5.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Copy a page from one lesson to another</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130430;15071200">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>You
+can easily copy a slide from one lesson to another by a simple drag &
+drop.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>In
+the « Documents » mode, simply select one of several
+pages from the source document and drag the page(s) in the target
+document.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>The
+pages will be copied (and not moved) to your new document where you
+will be able to edit them like any other page.</FONT></FONT></FONT></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/en/error.html b/Sankore-3.1/resources/startupHints/locales/en/error.html
new file mode 100644
index 0000000..6ee564d
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/en/error.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Error!</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130430;15044700">
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P STYLE="margin-bottom: 0in">There's been a little glitch. Check in
+your software package insided âRessources/startuHints/... if the
+hints are in the right folder.</P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0021.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0021.png
new file mode 100644
index 0000000..4451150
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0021.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0022.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0022.png
new file mode 100644
index 0000000..28fb534
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0022.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0033.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0033.png
new file mode 100644
index 0000000..5c2326a
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0033.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0041.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0041.png
new file mode 100644
index 0000000..89fe348
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0041.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0051.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0051.png
new file mode 100644
index 0000000..c51965c
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0051.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0052.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0052.png
new file mode 100644
index 0000000..3edbe48
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0052.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0061.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0061.png
new file mode 100644
index 0000000..cb15401
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0061.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0071.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0071.png
new file mode 100644
index 0000000..1ca52b1
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0071.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0081.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0081.png
new file mode 100644
index 0000000..2ee7c20
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0081.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0091.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0091.png
new file mode 100644
index 0000000..deb3ef1
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0091.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0101.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0101.png
new file mode 100644
index 0000000..669943b
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0101.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0102.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0102.png
new file mode 100644
index 0000000..6ea6ac8
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0102.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0111.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0111.png
new file mode 100644
index 0000000..81a2712
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0111.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0121.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0121.png
new file mode 100644
index 0000000..6133123
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0121.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0122.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0122.png
new file mode 100644
index 0000000..bc1c8ef
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0122.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0131.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0131.png
new file mode 100644
index 0000000..a150433
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0131.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image01401.png b/Sankore-3.1/resources/startupHints/locales/en/images/image01401.png
new file mode 100644
index 0000000..bbca7e6
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image01401.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0141.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0141.png
new file mode 100644
index 0000000..065ce69
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0141.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0142.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0142.png
new file mode 100644
index 0000000..0756786
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0142.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0151.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0151.png
new file mode 100644
index 0000000..5b0c4b9
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0151.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0152.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0152.png
new file mode 100644
index 0000000..bd5cf70
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0152.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0161.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0161.png
new file mode 100644
index 0000000..33a00da
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0161.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0171.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0171.png
new file mode 100644
index 0000000..0051414
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0171.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0172.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0172.png
new file mode 100644
index 0000000..539caec
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0172.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0181.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0181.png
new file mode 100644
index 0000000..e0a26f7
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0181.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0191.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0191.png
new file mode 100644
index 0000000..cd9ca8b
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0191.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0201.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0201.png
new file mode 100644
index 0000000..ac16407
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0201.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0211.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0211.png
new file mode 100644
index 0000000..5571587
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0211.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0241.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0241.png
new file mode 100644
index 0000000..adac2fe
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0241.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0261.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0261.png
new file mode 100644
index 0000000..0c49b7a
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0261.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/en/images/image0271.png b/Sankore-3.1/resources/startupHints/locales/en/images/image0271.png
new file mode 100644
index 0000000..a404db6
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/en/images/image0271.png differ
diff --git a/Sankore-3.1/resources/etc/Tutorial/tutorial_en/images/logo_open_sankore.png b/Sankore-3.1/resources/startupHints/locales/en/images/opensankore.png
similarity index 100%
copy from Sankore-3.1/resources/etc/Tutorial/tutorial_en/images/logo_open_sankore.png
copy to Sankore-3.1/resources/startupHints/locales/en/images/opensankore.png
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/1.html b/Sankore-3.1/resources/startupHints/locales/fr/1.html
new file mode 100644
index 0000000..fd92355
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/1.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Lire des médias sur tous les ordinateurs</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130428;21423200">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Le
+logiciel Open-Sankoré sollicite les lecteurs disponibles par défaut
+sur l'ordinateur pour interpréter les médias audio, vidéo ou
+flash. Cependant tous les formats ne peuvent donc pas être lus dans
+ce logiciel si lâordinateur ne contient pas les codecs nécessaires.</FONT></FONT></FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Les
+codecs sont des petits programmes qui permettent de décoder les
+différents formats de fichiers audio et vidéo disponibles.</FONT></FONT></FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Les
+lecteurs employés par Open-Sankoré sont : </FONT></FONT></FONT></FONT></FONT>
+</P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Windows
+ Media Player pour Windows, </FONT></FONT></FONT>
+ </P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>QuickTime
+ Player pour Mac,</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Phonon
+ (qui abstrait gstreamer ou xine) pour Linux.</FONT></FONT></FONT></P>
+</UL>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Privilégiez
+les formats suivants qui devraient être décodés aisément par tous
+les systèmes :</FONT></FONT></FONT></FONT></FONT></P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>images
+ au format .png, .svg, .jpg ou .gif</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>vidéo
+ au format .mp4 ou .flv</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>sons
+ au format .mp3</FONT></FONT></FONT></P>
+</UL>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Il
+existe quelques packs de codecs vous permettant dâétendre la gamme
+des formats multimédia pris en charge par le lecteur sur lequel
+repose Open-Sankoré. </FONT></FONT></FONT>
+</P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Soyez
+toutefois vigilants à lâinstallation de ces derniers,
+particulièrement avec les packs gratuits censés contenir des codecs
+de plusieurs sociétés ou fabricants. Certains de ces packs peuvent
+occasionner des problèmes ou instabilités sur votre système
+dâexploitation. </FONT></FONT></FONT>
+</P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Reportez
+vous à la documentation de votre système dâexploitation et de
+consulter le forum de support en ligne.</FONT></FONT></FONT></P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/10.html b/Sankore-3.1/resources/startupHints/locales/fr/10.html
new file mode 100644
index 0000000..f8bee99
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/10.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Ajouter des liens hypermédias aux objets (actions)</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5125700">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Il
+est possible d'ajouter des liens hypermédias sur des objets
+contenant des images fixes ou du texte.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Un
+menu permet de choisir de placer :</FONT></FONT></FONT></P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>un
+ lien vers une page web (nécessite une connexion internet),</FONT></FONT></FONT></P>
+</UL>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>-
+un lien vers une autre page de la présentation, </FONT></FONT></FONT>
+</P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>un
+ lien qui permet de jouer un son au clic sur lâobjet. </FONT></FONT></FONT>
+ </P>
+</UL>
+<P ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2"><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3><SPAN LANG="fr-FR">Pour
+ajouter une action, il faut sélectionner lâoption présente dans
+le menu du cadre de l'objet. </SPAN></FONT></FONT></FONT><FONT COLOR="#000000"><FONT FACE="Arial, sans-serif"><FONT SIZE=3><SPAN LANG="fr-FR">Cliquez
+sur « OK » pour valider votre action.</SPAN></FONT></FONT></FONT></P>
+<P ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2"><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3><SPAN LANG="fr-FR">Pour
+retirer l'action, il suffit de repasser par ce même menu.</SPAN></FONT></FONT></FONT></P>
+<P ALIGN=CENTER><IMG SRC="images/image0101.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=391 HEIGHT=225 BORDER=0></P>
+<P ALIGN=CENTER><IMG SRC="images/image0102.png" NAME="graphics2" ALIGN=BOTTOM WIDTH=527 HEIGHT=147 BORDER=0></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/11.html b/Sankore-3.1/resources/startupHints/locales/fr/11.html
new file mode 100644
index 0000000..8f8013b
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/11.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Sélectionner la langue de l'interface</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Le
+changement de la langue du logiciel s'effectue dans le premier onglet
+des "Préférences" du menu Open-Sankoré, onglet
+âAfficherâ.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Le
+choix de la langue est effectif une fois que le logiciel est
+redémarré. </FONT></FONT></FONT>
+</P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Ce
+réglage prime sur le réglage de la langue par défaut du système
+d'exploitation de votre ordinateur.</FONT></FONT></FONT></P>
+<P ALIGN=CENTER><IMG SRC="images/image0111.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=526 HEIGHT=244 BORDER=0></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/12.html b/Sankore-3.1/resources/startupHints/locales/fr/12.html
new file mode 100644
index 0000000..14a85a0
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/12.html
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Utiliser les signets web</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5174100">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>La
+bibliothèque propose un dossier "Signets" dans lequel il
+est possible de stocker des signets Web (ou bookmarks).</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Lorsque
+vous utiliser un glisser-déposer depuis la bibliothèque vers la
+page, un widget est alors directement ouvert avec le contenu de la
+page web.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Si
+vous cliquez sur l'icône du signet, une page sâouvre alors dans le
+navigateur Web intégré d'Open-Sankoré.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Un
+clic lâicône "Signet" dans la barre d'outils </FONT></FONT><FONT FACE="Arial, sans-serif">en
+</FONT><FONT FACE="Arial, sans-serif">mode Web ajoute
+</FONT><FONT FACE="Arial, sans-serif">automatiquement</FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">
+un signet dans le dossier «Signets». </FONT></FONT></FONT></FONT></FONT>
+</P>
+<P ALIGN=CENTER><IMG SRC="images/image0121.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=84 HEIGHT=96 BORDER=0></P>
+<P ALIGN=CENTER><IMG SRC="images/image0122.png" NAME="graphics2" ALIGN=BOTTOM WIDTH=632 HEIGHT=165 BORDER=0></P>
+<P ALIGN=CENTER> </P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/13.html b/Sankore-3.1/resources/startupHints/locales/fr/13.html
new file mode 100644
index 0000000..c4a33e4
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/13.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Utiliser l'outil "Loupe"</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Vous
+pouvez mettre en évidence des parties dâune illustration ou dâun
+texte en utilisant la loupe présente dans le dossier «Applications»
+de la bibliothèque (volet de droite).</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Vous
+pouvez choisir la forme de la loupe (rectangulaire ou circulaire)
+ainsi que sa taille et régler le taux d'agrandissement.</FONT></FONT></FONT></P>
+<P ALIGN=CENTER><IMG SRC="images/image0131.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=329 HEIGHT=311 BORDER=0></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/14.html b/Sankore-3.1/resources/startupHints/locales/fr/14.html
new file mode 100644
index 0000000..9288ffe
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/14.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Rechercher des illustrations avec Google Images</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ TD P { font-family: sans-serif; text-align: justify }
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Open-Sankoré
+permet de rechercher directement des images depuis le web en
+utilisant le moteur de Google Images.</FONT></FONT></P>
+<P><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Choisir le
+moteur «Google Images» puis renseigner le champ de recherche en
+haut.</FONT></FONT></P>
+<P><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Vous pouvez
+également utiliser des filtres de taille, de type dâillustration
+et de licence.</FONT></FONT></P>
+<P><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Notez que les
+images sont proposées après un filtrage strict des contenus
+utilisant la fonction «Safe Search» de Google.</FONT></FONT></P>
+<P><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Ce widget de
+recherche est disponible dans le dossier "Recherche Web" de
+la bibliothèque.</FONT></FONT></P>
+<CENTER>
+ <TABLE WIDTH=624 BORDER=0 CELLPADDING=2 CELLSPACING=2>
+ <TR>
+ <TD WIDTH=389>
+ <P><IMG SRC="images/image0141.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=146 HEIGHT=166 BORDER=0></P>
+ </TD>
+ <TD WIDTH=225>
+ <P><IMG SRC="images/image0142.png" NAME="graphics2" ALIGN=BOTTOM WIDTH=287 HEIGHT=387 BORDER=0></P>
+ </TD>
+ </TR>
+ </TABLE>
+</CENTER>
+<P><BR><BR>
+</P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/14_01.html b/Sankore-3.1/resources/startupHints/locales/fr/14_01.html
new file mode 100644
index 0000000..aa099a4
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/14_01.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Rechercher des médias sur Planète Sankoré</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Open-Sankoré
+permet une recherche directe de médias et dâapplications (widgets)
+sur le site de partage planete.sankore.org (application, audio,
+flash, image, interactivité, vidéo).</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Ces
+widgets de recherches sont disponibles dans le dossier "Recherche
+Web" de la bibliothèque</FONT></FONT></FONT></P>
+<P ALIGN=CENTER><FONT COLOR="#002939"><IMG SRC="images/image01401.png" NAME="graphics2" ALIGN=BOTTOM WIDTH=326 HEIGHT=236 BORDER=0></FONT></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/15.html b/Sankore-3.1/resources/startupHints/locales/fr/15.html
new file mode 100644
index 0000000..ede8f4b
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/15.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Capturer des médias depuis le navigateur web intégré</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Lâoutil
+âCapturer du contenu Webâ est disponible dans la barre dâoutils
+en mode navigateur Web intégré. Il vous permet de récupérer une
+page entière ou des médias (sons, vidéo, animations flash).</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Vous
+pourrez selon les médias et leur disponibilité effective réaliser
+les opérations suivantes :</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>-
+télécharger dans la bibliothèque (utilisable ultérieurement sans
+connexion)</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>-
+télécharger sur la page courante (utilisable ultérieurement sans
+connexion)</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>-
+ajouter lâobjet en lien dans la bibliothèque (nécessitera une
+connexion internet)</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>-
+ajouter lâobjet en lien sur la page courante (nécessitera une
+connexion internet).</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>N.B
+: en fonction de la configuration des sites, il ne vous sera pas
+toujours possible de choisir entre ces 4 possibilités (certaines
+serons alors âgriséesâ ce qui signifie quâelle ne sont pas
+utilisables). </FONT></FONT></FONT>
+</P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>ajouter
+une flèche sur lâicône utilisée </FONT></FONT></FONT>
+</P>
+<P ALIGN=CENTER STYLE="margin-bottom: 0in; widows: 2; orphans: 2"><FONT COLOR="#002939"><IMG SRC="images/image0151.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=102 HEIGHT=292 BORDER=0><IMG SRC="images/image0152.png" NAME="graphics2" ALIGN=BOTTOM WIDTH=123 HEIGHT=389 BORDER=0></FONT></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/16.html b/Sankore-3.1/resources/startupHints/locales/fr/16.html
new file mode 100644
index 0000000..2ff0f37
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/16.html
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Exporter et importer des fichiers .ubz par dossiers</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5485500">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Le
+mode "Documents" permet l'export et l'import sous forme
+dâarchive de dossiers contenant des documents de présentation ou
+des sous-dossiers.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Pour
+créer une archive il est nécessaire de regrouper les documents dans
+un dossier. Sélectionnez le dossier que vous désirez exporter au
+format dâarchive et cliquez sur le bouton "Exporter" en
+choisissant lâoption "Exporter au format UBX Open-Sankoré".</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Le
+logiciel génère alors une archive (.ubx) que vous nommerez et
+enregistrerez dans l'emplacement désiré.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Pour
+importer une archive contenant plusieurs fichiers (.ubx), cliquer sur
+le bouton "Importer" du mode "Documents".</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Il
+nâest pas possible actuellement dâimporter par lots plusieurs
+fichiers .ubz présent sur un disque ou une clé USB.</FONT></FONT></FONT></FONT></FONT></P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/17.html b/Sankore-3.1/resources/startupHints/locales/fr/17.html
new file mode 100644
index 0000000..333f258
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/17.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Utiliser l'outil Spot</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5494300">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>L'application
+«Spot» permet de mettre en évidence des zones spécifiques de
+votre page en choisissant :</FONT></FONT></FONT></P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>la
+ forme rectangulaire/carrée ou circulaire/ellipse</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>le
+ maintien des proportions</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>le
+ mode dâaffichage (sur un clic de la souris ou persistant)</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>une
+ prévisualisation de la forme</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>une
+ transparence du masque</FONT></FONT></FONT></P>
+</UL>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Comme
+les autres outils, «Spot» est disponible dans les "Applications"
+de la bibliothèque.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Notez
+également que vous pouvez employer l'outil "Masque" pour
+dévoiler progressivement le contenu dâun écran.</FONT></FONT></FONT></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/18.html b/Sankore-3.1/resources/startupHints/locales/fr/18.html
new file mode 100644
index 0000000..073713f
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/18.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Masquer open-Sankoré pour travailler sur un autre logiciel</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5504500">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Open-Sankoré
+nâest pas disponible en mode fenêtre. Le logiciel occupera
+toujours toute la surface de votre écran.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Cependant,
+il vous est possible de passer en mode âbureauâ ou de âmasquerâ
+Open-Sankoré.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Le
+mode «bureau» est accessible en cliquant sur lâicône «Bureau»
+dans la barre des outils.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Pour
+masquer open-Sankoré vous pouvez utiliser la commande «Ctrl+H»
+sous Windows et Linux ou «Cmd+H» sous MacOS.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Vous
+pouvez également utiliser la commande «Ctrl+Tab» sous Windows ou
+Linux ou «Cmd+Tab» sous MacOS pour passer dâune application Ã
+lâautre pour réaliser des copier-coller par exemple.</FONT></FONT></FONT></FONT></FONT></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/19.html b/Sankore-3.1/resources/startupHints/locales/fr/19.html
new file mode 100644
index 0000000..e3150c7
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/19.html
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Utiliser le mode âdocumentsâ </TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5512500">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Un
+nouveau document est créé lors chaque lancement dâopen-Sankoré.
+Ce dernier </FONT></FONT><FONT FACE="Arial, sans-serif">apparaît</FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">
+dans le dossier "Documents sans titre" du mode "Documents"
+(colonne de gauche). </FONT></FONT></FONT></FONT></FONT>
+</P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Pour
+faciliter le travail des utilisateurs, Open-Sankoré enregistre
+automatiquement votre travail à chaque changement de page ou lorsque
+le logiciel est quitté. Il nây a donc pas de fonction
+«enregistrer».</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Le
+dossier «Modèles» vous permet dây glisser des présentations que
+vous souhaitez conserver sans que celles-ci soient modifiables. Vous
+devrez les glisser vers un autre dossier pour les dupliquer et
+pouvoir les éditer.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Dans
+le mode «Document», il vous est notamment possible de :</FONT></FONT></FONT></P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>renommer
+ le document</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>créer
+ des dossiers et sous-dossiers</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>importer
+ ou exporter des documents Open-Sankoré (*.ubz) ou des dossiers
+ comportant des documents (*.ubx)</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>ajouter
+ des .pdf à vos pages</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>ajouter
+ des dossiers dâimages</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>réutiliser
+ des pages depuis une présentation</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>...</FONT></FONT></FONT></P>
+</UL>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/2.html b/Sankore-3.1/resources/startupHints/locales/fr/2.html
new file mode 100644
index 0000000..a42f94b
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/2.html
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>La fiche guide</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130428;21441600">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>La
+fiche guide des enseignants contient les informations utiles aux
+enseignants qui vont utiliser une ressource mutualisée par dâautres
+enseignant.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Elle
+est disponible dans le volet de gauche avec un onglet disposant d'une
+icône représentant la toque du professeur.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Cette
+fiche guide vous offre la possibilité de :</FONT></FONT></FONT></P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>citer
+ les auteurs successifs de la ressource et les crédits des médias
+ et ressources utilisées,</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>renseigner
+ les informations de la séance (titre, objectifs pédagogiques,
+ activité du maître ou des élèvesâ¦),</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>décrire
+ la ressource (niveau scolaire, discipline concernée, mots-clés,
+ licence de la ressourceâ¦),</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>proposer
+ les actions à réaliser par les enseignants et les
+ élèves/étudiants,</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>stocker
+ des éléments complémentaires ou facultatifs (image, son, vidéo,
+ application, liens web, â¦) ainsi que les corrigés des exercices
+ proposés si nécessaire.</FONT></FONT></FONT></P>
+</UL>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>L'ensemble
+des champs de la fiche guide appartient donc au document et permet
+aux utilisateurs dâavoir une meilleure visibilité du cadre
+pédagogique dans lequel l'activité est proposée. </FONT></FONT></FONT>
+</P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>NB
+: si vous exportez votre document Open-Sankoré au format PDF, la
+fiche guide ne sera pour le moment pas inclue dans le celui-ci.</FONT></FONT></FONT></P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/20.html b/Sankore-3.1/resources/startupHints/locales/fr/20.html
new file mode 100644
index 0000000..254a42e
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/20.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Que représente le cadre grisé sur la page ?</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Le
+cadre grisé présent sur toutes les pages définit la surface
+minimale qu'Open-Sankoré affichera sur tous types de projecteurs
+(4/3, 16/9, HD...) indépendamment de la résolution du projecteur.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Tout
+ce que vous glisserez-déposerez ou écrirez dans cette zone sera
+obligatoirement visible sur votre surface de projection.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Cette
+indication est très importante si vous souhaitez partager les
+ressources produites sur planete.sankore.org ou avec vos collègues.</FONT></FONT></FONT></P>
+<P><IMG SRC="images/image0201.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=620 HEIGHT=387 BORDER=0></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/21.html b/Sankore-3.1/resources/startupHints/locales/fr/21.html
new file mode 100644
index 0000000..856c8ce
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/21.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Sélectionner ce qui sera effacé</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Il
+est possible dâutiliser un clic long sur la gomme dans la barre
+dâoutils pour disposer de 4 options : </FONT></FONT></FONT>
+</P>
+<P ALIGN=CENTER><IMG SRC="images/image0211.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=596 HEIGHT=141 BORDER=0></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>NB
+: Le clic long sur la gomme utilisée sur la surface du tableau
+permet d'avoir le même résultat qu'avec un clic long sur la gomme
+dans la barre dâoutil.</FONT></FONT></FONT></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/22.html b/Sankore-3.1/resources/startupHints/locales/fr/22.html
new file mode 100644
index 0000000..0e8c159
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/22.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Réutiliser une diapo dâun fichier dans un autre fichier</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5572300">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Il
+est possible de dupliquer une diapo par un simple glisser déposer
+vers une autre présentation lorsque lâon utilise le mode
+«Documents».</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Il
+suffit de sélectionner une ou plusieurs diapositives depuis le
+document source et de le déplacer sur le nom du fichier qui
+accueillera les pages dupliquées.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Cette
+fonction est très efficace pour réutiliser des ressources ou des
+traces de travaux avec les élèves réalisés lors de séances
+précédentes.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial Bold, sans-serif"><FONT SIZE=3><FONT SIZE=3><SPAN LANG="fr-FR">Placer
+une illustration avec une flèche indiquant le mouvement pour glisser
+les pages vers un autre fichier.</SPAN></FONT></FONT></FONT></FONT></P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/23.html b/Sankore-3.1/resources/startupHints/locales/fr/23.html
new file mode 100644
index 0000000..b04d331
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/23.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Ajouter des médias dans la bibliothèque depuis le mode «Bureau»</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5582200">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">En
+ mode </FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial Italic, sans-serif">"Afficher
+ le bureau"</FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">,
+vous pouvez ajouter des fichiers directement dans votre bibliothèque
+: il vous suffit de glisser-déposer les fichiers souhaités sur le
+volet de la bibliothèque, Open-Sankoré triera automatiquement le
+type de fichier ajouté (image, vidéo ou son) et le placera à la
+racine </FONT></FONT><FONT FACE="Arial, sans-serif">du dossier
+correspondant </FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">de
+la bibliothèque correspondante. </FONT></FONT></FONT></FONT></FONT>
+</P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Vous
+pourrez ensuite le classer dans le dossier de votre choix.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3><FONT SIZE=3><SPAN LANG="fr-FR">Cela
+fonctionne également depuis une page Web ouverte avec un navigateur
+externe.</SPAN></FONT></FONT></FONT></FONT></P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/24.html b/Sankore-3.1/resources/startupHints/locales/fr/24.html
new file mode 100644
index 0000000..e295f8c
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/24.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Ajouter ou dupliquer des pages en mode «tableau»</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3><FONT FACE="Arial, sans-serif">Si
+vous faites un clic long sur le bouton </FONT><FONT FACE="Arial Italic, sans-serif">"Pages"
+</FONT><FONT FACE="Arial, sans-serif">dans la barre des outils, un
+menu sâouvre qui vous permet de choisir si voulez ajouter une
+nouvelle page à la suite, dupliquer la page en cours ou importer une
+page ou un ensemble de pages depuis un fichier présent sur votre
+ordinateur. Ce fichier comporte au moins une page de format image
+(png, jpg, gif, ...) ou .pdf.</FONT></FONT></FONT></FONT></P>
+<P ALIGN=CENTER><IMG SRC="images/image0241.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=384 HEIGHT=139 BORDER=0></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>NB
+: pour la page de garde (page 0), seules deux fonctions sont
+disponibles (nouvelle page et importer une page).</FONT></FONT></FONT></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/25.html b/Sankore-3.1/resources/startupHints/locales/fr/25.html
new file mode 100644
index 0000000..edc100b
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/25.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Revenir à la taille normale après lâutilisation du zoom en avant ou en arrière</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130501;9110200">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Si
+vous agrandissez/réduisez votre page en utilisant les outils </FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial Italic, sans-serif">"Zoomer
+en avant "Zoomer en arrière" </FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">(dans
+la barre du stylet) et que vous voulez ensuite revenir à la
+dimension originale, vous trouverez à droite en bas de la page un
+bouton avec une loupe barrée.</FONT></FONT></FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Si
+vous cliquez dessus vous retournerez automatiquement à la taille
+dâorigine au lieu dâutiliser lâoutil inverse.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Vous
+pouvez également faire un double-clic sur lâicône «Zoom» que
+vous avez utilisé pour revenir à l'affichage original.</FONT></FONT></FONT></P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/26.html b/Sankore-3.1/resources/startupHints/locales/fr/26.html
new file mode 100644
index 0000000..ddfada7
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/26.html
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Déplacer la page et la recentrer rapidement</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2"><FONT COLOR="#002939"><FONT FACE="Arial"><FONT SIZE=3><SPAN LANG="fr-FR">Si
+vous déplacez la page à l'aide de l'outil </SPAN></FONT></FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial Italic"><FONT SIZE=3><SPAN LANG="fr-FR">"Déplacer
+la page"</SPAN></FONT></FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3><SPAN LANG="fr-FR">
+</SPAN></FONT></FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial"><FONT SIZE=3><SPAN LANG="fr-FR">(symbole
+de la main dans la barre du stylet), vous pouvez recentrer la vue
+directement en double-cliquant sur la même icône.</SPAN></FONT></FONT></FONT></P>
+<P ALIGN=CENTER><IMG SRC="images/image0261.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=65 HEIGHT=67 BORDER=0></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/3.html b/Sankore-3.1/resources/startupHints/locales/fr/3.html
new file mode 100644
index 0000000..fc6a583
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/3.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Utiliser les nouvelles interactivités</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130428;21455100">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msolistparagraphcxsplast { margin-left: 0.5in; margin-bottom: 0.14in; font-family: "Cambria"; font-size: 12pt }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>De
+nouvelles activités viennent compléter le dossier des
+interactivités :</FONT></FONT></FONT></P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial Italic, sans-serif">Balance</FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">
+ permet de travailler les différentes équivalences de masse de
+ manière visuelle.</FONT></FONT></FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial Italic, sans-serif">Cadran</FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">
+ permet de travailler le nombre du jour avec les quatre opérations
+ de base.</FONT></FONT></FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial Italic, sans-serif">Calcul</FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">
+ génère automatiquement une série de calculs à résoudre.</FONT></FONT></FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial Italic, sans-serif">Train</FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">
+ permet de travailler les notions des nombres croissants et
+ décroissants.</FONT></FONT></FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial Italic, sans-serif">OpenStreetMap</FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">
+ est une alternative à l'application GoogleMap avec des ressources
+ ouvertes et sans publicité.</FONT></FONT></FONT></FONT></FONT></P>
+</UL>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Le
+design et les aides des interactivités ont été également
+améliorés.</FONT></FONT></FONT></P>
+<P CLASS="msolistparagraphcxsplast" ALIGN=CENTER><IMG SRC="images/image0033.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=517 HEIGHT=120 BORDER=0>
+</P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/4.html b/Sankore-3.1/resources/startupHints/locales/fr/4.html
new file mode 100644
index 0000000..33818f8
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/4.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Modifier les annotations et surlignages manuscrits</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130428;21525800">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msonormal { margin-bottom: 0.14in; font-family: "Cambria" }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Les
+traits manuscrits et les courbes réalisés avec le stylo ou le
+surligneur sont des objets au même titre que les images et les blocs
+de texte. </FONT></FONT></FONT>
+</P>
+<P ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2"><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3><SPAN LANG="fr-FR">Ils
+bénéficient donc des mêmes propriétés que les autres objets
+(déplacement, modification de la taille, rotation, symétrie,
+groupement, liens hypermédias, â¦).</SPAN></FONT></FONT></FONT></P>
+<P CLASS="msonormal" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="images/image0041.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=129 HEIGHT=126 BORDER=0>
+</P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/5.html b/Sankore-3.1/resources/startupHints/locales/fr/5.html
new file mode 100644
index 0000000..6c57c48
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/5.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Interagir avec les objets sans passer en mode "édition"</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msonormal { margin-bottom: 0.14in; font-family: "Cambria"; font-size: 12pt }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">L'outil
+</FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial Italic, sans-serif">Interagir
+avec des objets</FONT></FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">
+(doigt magique) permet de déplacer ces derniers sans afficher leur
+cadre gris. Privilégiez cet outil pour le travail des élèves ou
+les étudiants afin de ne pas surcharger l'interface.</FONT></FONT></FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Lâoutil
+permet également de jouer une série d'actions (lien hypertexte,
+lien sur une autre page, jouer un son) et dâagir au sein
+dâapplications, de widgets ou dâanimations flash.</FONT></FONT></FONT></P>
+<P CLASS="msonormal" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="images/image0051.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=286 HEIGHT=170 BORDER=0><IMG SRC="images/image0052.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=286 HEIGHT=125 BORDER=0></P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/6.html b/Sankore-3.1/resources/startupHints/locales/fr/6.html
new file mode 100644
index 0000000..aac20c4
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/6.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Déplacer les objets sur couches</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msonormal { margin-bottom: 0.14in; font-family: "Cambria"; font-size: 12pt }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Chaque
+objet dispose dans la partie inférieure de son rectangle dâédition
+de deux boutons.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Celui
+de droite (avec la flèche vers le bas) permet de faire descendre
+lâobjet dâun plan par rapport aux autres objets utilisés Ã
+lâécran.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Celui
+de gauche (avec la flèche vers le haut) permet de faire monter
+lâobjet dâun plan par rapport aux autres objets utilisés Ã
+lâécran.</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Un
+clic prolongé (avec une petite flèche blanche se déplaçant autour
+de lâicône) permet de placer lâobjet au tout dernier plan pour
+le premier et au tout premier plan pour le second.</FONT></FONT></FONT></P>
+<P CLASS="msonormal" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="images/image0061.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=284 HEIGHT=187 BORDER=0>
+</P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/7.html b/Sankore-3.1/resources/startupHints/locales/fr/7.html
new file mode 100644
index 0000000..0364041
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/7.html
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Utiliser la sélection multiple, grouper et dégrouper des objets</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="0;0">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msonormal { margin-bottom: 0.14in; font-family: "Cambria"; font-size: 12pt }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">Tous
+les objets </FONT></FONT><FONT FACE="Arial, sans-serif">(image,
+son,... )</FONT><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">
+ajoutés sur une page ainsi que les annotations manuscrites et les
+surlignages peuvent être sélectionnés avec le curseur et groupés
+pour ne faire qu'un seul objet en cliquant sur lâicône «Grouper»
+dans la barre des outils.</FONT></FONT></FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Ils
+peuvent également être dégroupés en cliquant à nouveau sur
+lâicône «Dégrouper».</FONT></FONT></FONT></P>
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>La
+sélection multiple est réalisée de deux façons : </FONT></FONT></FONT>
+</P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>le
+ curseur permet de sélectionner un ensemble dâobjets présents
+ dans le rectangle désigné si les objets sont contigus.</FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>il
+ est possible dâutiliser la commande Maj+Clic pour grouper des
+ objets non contigus.</FONT></FONT></FONT></P>
+</UL>
+<P CLASS="msonormal" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="images/image0071.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=406 HEIGHT=336 BORDER=0>
+</P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/8.html b/Sankore-3.1/resources/startupHints/locales/fr/8.html
new file mode 100644
index 0000000..14c0274
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/8.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Utiliser des polices cursives</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5074300">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msonormal { margin-bottom: 0.14in; font-family: "Cambria"; font-size: 12pt }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Des
+polices adaptées à lâutilisation avec des enfants apprenant Ã
+lire et à écrire sont disponibles.</FONT></FONT></FONT></P>
+<UL>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">polices
+ cursives,</FONT></FONT></FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">polices
+ cursives avec lignes et modèles,</FONT></FONT></FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">polices
+ script,</FONT></FONT></FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#000000"><FONT FACE="Helvetica, sans-serif"><FONT SIZE=3><FONT COLOR="#002939"><FONT FACE="Arial, sans-serif">polices
+ phonétiques,</FONT></FONT></FONT></FONT></FONT></P>
+ <LI><P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+ <FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>polices
+ pour les dyslexiques (Andika).</FONT></FONT></FONT></P>
+</UL>
+<P LANG="fr-FR" ALIGN=LEFT STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Celles
+ci sont disponibles en cliquant sur le «F» qui est disponible dans
+la barre dâicône du bloc de texte.</FONT></FONT></FONT></P>
+<P CLASS="msonormal" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="images/image0081.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=444 HEIGHT=177 BORDER=0>
+</P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/9.html b/Sankore-3.1/resources/startupHints/locales/fr/9.html
new file mode 100644
index 0000000..48ed462
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/9.html
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>Utiliser la symétrie pour les images</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;5082900">
+ <STYLE TYPE="text/css">
+ <!--
+ P { font-family: sans-serif; text-align: justify }
+ P.msonormal { margin-bottom: 0.14in; font-family: "Cambria"; font-size: 12pt }
+ -->
+ </STYLE>
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P LANG="fr-FR" ALIGN=JUSTIFY STYLE="margin-bottom: 0in; widows: 2; orphans: 2">
+<FONT COLOR="#002939"><FONT FACE="Arial, sans-serif"><FONT SIZE=3>Il
+est possible d'effectuer une symétrie axiale horizontale ou
+verticale d'une image en la glissant par les poignées vers le côté
+opposé de l'objet au-delà de la partie opposée.</FONT></FONT></FONT></P>
+<P CLASS="msonormal" ALIGN=CENTER STYLE="margin-bottom: 0in"><IMG SRC="images/image0091.png" NAME="graphics1" ALIGN=BOTTOM WIDTH=281 HEIGHT=202 BORDER=0>
+</P>
+</BODY>
+</HTML>
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/error.html b/Sankore-3.1/resources/startupHints/locales/fr/error.html
new file mode 100644
index 0000000..2142ca4
--- /dev/null
+++ b/Sankore-3.1/resources/startupHints/locales/fr/error.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
+ <TITLE>erreur</TITLE>
+ <META NAME="GENERATOR" CONTENT="OpenOffice.org 3.4.1 (Unix)">
+ <META NAME="CREATED" CONTENT="0;0">
+ <META NAME="CHANGED" CONTENT="20130429;6074300">
+</HEAD>
+<BODY LANG="en" DIR="LTR">
+<P STYLE="margin-bottom: 0in">Quelque chose s'est mal passé ...
+Vérifier l'existence de vos conseils dans le dossier
+/Resources/startupHints/ â¦</P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0021.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0021.png
new file mode 100644
index 0000000..4451150
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0021.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0022.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0022.png
new file mode 100644
index 0000000..28fb534
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0022.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0033.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0033.png
new file mode 100644
index 0000000..5c2326a
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0033.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0041.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0041.png
new file mode 100644
index 0000000..89fe348
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0041.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0051.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0051.png
new file mode 100644
index 0000000..c51965c
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0051.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0052.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0052.png
new file mode 100644
index 0000000..3edbe48
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0052.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0061.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0061.png
new file mode 100644
index 0000000..cb15401
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0061.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0071.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0071.png
new file mode 100644
index 0000000..1ca52b1
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0071.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0081.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0081.png
new file mode 100644
index 0000000..2ee7c20
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0081.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0091.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0091.png
new file mode 100644
index 0000000..deb3ef1
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0091.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0101.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0101.png
new file mode 100644
index 0000000..669943b
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0101.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0102.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0102.png
new file mode 100644
index 0000000..6ea6ac8
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0102.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0111.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0111.png
new file mode 100644
index 0000000..81a2712
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0111.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0121.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0121.png
new file mode 100644
index 0000000..6133123
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0121.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0122.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0122.png
new file mode 100644
index 0000000..bc1c8ef
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0122.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0131.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0131.png
new file mode 100644
index 0000000..a150433
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0131.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image01401.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image01401.png
new file mode 100644
index 0000000..bbca7e6
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image01401.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0141.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0141.png
new file mode 100644
index 0000000..065ce69
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0141.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0142.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0142.png
new file mode 100644
index 0000000..0756786
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0142.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0151.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0151.png
new file mode 100644
index 0000000..5b0c4b9
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0151.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0152.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0152.png
new file mode 100644
index 0000000..bd5cf70
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0152.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0161.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0161.png
new file mode 100644
index 0000000..33a00da
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0161.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0171.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0171.png
new file mode 100644
index 0000000..0051414
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0171.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0172.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0172.png
new file mode 100644
index 0000000..539caec
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0172.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0181.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0181.png
new file mode 100644
index 0000000..e0a26f7
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0181.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0191.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0191.png
new file mode 100644
index 0000000..cd9ca8b
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0191.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0201.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0201.png
new file mode 100644
index 0000000..ac16407
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0201.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0211.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0211.png
new file mode 100644
index 0000000..5571587
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0211.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0241.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0241.png
new file mode 100644
index 0000000..adac2fe
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0241.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0261.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0261.png
new file mode 100644
index 0000000..0c49b7a
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0261.png differ
diff --git a/Sankore-3.1/resources/startupHints/locales/fr/images/image0271.png b/Sankore-3.1/resources/startupHints/locales/fr/images/image0271.png
new file mode 100644
index 0000000..a404db6
Binary files /dev/null and b/Sankore-3.1/resources/startupHints/locales/fr/images/image0271.png differ
diff --git a/Sankore-3.1/resources/etc/Tutorial/tutorial_en/images/logo_open_sankore.png b/Sankore-3.1/resources/startupHints/locales/fr/images/opensankore.png
similarity index 100%
copy from Sankore-3.1/resources/etc/Tutorial/tutorial_en/images/logo_open_sankore.png
copy to Sankore-3.1/resources/startupHints/locales/fr/images/opensankore.png
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/0.gif b/Sankore-3.1/resources/startupHints/objects/0.gif
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/0.gif
copy to Sankore-3.1/resources/startupHints/objects/0.gif
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/1.gif b/Sankore-3.1/resources/startupHints/objects/1.gif
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/1.gif
copy to Sankore-3.1/resources/startupHints/objects/1.gif
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/2.gif b/Sankore-3.1/resources/startupHints/objects/2.gif
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/2.gif
copy to Sankore-3.1/resources/startupHints/objects/2.gif
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/3.gif b/Sankore-3.1/resources/startupHints/objects/3.gif
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/3.gif
copy to Sankore-3.1/resources/startupHints/objects/3.gif
diff --git a/Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/4.gif b/Sankore-3.1/resources/startupHints/objects/4.gif
similarity index 100%
copy from Sankore-3.1/resources/library/interactivities/Ass images.wgt/objects/4.gif
copy to Sankore-3.1/resources/startupHints/objects/4.gif
diff --git a/Sankore-3.1/resources/style.qss b/Sankore-3.1/resources/style.qss
index e53e0ee..29d4b66 100644
--- a/Sankore-3.1/resources/style.qss
+++ b/Sankore-3.1/resources/style.qss
@@ -106,6 +106,11 @@ QComboBox#DockPaletteWidgetComboBox::down-arrow
border-radius: 10px;
}
+QComboBox#CacheModeSelectionComboBox
+{
+ background:#DDDDDD;
+}
+
QPushButton#DockPaletteWidgetButton
{
background-color : #DDDDDD;
diff --git a/Sankore-3.1/resources/win/sankore.rc b/Sankore-3.1/resources/win/sankore.rc
index 6ed7fcc..8c22fde 100644
--- a/Sankore-3.1/resources/win/sankore.rc
+++ b/Sankore-3.1/resources/win/sankore.rc
@@ -39,7 +39,7 @@ BEGIN
VALUE "FileVersion", UBVERSION
- VALUE "LegalCopyright", "(c) Webdoc SA, 2009-2012. All rights reserved\000"
+ VALUE "LegalCopyright", "(C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)\000"
VALUE "OriginalFilename", "Sankore 3.1.exe\000"
diff --git a/Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.cpp b/Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.cpp
index f43bf53..73a81c5 100644
--- a/Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.cpp
+++ b/Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,1531 +18,1532 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include <QRegExp>
-#include <QSvgGenerator>
-#include <QSvgRenderer>
-#include <QPixmap>
-#include <QMap>
-
-#include "core/UBPersistenceManager.h"
-
-#include "document/UBDocumentProxy.h"
-
-#include "domain/UBItem.h"
-#include "domain/UBGraphicsPolygonItem.h"
-#include "domain/UBGraphicsStroke.h"
-#include "domain/UBGraphicsTextItem.h"
-#include "domain/UBGraphicsSvgItem.h"
-#include "domain/UBGraphicsPixmapItem.h"
-#include "domain/UBGraphicsMediaItem.h"
-#include "domain/UBGraphicsWidgetItem.h"
-#include "domain/UBGraphicsTextItem.h"
-#include "domain/UBGraphicsTextItemDelegate.h"
-#include "domain/UBGraphicsWidgetItem.h"
-#include "domain/UBGraphicsGroupContainerItem.h"
-
-#include "frameworks/UBFileSystemUtils.h"
-
-#include "UBCFFSubsetAdaptor.h"
-#include "UBMetadataDcSubsetAdaptor.h"
-#include "UBThumbnailAdaptor.h"
-#include "UBSvgSubsetAdaptor.h"
-
-#include "core/UBApplication.h"
-#include "QFile"
-
-#include "core/memcheck.h"
-//#include "qtlogger.h"
-
-//tag names definition. Use them everiwhere!
-static QString tElement = "element";
-static QString tGroup = "group";
-static QString tEllipse = "ellipse";
-static QString tIwb = "iwb";
-static QString tMeta = "meta";
-static QString tPage = "page";
-static QString tPageset = "pageset";
-static QString tG = "g";
-static QString tSwitch = "switch";
-static QString tPolygon = "polygon";
-static QString tPolyline = "polyline";
-static QString tRect = "rect";
-static QString tSvg = "svg";
-static QString tText = "text";
-static QString tTextarea = "textarea";
-static QString tTspan = "tspan";
-static QString tBreak = "tbreak";
-static QString tImage = "image";
-static QString tFlash = "flash";
-static QString tAudio = "a";
-static QString tVideo = "video";
-
-//attribute names definition
-static QString aFill = "fill";
-static QString aFillopacity = "fill-opacity";
-static QString aX = "x";
-static QString aY = "y";
-static QString aWidth = "width";
-static QString aHeight = "height";
-static QString aStroke = "stroke";
-static QString aStrokewidth = "stroke-width";
-static QString aCx = "cx";
-static QString aCy = "cy";
-static QString aRx = "rx";
-static QString aRy = "ry";
-static QString aTransform = "transform";
-static QString aViewbox = "viewbox";
-static QString aFontSize = "font-size";
-static QString aFontfamily = "font-family";
-static QString aFontstretch = "font-stretch";
-static QString aFontstyle = "font-style";
-static QString aFontweight = "font-weight";
-static QString aTextalign = "text-align";
-static QString aPoints = "points";
-static QString svgNS = "http://www.w3.org/2000/svg";
-static QString iwbNS = "http://www.imsglobal.org/xsd/iwb_v1p0";
-static QString aId = "id";
-static QString aRef = "ref";
-static QString aHref = "href";
-static QString aBackground = "background";
-static QString aLocked = "locked";
-static QString aEditable = "editable";
-
-//attributes part names
-static QString apRotate = "rotate";
-static QString apTranslate = "translate";
-
-
-UBCFFSubsetAdaptor::UBCFFSubsetAdaptor()
-{}
-
-bool UBCFFSubsetAdaptor::ConvertCFFFileToUbz(QString &cffSourceFile, UBDocumentProxy* pDocument)
-{
- //TODO
- // fill document proxy metadata
- // create persistance manager to save data using proxy
- // create UBCFFSubsetReader and make it parse cffSourceFolder
- QFile file(cffSourceFile);
-
- if (!file.open(QIODevice::ReadOnly))
- {
- qWarning() << "Cannot open file " << cffSourceFile << " for reading ...";
- return false;
- }
-
- UBCFFSubsetReader cffReader(pDocument, &file);
- bool result = cffReader.parse();
- file.close();
-
- return result;
-}
-UBCFFSubsetAdaptor::UBCFFSubsetReader::UBCFFSubsetReader(UBDocumentProxy *proxy, QFile *content)
- : mProxy(proxy)
- , mGSectionContainer(NULL)
-{
- int errorLine, errorColumn;
- QString errorStr;
- if(!mDOMdoc.setContent(content, true, &errorStr, &errorLine, &errorColumn)){
- qWarning() << "Error:Parseerroratline" << errorLine << ","
- << "column" << errorColumn << ":" << errorStr;
- } else {
- qDebug() << "well parsed to DOM";
- pwdContent = QFileInfo(content->fileName()).dir().absolutePath();
- }
- qDebug() << "tmp path is" << pwdContent;
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parse()
-{
- UBMetadataDcSubsetAdaptor::persist(mProxy);
-
- mIndent = "";
- if (!getTempFileName() || !createTempFlashPath())
- return false;
-
- if (mDOMdoc.isNull())
- return false;
-
- bool result = parseDoc();
- if (result)
- result = mProxy->pageCount() != 0;
-
- if (QFile::exists(mTempFilePath))
- QFile::remove(mTempFilePath);
-
-// if (mTmpFlashDir.exists())
-// UBFileSystemUtils::deleteDir(mTmpFlashDir.path());
-
- return result;
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseGSection(const QDomElement &element)
-{
- mGSectionContainer = new UBGraphicsGroupContainerItem();
-
- QDomElement currentSvgElement = element.firstChildElement();
- while (!currentSvgElement.isNull()) {
- parseSvgElement(currentSvgElement);
- currentSvgElement = currentSvgElement.nextSiblingElement();
- }
-
- if (mGSectionContainer->childItems().count())
- {
- mCurrentScene->addGroup(mGSectionContainer);
- }
- else
- {
- delete mGSectionContainer;
- }
- mGSectionContainer = NULL;
-
- return true;
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgSwitchSection(const QDomElement &element)
-{
-
- QDomElement currentSvgElement = element.firstChildElement();
- while (!currentSvgElement.isNull()) {
- if (parseSvgElement(currentSvgElement))
- return true;
- }
-
- return false;
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgRect(const QDomElement &element)
-{
- qreal x1 = element.attribute(aX).toDouble();
- qreal y1 = element.attribute(aY).toDouble();
- //rect dimensions
- qreal width = element.attribute(aWidth).toDouble();
- qreal height = element.attribute(aHeight).toDouble();
-
- QString textFillColor = element.attribute(aFill);
- QString textStrokeColor = element.attribute(aStroke);
- QString textStrokeWidth = element.attribute(aStrokewidth);
-
- QColor fillColor = !textFillColor.isNull() ? colorFromString(textFillColor) : QColor();
- QColor strokeColor = !textStrokeColor.isNull() ? colorFromString(textStrokeColor) : QColor();
- int strokeWidth = textStrokeWidth.toInt();
-
- x1 -= strokeWidth/2;
- y1 -= strokeWidth/2;
- width += strokeWidth;
- height += strokeWidth;
-
- //init svg generator with temp file
- QSvgGenerator *generator = createSvgGenerator(width, height);
-
- //init painter to paint to svg
- QPainter painter;
-
- painter.begin(generator);
-
- //fill rect
- if (fillColor.isValid()) {
- painter.setBrush(QBrush(fillColor));
- painter.fillRect(0, 0, width, height, fillColor);
- }
- QPen pen;
- if (strokeColor.isValid()) {
- pen.setColor(strokeColor);
- }
- if (strokeWidth)
- pen.setWidth(strokeWidth);
- painter.setPen(pen);
- painter.drawRect(0, 0, width, height);
-
- painter.end();
-
- UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
-
- QString uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
- svgItem->setUuid(QUuid(uuid));
-
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- svgItem->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, svgItem);
- }
-
- repositionSvgItem(svgItem, width, height, x1, y1, transform);
- hashSceneItem(element, svgItem);
-
- if (mGSectionContainer)
- {
- addItemToGSection(svgItem);
- }
-
- delete generator;
-
- return true;
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgEllipse(const QDomElement &element)
-{
- //ellipse horisontal and vertical radius
- qreal rx = element.attribute(aRx).toDouble();
- qreal ry = element.attribute(aRy).toDouble();
- QSvgGenerator *generator = createSvgGenerator(rx * 2, ry * 2);
-
- //fill and stroke color
- QColor fillColor = colorFromString(element.attribute(aFill));
- QColor strokeColor = colorFromString(element.attribute(aStroke));
- int strokeWidth = element.attribute(aStrokewidth).toInt();
-
- //ellipse center coordinates
- qreal cx = element.attribute(aCx).toDouble();
- qreal cy = element.attribute(aCy).toDouble();
-
- //init painter to paint to svg
- QPainter painter;
- painter.begin(generator);
-
- QPen pen(strokeColor);
- pen.setWidth(strokeWidth);
- painter.setPen(pen);
- painter.setBrush(QBrush(fillColor));
-
- painter.drawEllipse(0, 0, rx * 2, ry * 2);
-
- painter.end();
-
- UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
-
- QString uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
- svgItem->setUuid(QUuid(uuid));
-
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- svgItem->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, svgItem);
- }
-
-
- repositionSvgItem(svgItem, rx * 2, ry * 2, cx - 2*rx, cy+ry, transform);
- hashSceneItem(element, svgItem);
-
- if (mGSectionContainer)
- {
- addItemToGSection(svgItem);
- }
-
- delete generator;
-
- return true;
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolygon(const QDomElement &element)
-{
- QString svgPoints = element.attribute(aPoints);
- QPolygonF polygon;
-
- if (!svgPoints.isNull()) {
- QStringList ts = svgPoints.split(QLatin1Char(' '), QString::SkipEmptyParts);
-
- foreach(const QString sPoint, ts) {
- QStringList sCoord = sPoint.split(QLatin1Char(','), QString::SkipEmptyParts);
- if (sCoord.size() == 2) {
- QPointF point;
- point.setX(sCoord.at(0).toFloat());
- point.setY(sCoord.at(1).toFloat());
- polygon << point;
- }
- else if (sCoord.size() == 4){
- //This is the case on system were the "," is used to seperate decimal
- QPointF point;
- QString x = sCoord.at(0) + "." + sCoord.at(1);
- QString y = sCoord.at(2) + "." + sCoord.at(3);
- point.setX(x.toFloat());
- point.setY(y.toFloat());
- polygon << point;
- }
- else {
- qWarning() << "cannot make sense of a 'point' value" << sCoord;
- }
- }
- }
-
- //bounding rect lef top corner coordinates
- qreal x1 = polygon.boundingRect().topLeft().x();
- qreal y1 = polygon.boundingRect().topLeft().y();
- //bounding rect dimensions
- qreal width = polygon.boundingRect().width();
- qreal height = polygon.boundingRect().height();
-
- QString strokeColorText = element.attribute(aStroke);
- QString fillColorText = element.attribute(aFill);
- QString strokeWidthText = element.attribute(aStrokewidth);
-
- QColor strokeColor = !strokeColorText.isEmpty() ? colorFromString(strokeColorText) : QColor();
- QColor fillColor = !fillColorText.isEmpty() ? colorFromString(fillColorText) : QColor();
- int strokeWidth = strokeWidthText.toDouble();
-
- QPen pen;
- pen.setColor(strokeColor);
- pen.setWidth(strokeWidth);
-
- QBrush brush;
- brush.setColor(fillColor);
- brush.setStyle(Qt::SolidPattern);
-
-
- QUuid itemUuid(element.attribute(aId).right(QUuid().toString().length()));
- QUuid itemGroupUuid(element.attribute(aId).left(QUuid().toString().length()-1));
- if (!itemUuid.isNull() && (itemGroupUuid!=itemUuid)) // reimported from UBZ
- {
- UBGraphicsPolygonItem *graphicsPolygon = mCurrentScene->polygonToPolygonItem(polygon);
-
- graphicsPolygon->setBrush(brush);
-
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- graphicsPolygon->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, graphicsPolygon);
- }
- mCurrentScene->addItem(graphicsPolygon);
-
- graphicsPolygon->setUuid(itemUuid);
- mRefToUuidMap.insert(element.attribute(aId), itemUuid);
-
- }
- else // single CFF
- {
- QSvgGenerator *generator = createSvgGenerator(width + pen.width(), height + pen.width());
- QPainter painter;
-
- painter.begin(generator); //drawing to svg tmp file
-
- painter.translate(pen.widthF() / 2 - x1, pen.widthF() / 2 - y1);
- painter.setBrush(brush);
- painter.setPen(pen);
- painter.drawPolygon(polygon);
-
- painter.end();
-
- //add resulting svg file to scene
- UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- QUuid uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
- svgItem->setUuid(uuid);
-
- svgItem->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, svgItem);
- }
- 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;
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &element)
-{
- QString svgPoints = element.attribute(aPoints);
- QPolygonF polygon;
-
- if (!svgPoints.isNull()) {
- QStringList ts = svgPoints.split(QLatin1Char(' '),
- QString::SkipEmptyParts);
-
- foreach(const QString sPoint, ts) {
- QStringList sCoord = sPoint.split(QLatin1Char(','), QString::SkipEmptyParts);
- if (sCoord.size() == 2) {
- QPointF point;
- point.setX(sCoord.at(0).toFloat());
- point.setY(sCoord.at(1).toFloat());
- polygon << point;
- }
- else if (sCoord.size() == 4){
- //This is the case on system were the "," is used to seperate decimal
- QPointF point;
- QString x = sCoord.at(0) + "." + sCoord.at(1);
- QString y = sCoord.at(2) + "." + sCoord.at(3);
- point.setX(x.toFloat());
- point.setY(y.toFloat());
- polygon << point;
- }
- else {
- qWarning() << "cannot make sense of a 'point' value" << sCoord;
- }
- }
- }
-
- //bounding rect lef top corner coordinates
- qreal x1 = polygon.boundingRect().topLeft().x();
- qreal y1 = polygon.boundingRect().topLeft().y();
-
- //bounding rect dimensions
- qreal width = polygon.boundingRect().width();
- qreal height = polygon.boundingRect().height();
-
- QString strokeColorText = element.attribute(aStroke);
- QString strokeWidthText = element.attribute(aStrokewidth);
-
- QColor strokeColor = !strokeColorText.isEmpty() ? colorFromString(strokeColorText) : QColor();
- int strokeWidth = strokeWidthText.toDouble();
-
- width += strokeWidth;
- height += strokeWidth;
-
- QPen pen;
- pen.setColor(strokeColor);
- pen.setWidth(strokeWidth);
-
- QBrush brush;
- brush.setColor(strokeColor);
- brush.setStyle(Qt::SolidPattern);
-
- QUuid itemUuid(element.attribute(aId).right(QUuid().toString().length()));
- QUuid itemGroupUuid(element.attribute(aId).left(QUuid().toString().length()-1));
- if (!itemUuid.isNull() && (itemGroupUuid!=itemUuid)) // reimported from UBZ
- {
- UBGraphicsPolygonItem *graphicsPolygon = new UBGraphicsPolygonItem(polygon);
-
- UBGraphicsStroke *stroke = new UBGraphicsStroke();
- graphicsPolygon->setStroke(stroke);
-
- graphicsPolygon->setBrush(brush);
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- graphicsPolygon->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, graphicsPolygon);
- }
- mCurrentScene->addItem(graphicsPolygon);
-
- graphicsPolygon->setUuid(itemUuid);
- mRefToUuidMap.insert(element.attribute(aId), itemUuid);
-
- }
- else // simple CFF
- {
- QSvgGenerator *generator = createSvgGenerator(width + pen.width(), height + pen.width());
- QPainter painter;
-
- painter.begin(generator); //drawing to svg tmp file
-
- painter.translate(pen.widthF() / 2 - x1, pen.widthF() / 2 - y1);
- painter.setBrush(brush);
- painter.setPen(pen);
- painter.drawPolygon(polygon);
-
- painter.end();
-
- //add resulting svg file to scene
- UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
-
- QString uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
- svgItem->setUuid(QUuid(uuid));
-
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- svgItem->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, svgItem);
- }
- 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;
-}
-void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTextAttributes(const QDomElement &element,
- qreal &fontSize, QColor &fontColor, QString &fontFamily,
- QString &fontStretch, bool &italic, int &fontWeight,
- int &textAlign, QTransform &fontTransform)
-{
- //consider inch has 72 liens
- //since svg font size is given in pixels, divide it by pixels per line
- QString fontSz = element.attribute(aFontSize);
- if (!fontSz.isNull()) fontSize = fontSz.toDouble() * 72 / QApplication::desktop()->physicalDpiY();
-
- QString fontColorText = element.attribute(aFill);
- if (!fontColorText.isNull()) fontColor = colorFromString(fontColorText);
-
- QString fontFamilyText = element.attribute(aFontfamily);
- if (!fontFamilyText.isNull()) fontFamily = fontFamilyText;
-
- QString fontStretchText = element.attribute(aFontstretch);
- if (!fontStretchText.isNull()) fontStretch = fontStretchText;
-
- if (!element.attribute(aFontstyle).isNull())
- italic = (element.attribute(aFontstyle) == "italic");
-
- QString weight = element.attribute(aFontweight);
- if (!weight.isNull()) {
- if (weight == "normal") fontWeight = QFont::Normal;
- else if (weight == "light") fontWeight = QFont::Light;
- else if (weight == "demibold") fontWeight = QFont::DemiBold;
- else if (weight == "bold") fontWeight = QFont::Bold;
- else if (weight == "black") fontWeight = QFont::Black;
- }
- QString align = element.attribute(aTextalign);
- if (!align.isNull()) {
- if (align == "middle" || align == "center") textAlign = Qt::AlignHCenter;
- else if (align == "start") textAlign = Qt::AlignLeft;
- else if (align == "end") textAlign = Qt::AlignRight;
- }
-
- if (!element.attribute(aTransform).isNull())
- fontTransform = transformFromString(element.attribute(aTransform));
-}
-void UBCFFSubsetAdaptor::UBCFFSubsetReader::readTextBlockAttr(const QDomElement &element, QTextBlockFormat &format)
-{
- QString fontStretchText = element.attribute(aFontstretch);
- if (!fontStretchText.isNull()) format.setAlignment(Qt::AlignJustify);
-
- QString align = element.attribute(aTextalign);
- if (!align.isNull()) {
- if (align == "middle" || align == "center") format.setAlignment(Qt::AlignHCenter);
- else if (align == "start") format.setAlignment(Qt::AlignLeft);
- else if (align == "end") format.setAlignment(Qt::AlignRight);
- else if (align == "justify") format.setAlignment(Qt::AlignJustify);
- }
-}
-void UBCFFSubsetAdaptor::UBCFFSubsetReader::readTextCharAttr(const QDomElement &element, QTextCharFormat &format)
-{
- QString fontSz = element.attribute(aFontSize);
- if (!fontSz.isNull()) {
- qreal fontSize = fontSz.remove("pt").toDouble();
- format.setFontPointSize(fontSize);
- }
- QString fontColorText = element.attribute(aFill);
- if (!fontColorText.isNull()) {
- QColor fontColor = colorFromString(fontColorText);
- if (fontColor.isValid()) format.setForeground(fontColor);
- }
- QString fontFamilyText = element.attribute(aFontfamily);
- if (!fontFamilyText.isNull()) {
- format.setFontFamily(fontFamilyText);
- }
- if (!element.attribute(aFontstyle).isNull()) {
- bool italic = (element.attribute(aFontstyle) == "italic");
- format.setFontItalic(italic);
- }
- QString weight = element.attribute(aFontweight);
- if (!weight.isNull()) {
- if (weight == "normal") format.setFontWeight(QFont::Normal);
- else if (weight == "light") format.setFontWeight(QFont::Light);
- else if (weight == "demibold") format.setFontWeight(QFont::DemiBold);
- else if (weight == "bold") format.setFontWeight(QFont::Bold);
- else if (weight == "black") format.setFontWeight(QFont::Black);
- }
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgText(const QDomElement &element)
-{
- qreal x = element.attribute(aX).toDouble();
- qreal y = element.attribute(aY).toDouble();
- qreal width = element.attribute(aWidth).toDouble();
- qreal height = element.attribute(aHeight).toDouble();
-
-
- qreal fontSize = 12;
- QColor fontColor(qApp->palette().foreground().color());
- QString fontFamily = "Arial";
- QString fontStretch = "normal";
- bool italic = false;
- int fontWeight = QFont::Normal;
- int textAlign = Qt::AlignLeft;
- QTransform fontTransform;
- parseTextAttributes(element, fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
-
- QFont startFont(fontFamily, fontSize, fontWeight, italic);
- height = QFontMetrics(startFont).height();
- width = QFontMetrics(startFont).width(element.text()) + 5;
-
- QSvgGenerator *generator = createSvgGenerator(width, height);
- QPainter painter;
- painter.begin(generator);
- painter.setFont(startFont);
-
- qreal curY = 0.0;
- qreal curX = 0.0;
- qreal linespacing = QFontMetricsF(painter.font()).leading();
-
-// remember if text area has transform
-// QString transformString;
- QTransform transform = fontTransform;
-
- QRectF lastDrawnTextBoundingRect;
- //parse text area tags
-
- //recursive call any tspan in text svg element
- parseTSpan(element, painter
- , curX, curY, width, height, linespacing, lastDrawnTextBoundingRect
- , fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
-
- painter.end();
-
- //add resulting svg file to scene
- UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
-
- QString uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
- svgItem->setUuid(QUuid(uuid));
-
- svgItem->resetTransform();
- repositionSvgItem(svgItem, width, height, x + transform.m31(), y + transform.m32(), transform);
- hashSceneItem(element, svgItem);
-
- if (mGSectionContainer)
- {
- addItemToGSection(svgItem);
- }
-
- delete generator;
- return true;
-}
-
-void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTSpan(const QDomElement &parent, QPainter &painter
- , qreal &curX, qreal &curY, qreal &width, qreal &height, qreal &linespacing, QRectF &lastDrawnTextBoundingRect
- , qreal &fontSize, QColor &fontColor, QString &fontFamily, QString &fontStretch, bool &italic
- , int &fontWeight, int &textAlign, QTransform &fontTransform)
-{
- QDomNode curNode = parent.firstChild();
- while (!curNode.isNull()) {
- if (curNode.toElement().tagName() == tTspan) {
- QDomElement curTSpan = curNode.toElement();
- parseTextAttributes(curTSpan, fontSize, fontColor, fontFamily, fontStretch, italic
- , fontWeight, textAlign, fontTransform);
- painter.setFont(QFont(fontFamily, fontSize, fontWeight, italic));
- painter.setPen(fontColor);
- linespacing = QFontMetricsF(painter.font()).leading();
- parseTSpan(curTSpan, painter
- , curX, curY, width, height, linespacing, lastDrawnTextBoundingRect
- , fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
- } else if (curNode.nodeType() == QDomNode::CharacterDataNode
- || curNode.nodeType() == QDomNode::CDATASectionNode
- || curNode.nodeType() == QDomNode::TextNode) {
-
- QDomCharacterData textData = curNode.toCharacterData();
- QString text = textData.data().trimmed();
-// width = painter.fontMetrics().width(text);
- //get bounding rect to obtain desired text height
- lastDrawnTextBoundingRect = painter.boundingRect(QRectF(curX, curY, width, height - curY), textAlign|Qt::TextWordWrap, text);
- painter.drawText(curX, curY, width, lastDrawnTextBoundingRect.height(), textAlign|Qt::TextWordWrap, text);
- curX += lastDrawnTextBoundingRect.x() + lastDrawnTextBoundingRect.width();
- } else if (curNode.nodeType() == QDomNode::ElementNode
- && curNode.toElement().tagName() == tBreak) {
-
- curY += lastDrawnTextBoundingRect.height() + linespacing;
- curX = 0.0;
- lastDrawnTextBoundingRect = QRectF(0,0,0,0);
- }
- curNode = curNode.nextSibling();
- }
-}
-void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTSpan(const QDomElement &element, QTextCursor &cursor
- , QTextBlockFormat &blockFormat, QTextCharFormat &charFormat)
-{
- QDomNode curNode = element.firstChild();
- while (!curNode.isNull()) {
- if (curNode.toElement().tagName() == tTspan) {
- QDomElement curTspan = curNode.toElement();
- readTextBlockAttr(curTspan, blockFormat);
- readTextCharAttr(curTspan, charFormat);
- cursor.setBlockFormat(blockFormat);
- cursor.setCharFormat(charFormat);
- parseTSpan(curTspan, cursor, blockFormat, charFormat);
-
- } else if (curNode.nodeType() == QDomNode::CharacterDataNode
- || curNode.nodeType() == QDomNode::CDATASectionNode
- || curNode.nodeType() == QDomNode::TextNode) {
-
- QDomCharacterData textData = curNode.toCharacterData();
- QString text = textData.data().trimmed();
- cursor.insertText(text, charFormat);
-
- } else if (curNode.nodeType() == QDomNode::ElementNode
- && curNode.toElement().tagName() == tBreak) {
- cursor.insertBlock();
- }
- curNode = curNode.nextSibling();
- }
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgTextarea(const QDomElement &element)
-{
- qreal x = element.attribute(aX).toDouble();
- qreal y = element.attribute(aY).toDouble();
- qreal width = element.attribute(aWidth).toDouble();
- qreal height = element.attribute(aHeight).toDouble();
-
- QTextBlockFormat blockFormat;
- blockFormat.setAlignment(Qt::AlignLeft);
-
- QTextCharFormat textFormat;
- // default values
- textFormat.setFontPointSize(12);
- textFormat.setForeground(qApp->palette().foreground().color());
- textFormat.setFontFamily("Arial");
- textFormat.setFontItalic(false);
- textFormat.setFontWeight(QFont::Normal);
-
- // readed values
- readTextBlockAttr(element, blockFormat);
- readTextCharAttr(element, textFormat);
-
- QTextDocument doc;
- doc.setPlainText("");
- QTextCursor tCursor(&doc);
- tCursor.setBlockFormat(blockFormat);
- tCursor.setCharFormat(textFormat);
-
- parseTSpan(element, tCursor, blockFormat, textFormat);
-
- UBGraphicsTextItem *svgItem = mCurrentScene->addTextHtml(doc.toHtml());
- svgItem->resize(width, height);
-
- QString uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
- svgItem->setUuid(QUuid(uuid));
-
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- svgItem->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, svgItem);
- }
-
- //by default all the textAreas are not editable
- UBGraphicsTextItemDelegate *curDelegate = dynamic_cast<UBGraphicsTextItemDelegate*>(svgItem->Delegate());
- if (curDelegate) {
- curDelegate->setEditable(false);
- }
-
- 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)
-{
- qreal x = element.attribute(aX).toDouble();
- qreal y = element.attribute(aY).toDouble();
- qreal width = element.attribute(aWidth).toDouble();
- qreal height = element.attribute(aHeight).toDouble();
-
- QString itemRefPath = element.attribute(aHref);
-
- QPixmap pix;
- if (!itemRefPath.isNull()) {
- QString imagePath = pwdContent + "/" + itemRefPath;
- if (!QFile::exists(imagePath)) {
- qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
- return false;
- } else {
-// qDebug() << "size of file" << itemRefPath << QFileInfo(itemRefPath).size();
- }
- pix.load(imagePath);
- if (pix.isNull()) {
- qDebug() << "can't create pixmap for file" << pwdContent + "/" + itemRefPath << "maybe format does not supported";
- }
- }
-
- UBGraphicsPixmapItem *pixItem = mCurrentScene->addPixmap(pix, NULL);
-
- QString uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
- pixItem->setUuid(QUuid(uuid));
-
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- pixItem->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, pixItem);
- }
- 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)
-{
- QString itemRefPath = element.attribute(aHref);
-
- qreal x = element.attribute(aX).toDouble();
- qreal y = element.attribute(aY).toDouble();
- qreal width = element.attribute(aWidth).toDouble();
- qreal height = element.attribute(aHeight).toDouble();
-
- QUrl urlPath;
- QString flashPath;
- if (!itemRefPath.isNull()) {
- flashPath = pwdContent + "/" + itemRefPath;
- if (!QFile::exists(flashPath)) {
- qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
- return false;
- }
- urlPath = QUrl::fromLocalFile(flashPath);
- }
- QDir tmpFlashDir(mTmpFlashDir);
- if (!tmpFlashDir.exists()) {
- qDebug() << "Can't create temporary directory to put flash";
- return false;
- }
-
- QString flashUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapperInDir(flashPath, tmpFlashDir, "application/x-shockwave-flash"
- ,QSize(mCurrentSceneRect.width(), mCurrentSceneRect.height()));
- UBGraphicsWidgetItem *flashItem = mCurrentScene->addW3CWidget(QUrl::fromLocalFile(flashUrl));
- flashItem->setSourceUrl(urlPath);
-
- QString uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
- flashItem->setUuid(QUuid(uuid));
-
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- flashItem->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, flashItem);
- }
- repositionSvgItem(flashItem, width, height, x + transform.m31(), y + transform.m32(), transform);
- hashSceneItem(element, flashItem);
-
- if (mGSectionContainer)
- {
- addItemToGSection(flashItem);
- }
-
- return true;
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgAudio(const QDomElement &element)
-{
- QDomElement parentOfAudio = element.firstChild().toElement();
-
- qreal x = parentOfAudio.attribute(aX).toDouble();
- qreal y = parentOfAudio.attribute(aY).toDouble();
-
- QString itemRefPath = element.attribute(aHref);
-
- QUrl concreteUrl;
- if (!itemRefPath.isNull()) {
- QString audioPath = pwdContent + "/" + itemRefPath;
- if (!QFile::exists(audioPath)) {
- qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
- return false;
- }
- concreteUrl = QUrl::fromLocalFile(audioPath);
- }
-
- QString uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
-
- QString destFile;
- bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(
- mCurrentScene->document(),
- concreteUrl.toLocalFile(),
- UBPersistenceManager::audioDirectory,
- QUuid(uuid),
- destFile);
- if (!b)
- {
- return false;
- }
- concreteUrl = QUrl::fromLocalFile(destFile);
-
- UBGraphicsMediaItem *audioItem = mCurrentScene->addAudio(concreteUrl, false);
-
- QTransform transform;
- QString textTransform = parentOfAudio.attribute(aTransform);
-
- audioItem->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, audioItem);
- }
- 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)
-{
- QString itemRefPath = element.attribute(aHref);
- if (itemRefPath.startsWith(tFlash + "/") && itemRefPath.endsWith(".swf")) {
- if (parseSvgFlash(element)) return true;
- else return false;
- }
- qreal x = element.attribute(aX).toDouble();
- qreal y = element.attribute(aY).toDouble();
-
- QUrl concreteUrl;
- if (!itemRefPath.isNull()) {
- QString videoPath = pwdContent + "/" + itemRefPath;
- if (!QFile::exists(videoPath)) {
- qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
- return false;
- }
- concreteUrl = QUrl::fromLocalFile(videoPath);
- }
-
- QString uuid = QUuid::createUuid().toString();
- mRefToUuidMap.insert(element.attribute(aId), uuid);
-
- QString destFile;
- bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(
- mCurrentScene->document(),
- concreteUrl.toLocalFile(),
- UBPersistenceManager::videoDirectory,
- QUuid(uuid),
- destFile);
- if (!b)
- {
- return false;
- }
- concreteUrl = QUrl::fromLocalFile(destFile);
-
- UBGraphicsMediaItem *videoItem = mCurrentScene->addVideo(concreteUrl, false);
-
- QTransform transform;
- QString textTransform = element.attribute(aTransform);
-
- videoItem->resetTransform();
- if (!textTransform.isNull()) {
- transform = transformFromString(textTransform, videoItem);
- }
- repositionSvgItem(videoItem, videoItem->boundingRect().width(), videoItem->boundingRect().height(), x + transform.m31(), y + transform.m32(), transform);
- hashSceneItem(element, videoItem);
-
- if (mGSectionContainer)
- {
- addItemToGSection(videoItem);
- }
-
- return true;
-}
-
-void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgSectionAttr(const QDomElement &svgSection)
-{
- getViewBoxDimenstions(svgSection.attribute(aViewbox));
- mSize = QSize(svgSection.attribute(aWidth).toInt(),
- 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
- QString key = element.attribute(aId);
- if (!key.isNull()) {
- persistedItems.insert(key, item);
- }
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgElement(const QDomElement &parent)
-{
- QString tagName = parent.tagName();
- if (parent.namespaceURI() != svgNS) {
- qWarning() << "Incorrect namespace, error at content file, line number" << parent.lineNumber();
- //return false;
- }
-
- if (tagName == tG && !parseGSection(parent)) return false;
- else if (tagName == tSwitch && !parseSvgSwitchSection(parent)) return false;
- else if (tagName == tRect && !parseSvgRect(parent)) return false;
- else if (tagName == tEllipse && !parseSvgEllipse(parent)) return false;
- else if (tagName == tPolygon && !parseSvgPolygon(parent)) return false;
- else if (tagName == tPolyline && !parseSvgPolyline(parent)) return false;
- else if (tagName == tText && !parseSvgText(parent)) return false;
- else if (tagName == tTextarea && !parseSvgTextarea(parent)) return false;
- else if (tagName == tImage && !parseSvgImage(parent)) return false;
- else if (tagName == tFlash && !parseSvgFlash(parent)) return false;
- else if (tagName == tAudio && !parseSvgAudio(parent)) return false;
- else if (tagName == tVideo && !parseSvgVideo(parent)) return false;
-
- return true;
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPage(const QDomElement &parent)
-{
- createNewScene();
- QDomElement currentSvgElement = parent.firstChildElement();
- while (!currentSvgElement.isNull()) {
- if (!parseSvgElement(currentSvgElement))
- return false;
-
- currentSvgElement = currentSvgElement.nextSiblingElement();
- }
-
- return true;
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPageset(const QDomElement &parent)
-{
- QDomElement currentPage = parent.firstChildElement(tPage);
- while (!currentPage.isNull()) {
- if (!parseSvgPage(currentPage))
- return false;
- currentPage = currentPage.nextSiblingElement(tPage);
- }
- return true;
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseIwbMeta(const QDomElement &element)
-{
- if (element.namespaceURI() != iwbNS) {
- qWarning() << "incorrect meta namespace, incorrect document";
- //return false;
- }
-
- return true;
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvg(const QDomElement &svgSection)
-{
- if (svgSection.namespaceURI() != svgNS) {
- qWarning() << "incorrect svg namespace, incorrect document";
- // return false;
- }
-
- parseSvgSectionAttr(svgSection);
- QDomElement currentSvg = svgSection.firstChildElement();
-
- if (currentSvg.tagName() != tPageset) {
- parseSvgPage(svgSection);
- } else if (currentSvg.tagName() == tPageset){
- parseSvgPageset(currentSvg);
- }
-
- return true;
-}
-
-UBGraphicsGroupContainerItem *UBCFFSubsetAdaptor::UBCFFSubsetReader::parseIwbGroup(QDomElement &parent)
-{
- //TODO. Create groups from elements parsed by parseIwbElement() function
- if (parent.namespaceURI() != iwbNS) {
- qWarning() << "incorrect iwb group namespace, incorrect document";
- // return false;
- }
-
- UBGraphicsGroupContainerItem *group = new UBGraphicsGroupContainerItem();
- QMultiMap<QString, UBGraphicsPolygonItem *> strokesGroupsContainer;
- QList<QGraphicsItem *> groupContainer;
- QString currentStrokeIdentifier;
-
- QDomElement currentStrokeElement = parent.firstChildElement();
- while (!currentStrokeElement.isNull())
- {
- if (tGroup == currentStrokeElement.tagName())
- group->addToGroup(parseIwbGroup(currentStrokeElement));
- else
- {
-
- QString ref = currentStrokeElement.attribute(aRef);
- QString uuid = mRefToUuidMap[ref];
- if (!uuid.isEmpty())
- {
- if (ref.size() > QUuid().toString().length()) // create stroke group
- {
- currentStrokeIdentifier = ref.left(QUuid().toString().length()-1);
- UBGraphicsPolygonItem *strokeByUuid = qgraphicsitem_cast<UBGraphicsPolygonItem *>(mCurrentScene->itemForUuid(QUuid(ref.right(QUuid().toString().length()))));
-
- if (strokeByUuid)
- strokesGroupsContainer.insert(currentStrokeIdentifier, strokeByUuid);
- }
- else // single elements in group
- groupContainer.append(mCurrentScene->itemForUuid(QUuid(uuid)));
- }
- }
- currentStrokeElement = currentStrokeElement.nextSiblingElement();
- }
-
-
-
- foreach (QString key, strokesGroupsContainer.keys().toSet())
- {
- UBGraphicsStrokesGroup* pStrokesGroup = new UBGraphicsStrokesGroup();
- UBGraphicsStroke *currentStroke = new UBGraphicsStroke();
- foreach(UBGraphicsPolygonItem* poly, strokesGroupsContainer.values(key))
- {
- if (poly)
- {
- mCurrentScene->removeItem(poly);
- mCurrentScene->removeItemFromDeletion(poly);
- poly->setStrokesGroup(pStrokesGroup);
- poly->setStroke(currentStroke);
- pStrokesGroup->addToGroup(poly);
- }
- }
- if (currentStroke->polygons().empty())
- delete currentStroke;
-
- if (pStrokesGroup->childItems().count())
- mCurrentScene->addItem(pStrokesGroup);
- else
- delete pStrokesGroup;
-
- if (pStrokesGroup)
- {
- QGraphicsItem *strokeGroup = qgraphicsitem_cast<QGraphicsItem *>(pStrokesGroup);
- groupContainer.append(strokeGroup);
- }
- }
-
- foreach(QGraphicsItem* item, groupContainer)
- group->addToGroup(item);
-
- if (group->childItems().count())
- {
- mCurrentScene->addItem(group);
-
- if (1 == group->childItems().count())
- {
- group->destroy(false);
- }
- }
-
- return group;
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::strToBool(QString str)
-{
- return str == "true";
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseIwbElement(QDomElement &element)
-{
- if (element.namespaceURI() != iwbNS) {
- qWarning() << "incorrect iwb element namespace, incorrect document";
- // return false;
- }
-
- bool locked = false;
- bool isEditableItem = false;
- bool isEditable = false; //Text items to convert to UBGraphicsTextItem only
-
- QString IDRef = element.attribute(aRef);
- if (!IDRef.isNull()) {
- element.hasAttribute(aBackground) ? strToBool(element.attribute(aBackground)) : false;
- locked = element.hasAttribute(aBackground) ? strToBool(element.attribute(aBackground)) : false;
- isEditableItem = element.hasAttribute(aEditable);
- if (isEditableItem)
- isEditable = strToBool(element.attribute(aEditable));
-
- UBGraphicsItem *referedItem(0);
- QHash<QString, UBGraphicsItem*>::iterator iReferedItem;
- iReferedItem = persistedItems.find(IDRef);
- if (iReferedItem != persistedItems.end()) {
- referedItem = *iReferedItem;
- referedItem->Delegate()->lock(locked);
- }
- if (isEditableItem) {
- UBGraphicsTextItemDelegate *textDelegate = dynamic_cast<UBGraphicsTextItemDelegate*>(referedItem->Delegate());
- if (textDelegate) {
- textDelegate->setEditable(isEditable);
- }
- }
- }
-
- return true;
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseDoc()
-{
- QDomElement currentTopElement = mDOMdoc.documentElement().firstChildElement();
- while (!currentTopElement.isNull()) {
- QString tagName = currentTopElement.tagName();
- if (tagName == tMeta && !parseIwbMeta(currentTopElement)) return false;
- else if (tagName == tSvg && !parseSvg(currentTopElement)) return false;
- else if (tagName == tGroup && !parseIwbGroup(currentTopElement)) return false;
- else if (tagName == tElement && !parseIwbElement(currentTopElement)) return false;
-
- currentTopElement = currentTopElement.nextSiblingElement();
- }
- if (!persistScenes()) return false;
-
- return true;
-}
-
-void UBCFFSubsetAdaptor::UBCFFSubsetReader::repositionSvgItem(QGraphicsItem *item, qreal width, qreal height,
- qreal x, qreal y,
- QTransform &transform)
-{
- //First using viebox coordinates, then translate them to scene coordinates
-
- QRectF itemBounds = item->boundingRect();
-
- qreal xScale = width / itemBounds.width();
- qreal yScale = height / itemBounds.height();
-
- qreal fullScaleX = mVBTransFactor * xScale;
- qreal fullScaleY = mVBTransFactor * yScale;
-
- QPointF oldVector((x - transform.dx()), (y - transform.dy()));
- QTransform rTransform;
- QPointF newVector = rTransform.map(oldVector);
-
- QTransform tr = item->sceneTransform();
- item->setTransform(rTransform.scale(fullScaleX, fullScaleY), true);
- tr = item->sceneTransform();
- QPoint pos;
- if (UBGraphicsTextItem::Type == item->type())
- pos = QPoint((int)((x + mShiftVector.x() + (newVector - oldVector).x())), (int)((y +mShiftVector.y() + (newVector - oldVector).y()) * mVBTransFactor));
- else
- pos = QPoint((int)((x + mShiftVector.x() + (newVector - oldVector).x()) * mVBTransFactor), (int)((y +mShiftVector.y() + (newVector - oldVector).y()) * mVBTransFactor));
-
-
- item->setPos(pos);
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::createNewScene()
-{
- mCurrentScene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(mProxy, mProxy->pageCount(), false);
- mCurrentScene->setSceneRect(mViewBox);
- if ((mCurrentScene->sceneRect().topLeft().x() >= 0) || (mCurrentScene->sceneRect().topLeft().y() >= 0)) {
- mShiftVector = -mViewBox.center();
- }
- mCurrentSceneRect = mViewBox;
- mVBTransFactor = qMin(mCurrentScene->normalizedSceneRect().width() / mViewPort.width(),
- mCurrentScene->normalizedSceneRect().height() / mViewPort.height());
- return true;
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::persistCurrentScene()
-{
- if (mCurrentScene != 0 && mCurrentScene->isModified())
- {
- UBThumbnailAdaptor::persistScene(mProxy, mCurrentScene, mProxy->pageCount() - 1);
- UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, mProxy->pageCount() - 1);
-
- mCurrentScene->setModified(false);
- mCurrentScene = 0;
- }
- return true;
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::persistScenes()
-{
- if (!mProxy->pageCount()) {
- qDebug() << "No pages created";
- return false;
- }
- for (int i = 0; i < mProxy->pageCount(); i++) {
- mCurrentScene = UBPersistenceManager::persistenceManager()->getDocumentScene(mProxy, i);
- if (!mCurrentScene) {
- qDebug() << "can't allocate scene, loading failed";
- return false;
- }
-
- UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, i);
- UBGraphicsScene *tmpScene = UBSvgSubsetAdaptor::loadScene(mProxy, i);
- tmpScene->setModified(true);
- UBThumbnailAdaptor::persistScene(mProxy, tmpScene, i);
- mCurrentScene->setModified(false);
- }
-
- return true;
-}
-
-QColor UBCFFSubsetAdaptor::UBCFFSubsetReader::colorFromString(const QString& clrString)
-{
- //init regexp with pattern
- //pattern corresponds to strings like 'rgb(1,2,3) or rgb(10%,20%,30%)'
- QRegExp regexp("rgb\\(([0-9]+%{0,1}),([0-9]+%{0,1}),([0-9]+%{0,1})\\)");
- if (regexp.exactMatch(clrString))
- {
- if (regexp.capturedTexts().count() == 4 && regexp.capturedTexts().at(0).length() == clrString.length())
- {
- int r = regexp.capturedTexts().at(1).toInt();
- if (regexp.capturedTexts().at(1).indexOf("%") != -1)
- r = r * 255 / 100;
- int g = regexp.capturedTexts().at(2).toInt();
- if (regexp.capturedTexts().at(2).indexOf("%") != -1)
- g = g * 255 / 100;
- int b = regexp.capturedTexts().at(3).toInt();
- if (regexp.capturedTexts().at(3).indexOf("%") != -1)
- b = b * 255 / 100;
- return QColor(r, g, b);
- }
- else
- return QColor();
- }
- else
- return QColor(clrString);
-}
-
-QTransform UBCFFSubsetAdaptor::UBCFFSubsetReader::transformFromString(const QString trString, QGraphicsItem *item)
-{
- qreal dxr = 0.0;
- qreal dyr = 0.0;
- qreal dx = 0.0;
- qreal dy = 0.0;
- qreal angle = 0.0;
- QTransform tr;
-
- foreach(QString trStr, trString.split(" ", QString::SkipEmptyParts))
- {
- //check pattern for strings like 'rotate(10)'
- QRegExp regexp("rotate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *\\)");
- if (regexp.exactMatch(trStr)) {
- angle = regexp.capturedTexts().at(1).toDouble();
- if (item)
- {
- item->setTransformOriginPoint(QPointF(0, 0));
- item->rotate(angle);
- }
- continue;
- };
-
- //check pattern for strings like 'rotate(10,20,20)' or 'rotate(10.1,10.2,34.2)'
- regexp.setPattern("rotate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *, *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *, *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *\\)");
- if (regexp.exactMatch(trStr)) {
- angle = regexp.capturedTexts().at(1).toDouble();
- dxr = regexp.capturedTexts().at(2).toDouble();
- dyr = regexp.capturedTexts().at(3).toDouble();
- if (item)
- {
- item->setTransformOriginPoint(QPointF(dxr, dyr)-item->pos());
- item->rotate(angle);
- }
- continue;
- }
-
- //check pattern for strings like 'translate(11.0, 12.34)'
- regexp.setPattern("translate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *,*([-+]{0,1}[0-9]*\\.{0,1}[0-9]*)*\\)");
- if (regexp.exactMatch(trStr)) {
- dx = regexp.capturedTexts().at(1).toDouble();
- dy = regexp.capturedTexts().at(2).toDouble();
- tr.translate(dx,dy);
- continue;
- }
- }
- return tr;
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::getViewBoxDimenstions(const QString& viewBox)
-{
- QStringList capturedTexts = viewBox.split(" ", QString::SkipEmptyParts);
- if (capturedTexts.count())
- {
- if (4 == capturedTexts.count())
- {
- mViewBox = QRectF(capturedTexts.at(0).toDouble(), capturedTexts.at(1).toDouble(), capturedTexts.at(2).toDouble(), capturedTexts.at(3).toDouble());
- mViewPort = mViewBox;
- mViewPort.translate(- mViewPort.center());
- mViewBoxCenter.setX(mViewBox.width() / 2);
- mViewBoxCenter.setY(mViewBox.height() / 2);
-
- return true;
- }
- }
-
- mViewBox = QRectF(0, 0, 1000, 1000);
- mViewBoxCenter = QPointF(500, 500);
- return false;
-}
-
-QSvgGenerator* UBCFFSubsetAdaptor::UBCFFSubsetReader::createSvgGenerator(qreal width, qreal height)
-{
- QSvgGenerator* generator = new QSvgGenerator();
-// qWarning() << QString("Making generator with file %1, size (%2, %3) and viewbox (%4 %5 %6 %7)").arg(mTempFilePath)
-// .arg(width).arg(height).arg(0.0).arg(0.0).arg(width).arg(width);
- generator->setResolution(QApplication::desktop()->physicalDpiY());
- generator->setFileName(mTempFilePath);
- generator->setSize(QSize(width, height));
- generator->setViewBox(QRectF(0, 0, width, height));
-
- return generator;
-}
-
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::getTempFileName()
-{
- int tmpNumber = 0;
- QDir rootDir;
- while (true)
- {
- mTempFilePath = QString("%1/sanksvg%2.%3")
- .arg(rootDir.tempPath())
- .arg(QDateTime::currentDateTime().toString("dd_MM_yyyy_HH-mm"))
- .arg(tmpNumber);
- if (!QFile::exists(mTempFilePath))
- return true;
- tmpNumber++;
- if (tmpNumber == 100000)
- {
- qWarning() << "Import failed. Failed to create temporary file for svg objects";
- return false;
- }
- }
-}
-bool UBCFFSubsetAdaptor::UBCFFSubsetReader::createTempFlashPath()
-{
- int tmpNumber = 0;
- QDir systemTmp = QDir::temp();
-
- while (true) {
- QString dirName = QString("SankTmpFlash%1.%2")
- .arg(QDateTime::currentDateTime().toString("dd_MM_yyyy_HH-mm"))
- .arg(tmpNumber++);
- if (!systemTmp.exists(dirName)) {
- if (systemTmp.mkdir(dirName)) {
- mTmpFlashDir = QDir(systemTmp.absolutePath() + "/" + dirName);
- return true;
- } else {
- qDebug() << "Can't create temporary dir maybe due to permissions";
- return false;
- }
- } else if (tmpNumber == 1000) {
- qWarning() << "Import failed. Failed to create temporary file for svg objects";
- return false;
- }
- }
-
- return true;
-}
-UBCFFSubsetAdaptor::UBCFFSubsetReader::~UBCFFSubsetReader()
-{
-// QList<int> pages;
-// for (int i = 0; i < mProxy->pageCount(); i++) {
-// pages << i;
-// }
-// UBPersistenceManager::persistenceManager()->deleteDocumentScenes(mProxy, pages);
-}
+
+
+
+#include <QRegExp>
+#include <QSvgGenerator>
+#include <QSvgRenderer>
+#include <QPixmap>
+#include <QMap>
+
+#include "core/UBPersistenceManager.h"
+
+#include "document/UBDocumentProxy.h"
+
+#include "domain/UBItem.h"
+#include "domain/UBGraphicsPolygonItem.h"
+#include "domain/UBGraphicsStroke.h"
+#include "domain/UBGraphicsTextItem.h"
+#include "domain/UBGraphicsSvgItem.h"
+#include "domain/UBGraphicsPixmapItem.h"
+#include "domain/UBGraphicsMediaItem.h"
+#include "domain/UBGraphicsWidgetItem.h"
+#include "domain/UBGraphicsTextItem.h"
+#include "domain/UBGraphicsTextItemDelegate.h"
+#include "domain/UBGraphicsWidgetItem.h"
+#include "domain/UBGraphicsGroupContainerItem.h"
+
+#include "frameworks/UBFileSystemUtils.h"
+
+#include "UBCFFSubsetAdaptor.h"
+#include "UBMetadataDcSubsetAdaptor.h"
+#include "UBThumbnailAdaptor.h"
+#include "UBSvgSubsetAdaptor.h"
+
+#include "core/UBApplication.h"
+#include "QFile"
+
+#include "core/memcheck.h"
+//#include "qtlogger.h"
+
+//tag names definition. Use them everiwhere!
+static QString tElement = "element";
+static QString tGroup = "group";
+static QString tEllipse = "ellipse";
+static QString tIwb = "iwb";
+static QString tMeta = "meta";
+static QString tPage = "page";
+static QString tPageset = "pageset";
+static QString tG = "g";
+static QString tSwitch = "switch";
+static QString tPolygon = "polygon";
+static QString tPolyline = "polyline";
+static QString tRect = "rect";
+static QString tSvg = "svg";
+static QString tText = "text";
+static QString tTextarea = "textarea";
+static QString tTspan = "tspan";
+static QString tBreak = "tbreak";
+static QString tImage = "image";
+static QString tFlash = "flash";
+static QString tAudio = "a";
+static QString tVideo = "video";
+
+//attribute names definition
+static QString aFill = "fill";
+static QString aFillopacity = "fill-opacity";
+static QString aX = "x";
+static QString aY = "y";
+static QString aWidth = "width";
+static QString aHeight = "height";
+static QString aStroke = "stroke";
+static QString aStrokewidth = "stroke-width";
+static QString aCx = "cx";
+static QString aCy = "cy";
+static QString aRx = "rx";
+static QString aRy = "ry";
+static QString aTransform = "transform";
+static QString aViewbox = "viewbox";
+static QString aFontSize = "font-size";
+static QString aFontfamily = "font-family";
+static QString aFontstretch = "font-stretch";
+static QString aFontstyle = "font-style";
+static QString aFontweight = "font-weight";
+static QString aTextalign = "text-align";
+static QString aPoints = "points";
+static QString svgNS = "http://www.w3.org/2000/svg";
+static QString iwbNS = "http://www.imsglobal.org/xsd/iwb_v1p0";
+static QString aId = "id";
+static QString aRef = "ref";
+static QString aHref = "href";
+static QString aBackground = "background";
+static QString aLocked = "locked";
+static QString aEditable = "editable";
+
+//attributes part names
+static QString apRotate = "rotate";
+static QString apTranslate = "translate";
+
+
+UBCFFSubsetAdaptor::UBCFFSubsetAdaptor()
+{}
+
+bool UBCFFSubsetAdaptor::ConvertCFFFileToUbz(QString &cffSourceFile, UBDocumentProxy* pDocument)
+{
+ //TODO
+ // fill document proxy metadata
+ // create persistance manager to save data using proxy
+ // create UBCFFSubsetReader and make it parse cffSourceFolder
+ QFile file(cffSourceFile);
+
+ if (!file.open(QIODevice::ReadOnly))
+ {
+ qWarning() << "Cannot open file " << cffSourceFile << " for reading ...";
+ return false;
+ }
+
+ UBCFFSubsetReader cffReader(pDocument, &file);
+ bool result = cffReader.parse();
+ file.close();
+
+ return result;
+}
+UBCFFSubsetAdaptor::UBCFFSubsetReader::UBCFFSubsetReader(UBDocumentProxy *proxy, QFile *content)
+ : mProxy(proxy)
+ , mGSectionContainer(NULL)
+{
+ int errorLine, errorColumn;
+ QString errorStr;
+ if(!mDOMdoc.setContent(content, true, &errorStr, &errorLine, &errorColumn)){
+ qWarning() << "Error:Parseerroratline" << errorLine << ","
+ << "column" << errorColumn << ":" << errorStr;
+ } else {
+ qDebug() << "well parsed to DOM";
+ pwdContent = QFileInfo(content->fileName()).dir().absolutePath();
+ }
+ qDebug() << "tmp path is" << pwdContent;
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parse()
+{
+ UBMetadataDcSubsetAdaptor::persist(mProxy);
+
+ mIndent = "";
+ if (!getTempFileName() || !createTempFlashPath())
+ return false;
+
+ if (mDOMdoc.isNull())
+ return false;
+
+ bool result = parseDoc();
+ if (result)
+ result = mProxy->pageCount() != 0;
+
+ if (QFile::exists(mTempFilePath))
+ QFile::remove(mTempFilePath);
+
+// if (mTmpFlashDir.exists())
+// UBFileSystemUtils::deleteDir(mTmpFlashDir.path());
+
+ return result;
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseGSection(const QDomElement &element)
+{
+ mGSectionContainer = new UBGraphicsGroupContainerItem();
+
+ QDomElement currentSvgElement = element.firstChildElement();
+ while (!currentSvgElement.isNull()) {
+ parseSvgElement(currentSvgElement);
+ currentSvgElement = currentSvgElement.nextSiblingElement();
+ }
+
+ if (mGSectionContainer->childItems().count())
+ {
+ mCurrentScene->addGroup(mGSectionContainer);
+ }
+ else
+ {
+ delete mGSectionContainer;
+ }
+ mGSectionContainer = NULL;
+
+ return true;
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgSwitchSection(const QDomElement &element)
+{
+
+ QDomElement currentSvgElement = element.firstChildElement();
+ while (!currentSvgElement.isNull()) {
+ if (parseSvgElement(currentSvgElement))
+ return true;
+ }
+
+ return false;
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgRect(const QDomElement &element)
+{
+ qreal x1 = element.attribute(aX).toDouble();
+ qreal y1 = element.attribute(aY).toDouble();
+ //rect dimensions
+ qreal width = element.attribute(aWidth).toDouble();
+ qreal height = element.attribute(aHeight).toDouble();
+
+ QString textFillColor = element.attribute(aFill);
+ QString textStrokeColor = element.attribute(aStroke);
+ QString textStrokeWidth = element.attribute(aStrokewidth);
+
+ QColor fillColor = !textFillColor.isNull() ? colorFromString(textFillColor) : QColor();
+ QColor strokeColor = !textStrokeColor.isNull() ? colorFromString(textStrokeColor) : QColor();
+ int strokeWidth = textStrokeWidth.toInt();
+
+ x1 -= strokeWidth/2;
+ y1 -= strokeWidth/2;
+ width += strokeWidth;
+ height += strokeWidth;
+
+ //init svg generator with temp file
+ QSvgGenerator *generator = createSvgGenerator(width, height);
+
+ //init painter to paint to svg
+ QPainter painter;
+
+ painter.begin(generator);
+
+ //fill rect
+ if (fillColor.isValid()) {
+ painter.setBrush(QBrush(fillColor));
+ painter.fillRect(0, 0, width, height, fillColor);
+ }
+ QPen pen;
+ if (strokeColor.isValid()) {
+ pen.setColor(strokeColor);
+ }
+ if (strokeWidth)
+ pen.setWidth(strokeWidth);
+ painter.setPen(pen);
+ painter.drawRect(0, 0, width, height);
+
+ painter.end();
+
+ UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
+
+ QString uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+ svgItem->setUuid(QUuid(uuid));
+
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ svgItem->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, svgItem);
+ }
+
+ repositionSvgItem(svgItem, width, height, x1, y1, transform);
+ hashSceneItem(element, svgItem);
+
+ if (mGSectionContainer)
+ {
+ addItemToGSection(svgItem);
+ }
+
+ delete generator;
+
+ return true;
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgEllipse(const QDomElement &element)
+{
+ //ellipse horisontal and vertical radius
+ qreal rx = element.attribute(aRx).toDouble();
+ qreal ry = element.attribute(aRy).toDouble();
+ QSvgGenerator *generator = createSvgGenerator(rx * 2, ry * 2);
+
+ //fill and stroke color
+ QColor fillColor = colorFromString(element.attribute(aFill));
+ QColor strokeColor = colorFromString(element.attribute(aStroke));
+ int strokeWidth = element.attribute(aStrokewidth).toInt();
+
+ //ellipse center coordinates
+ qreal cx = element.attribute(aCx).toDouble();
+ qreal cy = element.attribute(aCy).toDouble();
+
+ //init painter to paint to svg
+ QPainter painter;
+ painter.begin(generator);
+
+ QPen pen(strokeColor);
+ pen.setWidth(strokeWidth);
+ painter.setPen(pen);
+ painter.setBrush(QBrush(fillColor));
+
+ painter.drawEllipse(0, 0, rx * 2, ry * 2);
+
+ painter.end();
+
+ UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
+
+ QString uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+ svgItem->setUuid(QUuid(uuid));
+
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ svgItem->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, svgItem);
+ }
+
+
+ repositionSvgItem(svgItem, rx * 2, ry * 2, cx - 2*rx, cy+ry, transform);
+ hashSceneItem(element, svgItem);
+
+ if (mGSectionContainer)
+ {
+ addItemToGSection(svgItem);
+ }
+
+ delete generator;
+
+ return true;
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolygon(const QDomElement &element)
+{
+ QString svgPoints = element.attribute(aPoints);
+ QPolygonF polygon;
+
+ if (!svgPoints.isNull()) {
+ QStringList ts = svgPoints.split(QLatin1Char(' '), QString::SkipEmptyParts);
+
+ foreach(const QString sPoint, ts) {
+ QStringList sCoord = sPoint.split(QLatin1Char(','), QString::SkipEmptyParts);
+ if (sCoord.size() == 2) {
+ QPointF point;
+ point.setX(sCoord.at(0).toFloat());
+ point.setY(sCoord.at(1).toFloat());
+ polygon << point;
+ }
+ else if (sCoord.size() == 4){
+ //This is the case on system were the "," is used to seperate decimal
+ QPointF point;
+ QString x = sCoord.at(0) + "." + sCoord.at(1);
+ QString y = sCoord.at(2) + "." + sCoord.at(3);
+ point.setX(x.toFloat());
+ point.setY(y.toFloat());
+ polygon << point;
+ }
+ else {
+ qWarning() << "cannot make sense of a 'point' value" << sCoord;
+ }
+ }
+ }
+
+ //bounding rect lef top corner coordinates
+ qreal x1 = polygon.boundingRect().topLeft().x();
+ qreal y1 = polygon.boundingRect().topLeft().y();
+ //bounding rect dimensions
+ qreal width = polygon.boundingRect().width();
+ qreal height = polygon.boundingRect().height();
+
+ QString strokeColorText = element.attribute(aStroke);
+ QString fillColorText = element.attribute(aFill);
+ QString strokeWidthText = element.attribute(aStrokewidth);
+
+ QColor strokeColor = !strokeColorText.isEmpty() ? colorFromString(strokeColorText) : QColor();
+ QColor fillColor = !fillColorText.isEmpty() ? colorFromString(fillColorText) : QColor();
+ int strokeWidth = strokeWidthText.toDouble();
+
+ QPen pen;
+ pen.setColor(strokeColor);
+ pen.setWidth(strokeWidth);
+
+ QBrush brush;
+ brush.setColor(fillColor);
+ brush.setStyle(Qt::SolidPattern);
+
+
+ QUuid itemUuid(element.attribute(aId).right(QUuid().toString().length()));
+ QUuid itemGroupUuid(element.attribute(aId).left(QUuid().toString().length()-1));
+ if (!itemUuid.isNull() && (itemGroupUuid!=itemUuid)) // reimported from UBZ
+ {
+ UBGraphicsPolygonItem *graphicsPolygon = mCurrentScene->polygonToPolygonItem(polygon);
+
+ graphicsPolygon->setBrush(brush);
+
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ graphicsPolygon->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, graphicsPolygon);
+ }
+ mCurrentScene->addItem(graphicsPolygon);
+
+ graphicsPolygon->setUuid(itemUuid);
+ mRefToUuidMap.insert(element.attribute(aId), itemUuid);
+
+ }
+ else // single CFF
+ {
+ QSvgGenerator *generator = createSvgGenerator(width + pen.width(), height + pen.width());
+ QPainter painter;
+
+ painter.begin(generator); //drawing to svg tmp file
+
+ painter.translate(pen.widthF() / 2 - x1, pen.widthF() / 2 - y1);
+ painter.setBrush(brush);
+ painter.setPen(pen);
+ painter.drawPolygon(polygon);
+
+ painter.end();
+
+ //add resulting svg file to scene
+ UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ QUuid uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+ svgItem->setUuid(uuid);
+
+ svgItem->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, svgItem);
+ }
+ 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;
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPolyline(const QDomElement &element)
+{
+ QString svgPoints = element.attribute(aPoints);
+ QPolygonF polygon;
+
+ if (!svgPoints.isNull()) {
+ QStringList ts = svgPoints.split(QLatin1Char(' '),
+ QString::SkipEmptyParts);
+
+ foreach(const QString sPoint, ts) {
+ QStringList sCoord = sPoint.split(QLatin1Char(','), QString::SkipEmptyParts);
+ if (sCoord.size() == 2) {
+ QPointF point;
+ point.setX(sCoord.at(0).toFloat());
+ point.setY(sCoord.at(1).toFloat());
+ polygon << point;
+ }
+ else if (sCoord.size() == 4){
+ //This is the case on system were the "," is used to seperate decimal
+ QPointF point;
+ QString x = sCoord.at(0) + "." + sCoord.at(1);
+ QString y = sCoord.at(2) + "." + sCoord.at(3);
+ point.setX(x.toFloat());
+ point.setY(y.toFloat());
+ polygon << point;
+ }
+ else {
+ qWarning() << "cannot make sense of a 'point' value" << sCoord;
+ }
+ }
+ }
+
+ //bounding rect lef top corner coordinates
+ qreal x1 = polygon.boundingRect().topLeft().x();
+ qreal y1 = polygon.boundingRect().topLeft().y();
+
+ //bounding rect dimensions
+ qreal width = polygon.boundingRect().width();
+ qreal height = polygon.boundingRect().height();
+
+ QString strokeColorText = element.attribute(aStroke);
+ QString strokeWidthText = element.attribute(aStrokewidth);
+
+ QColor strokeColor = !strokeColorText.isEmpty() ? colorFromString(strokeColorText) : QColor();
+ int strokeWidth = strokeWidthText.toDouble();
+
+ width += strokeWidth;
+ height += strokeWidth;
+
+ QPen pen;
+ pen.setColor(strokeColor);
+ pen.setWidth(strokeWidth);
+
+ QBrush brush;
+ brush.setColor(strokeColor);
+ brush.setStyle(Qt::SolidPattern);
+
+ QUuid itemUuid(element.attribute(aId).right(QUuid().toString().length()));
+ QUuid itemGroupUuid(element.attribute(aId).left(QUuid().toString().length()-1));
+ if (!itemUuid.isNull() && (itemGroupUuid!=itemUuid)) // reimported from UBZ
+ {
+ UBGraphicsPolygonItem *graphicsPolygon = new UBGraphicsPolygonItem(polygon);
+
+ UBGraphicsStroke *stroke = new UBGraphicsStroke();
+ graphicsPolygon->setStroke(stroke);
+
+ graphicsPolygon->setBrush(brush);
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ graphicsPolygon->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, graphicsPolygon);
+ }
+ mCurrentScene->addItem(graphicsPolygon);
+
+ graphicsPolygon->setUuid(itemUuid);
+ mRefToUuidMap.insert(element.attribute(aId), itemUuid);
+
+ }
+ else // simple CFF
+ {
+ QSvgGenerator *generator = createSvgGenerator(width + pen.width(), height + pen.width());
+ QPainter painter;
+
+ painter.begin(generator); //drawing to svg tmp file
+
+ painter.translate(pen.widthF() / 2 - x1, pen.widthF() / 2 - y1);
+ painter.setBrush(brush);
+ painter.setPen(pen);
+ painter.drawPolygon(polygon);
+
+ painter.end();
+
+ //add resulting svg file to scene
+ UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
+
+ QString uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+ svgItem->setUuid(QUuid(uuid));
+
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ svgItem->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, svgItem);
+ }
+ 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;
+}
+void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTextAttributes(const QDomElement &element,
+ qreal &fontSize, QColor &fontColor, QString &fontFamily,
+ QString &fontStretch, bool &italic, int &fontWeight,
+ int &textAlign, QTransform &fontTransform)
+{
+ //consider inch has 72 liens
+ //since svg font size is given in pixels, divide it by pixels per line
+ QString fontSz = element.attribute(aFontSize);
+ if (!fontSz.isNull()) fontSize = fontSz.toDouble() * 72 / QApplication::desktop()->physicalDpiY();
+
+ QString fontColorText = element.attribute(aFill);
+ if (!fontColorText.isNull()) fontColor = colorFromString(fontColorText);
+
+ QString fontFamilyText = element.attribute(aFontfamily);
+ if (!fontFamilyText.isNull()) fontFamily = fontFamilyText;
+
+ QString fontStretchText = element.attribute(aFontstretch);
+ if (!fontStretchText.isNull()) fontStretch = fontStretchText;
+
+ if (!element.attribute(aFontstyle).isNull())
+ italic = (element.attribute(aFontstyle) == "italic");
+
+ QString weight = element.attribute(aFontweight);
+ if (!weight.isNull()) {
+ if (weight == "normal") fontWeight = QFont::Normal;
+ else if (weight == "light") fontWeight = QFont::Light;
+ else if (weight == "demibold") fontWeight = QFont::DemiBold;
+ else if (weight == "bold") fontWeight = QFont::Bold;
+ else if (weight == "black") fontWeight = QFont::Black;
+ }
+ QString align = element.attribute(aTextalign);
+ if (!align.isNull()) {
+ if (align == "middle" || align == "center") textAlign = Qt::AlignHCenter;
+ else if (align == "start") textAlign = Qt::AlignLeft;
+ else if (align == "end") textAlign = Qt::AlignRight;
+ }
+
+ if (!element.attribute(aTransform).isNull())
+ fontTransform = transformFromString(element.attribute(aTransform));
+}
+void UBCFFSubsetAdaptor::UBCFFSubsetReader::readTextBlockAttr(const QDomElement &element, QTextBlockFormat &format)
+{
+ QString fontStretchText = element.attribute(aFontstretch);
+ if (!fontStretchText.isNull()) format.setAlignment(Qt::AlignJustify);
+
+ QString align = element.attribute(aTextalign);
+ if (!align.isNull()) {
+ if (align == "middle" || align == "center") format.setAlignment(Qt::AlignHCenter);
+ else if (align == "start") format.setAlignment(Qt::AlignLeft);
+ else if (align == "end") format.setAlignment(Qt::AlignRight);
+ else if (align == "justify") format.setAlignment(Qt::AlignJustify);
+ }
+}
+void UBCFFSubsetAdaptor::UBCFFSubsetReader::readTextCharAttr(const QDomElement &element, QTextCharFormat &format)
+{
+ QString fontSz = element.attribute(aFontSize);
+ if (!fontSz.isNull()) {
+ qreal fontSize = fontSz.remove("pt").toDouble();
+ format.setFontPointSize(fontSize);
+ }
+ QString fontColorText = element.attribute(aFill);
+ if (!fontColorText.isNull()) {
+ QColor fontColor = colorFromString(fontColorText);
+ if (fontColor.isValid()) format.setForeground(fontColor);
+ }
+ QString fontFamilyText = element.attribute(aFontfamily);
+ if (!fontFamilyText.isNull()) {
+ format.setFontFamily(fontFamilyText);
+ }
+ if (!element.attribute(aFontstyle).isNull()) {
+ bool italic = (element.attribute(aFontstyle) == "italic");
+ format.setFontItalic(italic);
+ }
+ QString weight = element.attribute(aFontweight);
+ if (!weight.isNull()) {
+ if (weight == "normal") format.setFontWeight(QFont::Normal);
+ else if (weight == "light") format.setFontWeight(QFont::Light);
+ else if (weight == "demibold") format.setFontWeight(QFont::DemiBold);
+ else if (weight == "bold") format.setFontWeight(QFont::Bold);
+ else if (weight == "black") format.setFontWeight(QFont::Black);
+ }
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgText(const QDomElement &element)
+{
+ qreal x = element.attribute(aX).toDouble();
+ qreal y = element.attribute(aY).toDouble();
+ qreal width = element.attribute(aWidth).toDouble();
+ qreal height = element.attribute(aHeight).toDouble();
+
+
+ qreal fontSize = 12;
+ QColor fontColor(qApp->palette().foreground().color());
+ QString fontFamily = "Arial";
+ QString fontStretch = "normal";
+ bool italic = false;
+ int fontWeight = QFont::Normal;
+ int textAlign = Qt::AlignLeft;
+ QTransform fontTransform;
+ parseTextAttributes(element, fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
+
+ QFont startFont(fontFamily, fontSize, fontWeight, italic);
+ height = QFontMetrics(startFont).height();
+ width = QFontMetrics(startFont).width(element.text()) + 5;
+
+ QSvgGenerator *generator = createSvgGenerator(width, height);
+ QPainter painter;
+ painter.begin(generator);
+ painter.setFont(startFont);
+
+ qreal curY = 0.0;
+ qreal curX = 0.0;
+ qreal linespacing = QFontMetricsF(painter.font()).leading();
+
+// remember if text area has transform
+// QString transformString;
+ QTransform transform = fontTransform;
+
+ QRectF lastDrawnTextBoundingRect;
+ //parse text area tags
+
+ //recursive call any tspan in text svg element
+ parseTSpan(element, painter
+ , curX, curY, width, height, linespacing, lastDrawnTextBoundingRect
+ , fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
+
+ painter.end();
+
+ //add resulting svg file to scene
+ UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName()));
+
+ QString uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+ svgItem->setUuid(QUuid(uuid));
+
+ svgItem->resetTransform();
+ repositionSvgItem(svgItem, width, height, x + transform.m31(), y + transform.m32(), transform);
+ hashSceneItem(element, svgItem);
+
+ if (mGSectionContainer)
+ {
+ addItemToGSection(svgItem);
+ }
+
+ delete generator;
+ return true;
+}
+
+void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTSpan(const QDomElement &parent, QPainter &painter
+ , qreal &curX, qreal &curY, qreal &width, qreal &height, qreal &linespacing, QRectF &lastDrawnTextBoundingRect
+ , qreal &fontSize, QColor &fontColor, QString &fontFamily, QString &fontStretch, bool &italic
+ , int &fontWeight, int &textAlign, QTransform &fontTransform)
+{
+ QDomNode curNode = parent.firstChild();
+ while (!curNode.isNull()) {
+ if (curNode.toElement().tagName() == tTspan) {
+ QDomElement curTSpan = curNode.toElement();
+ parseTextAttributes(curTSpan, fontSize, fontColor, fontFamily, fontStretch, italic
+ , fontWeight, textAlign, fontTransform);
+ painter.setFont(QFont(fontFamily, fontSize, fontWeight, italic));
+ painter.setPen(fontColor);
+ linespacing = QFontMetricsF(painter.font()).leading();
+ parseTSpan(curTSpan, painter
+ , curX, curY, width, height, linespacing, lastDrawnTextBoundingRect
+ , fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform);
+ } else if (curNode.nodeType() == QDomNode::CharacterDataNode
+ || curNode.nodeType() == QDomNode::CDATASectionNode
+ || curNode.nodeType() == QDomNode::TextNode) {
+
+ QDomCharacterData textData = curNode.toCharacterData();
+ QString text = textData.data().trimmed();
+// width = painter.fontMetrics().width(text);
+ //get bounding rect to obtain desired text height
+ lastDrawnTextBoundingRect = painter.boundingRect(QRectF(curX, curY, width, height - curY), textAlign|Qt::TextWordWrap, text);
+ painter.drawText(curX, curY, width, lastDrawnTextBoundingRect.height(), textAlign|Qt::TextWordWrap, text);
+ curX += lastDrawnTextBoundingRect.x() + lastDrawnTextBoundingRect.width();
+ } else if (curNode.nodeType() == QDomNode::ElementNode
+ && curNode.toElement().tagName() == tBreak) {
+
+ curY += lastDrawnTextBoundingRect.height() + linespacing;
+ curX = 0.0;
+ lastDrawnTextBoundingRect = QRectF(0,0,0,0);
+ }
+ curNode = curNode.nextSibling();
+ }
+}
+void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTSpan(const QDomElement &element, QTextCursor &cursor
+ , QTextBlockFormat &blockFormat, QTextCharFormat &charFormat)
+{
+ QDomNode curNode = element.firstChild();
+ while (!curNode.isNull()) {
+ if (curNode.toElement().tagName() == tTspan) {
+ QDomElement curTspan = curNode.toElement();
+ readTextBlockAttr(curTspan, blockFormat);
+ readTextCharAttr(curTspan, charFormat);
+ cursor.setBlockFormat(blockFormat);
+ cursor.setCharFormat(charFormat);
+ parseTSpan(curTspan, cursor, blockFormat, charFormat);
+
+ } else if (curNode.nodeType() == QDomNode::CharacterDataNode
+ || curNode.nodeType() == QDomNode::CDATASectionNode
+ || curNode.nodeType() == QDomNode::TextNode) {
+
+ QDomCharacterData textData = curNode.toCharacterData();
+ QString text = textData.data().trimmed();
+ cursor.insertText(text, charFormat);
+
+ } else if (curNode.nodeType() == QDomNode::ElementNode
+ && curNode.toElement().tagName() == tBreak) {
+ cursor.insertBlock();
+ }
+ curNode = curNode.nextSibling();
+ }
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgTextarea(const QDomElement &element)
+{
+ qreal x = element.attribute(aX).toDouble();
+ qreal y = element.attribute(aY).toDouble();
+ qreal width = element.attribute(aWidth).toDouble();
+ qreal height = element.attribute(aHeight).toDouble();
+
+ QTextBlockFormat blockFormat;
+ blockFormat.setAlignment(Qt::AlignLeft);
+
+ QTextCharFormat textFormat;
+ // default values
+ textFormat.setFontPointSize(12);
+ textFormat.setForeground(qApp->palette().foreground().color());
+ textFormat.setFontFamily("Arial");
+ textFormat.setFontItalic(false);
+ textFormat.setFontWeight(QFont::Normal);
+
+ // readed values
+ readTextBlockAttr(element, blockFormat);
+ readTextCharAttr(element, textFormat);
+
+ QTextDocument doc;
+ doc.setPlainText("");
+ QTextCursor tCursor(&doc);
+ tCursor.setBlockFormat(blockFormat);
+ tCursor.setCharFormat(textFormat);
+
+ parseTSpan(element, tCursor, blockFormat, textFormat);
+
+ UBGraphicsTextItem *svgItem = mCurrentScene->addTextHtml(doc.toHtml());
+ svgItem->resize(width, height);
+
+ QString uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+ svgItem->setUuid(QUuid(uuid));
+
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ svgItem->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, svgItem);
+ }
+
+ //by default all the textAreas are not editable
+ UBGraphicsTextItemDelegate *curDelegate = dynamic_cast<UBGraphicsTextItemDelegate*>(svgItem->Delegate());
+ if (curDelegate) {
+ curDelegate->setEditable(false);
+ }
+
+ 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)
+{
+ qreal x = element.attribute(aX).toDouble();
+ qreal y = element.attribute(aY).toDouble();
+ qreal width = element.attribute(aWidth).toDouble();
+ qreal height = element.attribute(aHeight).toDouble();
+
+ QString itemRefPath = element.attribute(aHref);
+
+ QPixmap pix;
+ if (!itemRefPath.isNull()) {
+ QString imagePath = pwdContent + "/" + itemRefPath;
+ if (!QFile::exists(imagePath)) {
+ qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
+ return false;
+ } else {
+// qDebug() << "size of file" << itemRefPath << QFileInfo(itemRefPath).size();
+ }
+ pix.load(imagePath);
+ if (pix.isNull()) {
+ qDebug() << "can't create pixmap for file" << pwdContent + "/" + itemRefPath << "maybe format does not supported";
+ }
+ }
+
+ UBGraphicsPixmapItem *pixItem = mCurrentScene->addPixmap(pix, NULL);
+
+ QString uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+ pixItem->setUuid(QUuid(uuid));
+
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ pixItem->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, pixItem);
+ }
+ 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)
+{
+ QString itemRefPath = element.attribute(aHref);
+
+ qreal x = element.attribute(aX).toDouble();
+ qreal y = element.attribute(aY).toDouble();
+ qreal width = element.attribute(aWidth).toDouble();
+ qreal height = element.attribute(aHeight).toDouble();
+
+ QUrl urlPath;
+ QString flashPath;
+ if (!itemRefPath.isNull()) {
+ flashPath = pwdContent + "/" + itemRefPath;
+ if (!QFile::exists(flashPath)) {
+ qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
+ return false;
+ }
+ urlPath = QUrl::fromLocalFile(flashPath);
+ }
+ QDir tmpFlashDir(mTmpFlashDir);
+ if (!tmpFlashDir.exists()) {
+ qDebug() << "Can't create temporary directory to put flash";
+ return false;
+ }
+
+ QString flashUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapperInDir(flashPath, tmpFlashDir, "application/x-shockwave-flash"
+ ,QSize(mCurrentSceneRect.width(), mCurrentSceneRect.height()));
+ UBGraphicsWidgetItem *flashItem = mCurrentScene->addW3CWidget(QUrl::fromLocalFile(flashUrl));
+ flashItem->setSourceUrl(urlPath);
+
+ QString uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+ flashItem->setUuid(QUuid(uuid));
+
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ flashItem->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, flashItem);
+ }
+ repositionSvgItem(flashItem, width, height, x + transform.m31(), y + transform.m32(), transform);
+ hashSceneItem(element, flashItem);
+
+ if (mGSectionContainer)
+ {
+ addItemToGSection(flashItem);
+ }
+
+ return true;
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgAudio(const QDomElement &element)
+{
+ QDomElement parentOfAudio = element.firstChild().toElement();
+
+ qreal x = parentOfAudio.attribute(aX).toDouble();
+ qreal y = parentOfAudio.attribute(aY).toDouble();
+
+ QString itemRefPath = element.attribute(aHref);
+
+ QUrl concreteUrl;
+ if (!itemRefPath.isNull()) {
+ QString audioPath = pwdContent + "/" + itemRefPath;
+ if (!QFile::exists(audioPath)) {
+ qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
+ return false;
+ }
+ concreteUrl = QUrl::fromLocalFile(audioPath);
+ }
+
+ QString uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+
+ QString destFile;
+ bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(
+ mCurrentScene->document(),
+ concreteUrl.toLocalFile(),
+ UBPersistenceManager::audioDirectory,
+ QUuid(uuid),
+ destFile);
+ if (!b)
+ {
+ return false;
+ }
+ concreteUrl = QUrl::fromLocalFile(destFile);
+
+ UBGraphicsMediaItem *audioItem = mCurrentScene->addAudio(concreteUrl, false);
+
+ QTransform transform;
+ QString textTransform = parentOfAudio.attribute(aTransform);
+
+ audioItem->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, audioItem);
+ }
+ 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)
+{
+ QString itemRefPath = element.attribute(aHref);
+ if (itemRefPath.startsWith(tFlash + "/") && itemRefPath.endsWith(".swf")) {
+ if (parseSvgFlash(element)) return true;
+ else return false;
+ }
+ qreal x = element.attribute(aX).toDouble();
+ qreal y = element.attribute(aY).toDouble();
+
+ QUrl concreteUrl;
+ if (!itemRefPath.isNull()) {
+ QString videoPath = pwdContent + "/" + itemRefPath;
+ if (!QFile::exists(videoPath)) {
+ qDebug() << "can't load file" << pwdContent + "/" + itemRefPath << "maybe file corrupted";
+ return false;
+ }
+ concreteUrl = QUrl::fromLocalFile(videoPath);
+ }
+
+ QString uuid = QUuid::createUuid().toString();
+ mRefToUuidMap.insert(element.attribute(aId), uuid);
+
+ QString destFile;
+ bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(
+ mCurrentScene->document(),
+ concreteUrl.toLocalFile(),
+ UBPersistenceManager::videoDirectory,
+ QUuid(uuid),
+ destFile);
+ if (!b)
+ {
+ return false;
+ }
+ concreteUrl = QUrl::fromLocalFile(destFile);
+
+ UBGraphicsMediaItem *videoItem = mCurrentScene->addVideo(concreteUrl, false);
+
+ QTransform transform;
+ QString textTransform = element.attribute(aTransform);
+
+ videoItem->resetTransform();
+ if (!textTransform.isNull()) {
+ transform = transformFromString(textTransform, videoItem);
+ }
+ repositionSvgItem(videoItem, videoItem->boundingRect().width(), videoItem->boundingRect().height(), x + transform.m31(), y + transform.m32(), transform);
+ hashSceneItem(element, videoItem);
+
+ if (mGSectionContainer)
+ {
+ addItemToGSection(videoItem);
+ }
+
+ return true;
+}
+
+void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgSectionAttr(const QDomElement &svgSection)
+{
+ getViewBoxDimenstions(svgSection.attribute(aViewbox));
+ mSize = QSize(svgSection.attribute(aWidth).toInt(),
+ 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
+ QString key = element.attribute(aId);
+ if (!key.isNull()) {
+ persistedItems.insert(key, item);
+ }
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgElement(const QDomElement &parent)
+{
+ QString tagName = parent.tagName();
+ if (parent.namespaceURI() != svgNS) {
+ qWarning() << "Incorrect namespace, error at content file, line number" << parent.lineNumber();
+ //return false;
+ }
+
+ if (tagName == tG && !parseGSection(parent)) return false;
+ else if (tagName == tSwitch && !parseSvgSwitchSection(parent)) return false;
+ else if (tagName == tRect && !parseSvgRect(parent)) return false;
+ else if (tagName == tEllipse && !parseSvgEllipse(parent)) return false;
+ else if (tagName == tPolygon && !parseSvgPolygon(parent)) return false;
+ else if (tagName == tPolyline && !parseSvgPolyline(parent)) return false;
+ else if (tagName == tText && !parseSvgText(parent)) return false;
+ else if (tagName == tTextarea && !parseSvgTextarea(parent)) return false;
+ else if (tagName == tImage && !parseSvgImage(parent)) return false;
+ else if (tagName == tFlash && !parseSvgFlash(parent)) return false;
+ else if (tagName == tAudio && !parseSvgAudio(parent)) return false;
+ else if (tagName == tVideo && !parseSvgVideo(parent)) return false;
+
+ return true;
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPage(const QDomElement &parent)
+{
+ createNewScene();
+ QDomElement currentSvgElement = parent.firstChildElement();
+ while (!currentSvgElement.isNull()) {
+ if (!parseSvgElement(currentSvgElement))
+ return false;
+
+ currentSvgElement = currentSvgElement.nextSiblingElement();
+ }
+
+ return true;
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvgPageset(const QDomElement &parent)
+{
+ QDomElement currentPage = parent.firstChildElement(tPage);
+ while (!currentPage.isNull()) {
+ if (!parseSvgPage(currentPage))
+ return false;
+ currentPage = currentPage.nextSiblingElement(tPage);
+ }
+ return true;
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseIwbMeta(const QDomElement &element)
+{
+ if (element.namespaceURI() != iwbNS) {
+ qWarning() << "incorrect meta namespace, incorrect document";
+ //return false;
+ }
+
+ return true;
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvg(const QDomElement &svgSection)
+{
+ if (svgSection.namespaceURI() != svgNS) {
+ qWarning() << "incorrect svg namespace, incorrect document";
+ // return false;
+ }
+
+ parseSvgSectionAttr(svgSection);
+ QDomElement currentSvg = svgSection.firstChildElement();
+
+ if (currentSvg.tagName() != tPageset) {
+ parseSvgPage(svgSection);
+ } else if (currentSvg.tagName() == tPageset){
+ parseSvgPageset(currentSvg);
+ }
+
+ return true;
+}
+
+UBGraphicsGroupContainerItem *UBCFFSubsetAdaptor::UBCFFSubsetReader::parseIwbGroup(QDomElement &parent)
+{
+ //TODO. Create groups from elements parsed by parseIwbElement() function
+ if (parent.namespaceURI() != iwbNS) {
+ qWarning() << "incorrect iwb group namespace, incorrect document";
+ // return false;
+ }
+
+ UBGraphicsGroupContainerItem *group = new UBGraphicsGroupContainerItem();
+ QMultiMap<QString, UBGraphicsPolygonItem *> strokesGroupsContainer;
+ QList<QGraphicsItem *> groupContainer;
+ QString currentStrokeIdentifier;
+
+ QDomElement currentStrokeElement = parent.firstChildElement();
+ while (!currentStrokeElement.isNull())
+ {
+ if (tGroup == currentStrokeElement.tagName())
+ group->addToGroup(parseIwbGroup(currentStrokeElement));
+ else
+ {
+
+ QString ref = currentStrokeElement.attribute(aRef);
+ QString uuid = mRefToUuidMap[ref];
+ if (!uuid.isEmpty())
+ {
+ if (ref.size() > QUuid().toString().length()) // create stroke group
+ {
+ currentStrokeIdentifier = ref.left(QUuid().toString().length()-1);
+ UBGraphicsPolygonItem *strokeByUuid = qgraphicsitem_cast<UBGraphicsPolygonItem *>(mCurrentScene->itemForUuid(QUuid(ref.right(QUuid().toString().length()))));
+
+ if (strokeByUuid)
+ strokesGroupsContainer.insert(currentStrokeIdentifier, strokeByUuid);
+ }
+ else // single elements in group
+ groupContainer.append(mCurrentScene->itemForUuid(QUuid(uuid)));
+ }
+ }
+ currentStrokeElement = currentStrokeElement.nextSiblingElement();
+ }
+
+
+
+ foreach (QString key, strokesGroupsContainer.keys().toSet())
+ {
+ UBGraphicsStrokesGroup* pStrokesGroup = new UBGraphicsStrokesGroup();
+ UBGraphicsStroke *currentStroke = new UBGraphicsStroke();
+ foreach(UBGraphicsPolygonItem* poly, strokesGroupsContainer.values(key))
+ {
+ if (poly)
+ {
+ mCurrentScene->removeItem(poly);
+ mCurrentScene->removeItemFromDeletion(poly);
+ poly->setStrokesGroup(pStrokesGroup);
+ poly->setStroke(currentStroke);
+ pStrokesGroup->addToGroup(poly);
+ }
+ }
+ if (currentStroke->polygons().empty())
+ delete currentStroke;
+
+ if (pStrokesGroup->childItems().count())
+ mCurrentScene->addItem(pStrokesGroup);
+ else
+ delete pStrokesGroup;
+
+ if (pStrokesGroup)
+ {
+ QGraphicsItem *strokeGroup = qgraphicsitem_cast<QGraphicsItem *>(pStrokesGroup);
+ groupContainer.append(strokeGroup);
+ }
+ }
+
+ foreach(QGraphicsItem* item, groupContainer)
+ group->addToGroup(item);
+
+ if (group->childItems().count())
+ {
+ mCurrentScene->addItem(group);
+
+ if (1 == group->childItems().count())
+ {
+ group->destroy(false);
+ }
+ }
+
+ return group;
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::strToBool(QString str)
+{
+ return str == "true";
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseIwbElement(QDomElement &element)
+{
+ if (element.namespaceURI() != iwbNS) {
+ qWarning() << "incorrect iwb element namespace, incorrect document";
+ // return false;
+ }
+
+ bool locked = false;
+ bool isEditableItem = false;
+ bool isEditable = false; //Text items to convert to UBGraphicsTextItem only
+
+ QString IDRef = element.attribute(aRef);
+ if (!IDRef.isNull()) {
+ element.hasAttribute(aBackground) ? strToBool(element.attribute(aBackground)) : false;
+ locked = element.hasAttribute(aBackground) ? strToBool(element.attribute(aBackground)) : false;
+ isEditableItem = element.hasAttribute(aEditable);
+ if (isEditableItem)
+ isEditable = strToBool(element.attribute(aEditable));
+
+ UBGraphicsItem *referedItem(0);
+ QHash<QString, UBGraphicsItem*>::iterator iReferedItem;
+ iReferedItem = persistedItems.find(IDRef);
+ if (iReferedItem != persistedItems.end()) {
+ referedItem = *iReferedItem;
+ referedItem->Delegate()->lock(locked);
+ }
+ if (isEditableItem) {
+ UBGraphicsTextItemDelegate *textDelegate = dynamic_cast<UBGraphicsTextItemDelegate*>(referedItem->Delegate());
+ if (textDelegate) {
+ textDelegate->setEditable(isEditable);
+ }
+ }
+ }
+
+ return true;
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseDoc()
+{
+ QDomElement currentTopElement = mDOMdoc.documentElement().firstChildElement();
+ while (!currentTopElement.isNull()) {
+ QString tagName = currentTopElement.tagName();
+ if (tagName == tMeta && !parseIwbMeta(currentTopElement)) return false;
+ else if (tagName == tSvg && !parseSvg(currentTopElement)) return false;
+ else if (tagName == tGroup && !parseIwbGroup(currentTopElement)) return false;
+ else if (tagName == tElement && !parseIwbElement(currentTopElement)) return false;
+
+ currentTopElement = currentTopElement.nextSiblingElement();
+ }
+ if (!persistScenes()) return false;
+
+ return true;
+}
+
+void UBCFFSubsetAdaptor::UBCFFSubsetReader::repositionSvgItem(QGraphicsItem *item, qreal width, qreal height,
+ qreal x, qreal y,
+ QTransform &transform)
+{
+ //First using viebox coordinates, then translate them to scene coordinates
+
+ QRectF itemBounds = item->boundingRect();
+
+ qreal xScale = width / itemBounds.width();
+ qreal yScale = height / itemBounds.height();
+
+ qreal fullScaleX = mVBTransFactor * xScale;
+ qreal fullScaleY = mVBTransFactor * yScale;
+
+ QPointF oldVector((x - transform.dx()), (y - transform.dy()));
+ QTransform rTransform;
+ QPointF newVector = rTransform.map(oldVector);
+
+ QTransform tr = item->sceneTransform();
+ item->setTransform(rTransform.scale(fullScaleX, fullScaleY), true);
+ tr = item->sceneTransform();
+ QPoint pos;
+ if (UBGraphicsTextItem::Type == item->type())
+ pos = QPoint((int)((x + mShiftVector.x() + (newVector - oldVector).x())), (int)((y +mShiftVector.y() + (newVector - oldVector).y()) * mVBTransFactor));
+ else
+ pos = QPoint((int)((x + mShiftVector.x() + (newVector - oldVector).x()) * mVBTransFactor), (int)((y +mShiftVector.y() + (newVector - oldVector).y()) * mVBTransFactor));
+
+
+ item->setPos(pos);
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::createNewScene()
+{
+ mCurrentScene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(mProxy, mProxy->pageCount(), false);
+ mCurrentScene->setSceneRect(mViewBox);
+ if ((mCurrentScene->sceneRect().topLeft().x() >= 0) || (mCurrentScene->sceneRect().topLeft().y() >= 0)) {
+ mShiftVector = -mViewBox.center();
+ }
+ mCurrentSceneRect = mViewBox;
+ mVBTransFactor = qMin(mCurrentScene->normalizedSceneRect().width() / mViewPort.width(),
+ mCurrentScene->normalizedSceneRect().height() / mViewPort.height());
+ return true;
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::persistCurrentScene()
+{
+ if (mCurrentScene != 0 && mCurrentScene->isModified())
+ {
+ UBThumbnailAdaptor::persistScene(mProxy, mCurrentScene, mProxy->pageCount() - 1);
+ UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, mProxy->pageCount() - 1);
+
+ mCurrentScene->setModified(false);
+ mCurrentScene = 0;
+ }
+ return true;
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::persistScenes()
+{
+ if (!mProxy->pageCount()) {
+ qDebug() << "No pages created";
+ return false;
+ }
+ for (int i = 0; i < mProxy->pageCount(); i++) {
+ mCurrentScene = UBPersistenceManager::persistenceManager()->getDocumentScene(mProxy, i);
+ if (!mCurrentScene) {
+ qDebug() << "can't allocate scene, loading failed";
+ return false;
+ }
+
+ UBSvgSubsetAdaptor::persistScene(mProxy, mCurrentScene, i);
+ UBGraphicsScene *tmpScene = UBSvgSubsetAdaptor::loadScene(mProxy, i);
+ tmpScene->setModified(true);
+ UBThumbnailAdaptor::persistScene(mProxy, tmpScene, i);
+ mCurrentScene->setModified(false);
+ }
+
+ return true;
+}
+
+QColor UBCFFSubsetAdaptor::UBCFFSubsetReader::colorFromString(const QString& clrString)
+{
+ //init regexp with pattern
+ //pattern corresponds to strings like 'rgb(1,2,3) or rgb(10%,20%,30%)'
+ QRegExp regexp("rgb\\(([0-9]+%{0,1}),([0-9]+%{0,1}),([0-9]+%{0,1})\\)");
+ if (regexp.exactMatch(clrString))
+ {
+ if (regexp.capturedTexts().count() == 4 && regexp.capturedTexts().at(0).length() == clrString.length())
+ {
+ int r = regexp.capturedTexts().at(1).toInt();
+ if (regexp.capturedTexts().at(1).indexOf("%") != -1)
+ r = r * 255 / 100;
+ int g = regexp.capturedTexts().at(2).toInt();
+ if (regexp.capturedTexts().at(2).indexOf("%") != -1)
+ g = g * 255 / 100;
+ int b = regexp.capturedTexts().at(3).toInt();
+ if (regexp.capturedTexts().at(3).indexOf("%") != -1)
+ b = b * 255 / 100;
+ return QColor(r, g, b);
+ }
+ else
+ return QColor();
+ }
+ else
+ return QColor(clrString);
+}
+
+QTransform UBCFFSubsetAdaptor::UBCFFSubsetReader::transformFromString(const QString trString, QGraphicsItem *item)
+{
+ qreal dxr = 0.0;
+ qreal dyr = 0.0;
+ qreal dx = 0.0;
+ qreal dy = 0.0;
+ qreal angle = 0.0;
+ QTransform tr;
+
+ foreach(QString trStr, trString.split(" ", QString::SkipEmptyParts))
+ {
+ //check pattern for strings like 'rotate(10)'
+ QRegExp regexp("rotate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *\\)");
+ if (regexp.exactMatch(trStr)) {
+ angle = regexp.capturedTexts().at(1).toDouble();
+ if (item)
+ {
+ item->setTransformOriginPoint(QPointF(0, 0));
+ item->rotate(angle);
+ }
+ continue;
+ };
+
+ //check pattern for strings like 'rotate(10,20,20)' or 'rotate(10.1,10.2,34.2)'
+ regexp.setPattern("rotate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *, *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *, *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *\\)");
+ if (regexp.exactMatch(trStr)) {
+ angle = regexp.capturedTexts().at(1).toDouble();
+ dxr = regexp.capturedTexts().at(2).toDouble();
+ dyr = regexp.capturedTexts().at(3).toDouble();
+ if (item)
+ {
+ item->setTransformOriginPoint(QPointF(dxr, dyr)-item->pos());
+ item->rotate(angle);
+ }
+ continue;
+ }
+
+ //check pattern for strings like 'translate(11.0, 12.34)'
+ regexp.setPattern("translate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *,*([-+]{0,1}[0-9]*\\.{0,1}[0-9]*)*\\)");
+ if (regexp.exactMatch(trStr)) {
+ dx = regexp.capturedTexts().at(1).toDouble();
+ dy = regexp.capturedTexts().at(2).toDouble();
+ tr.translate(dx,dy);
+ continue;
+ }
+ }
+ return tr;
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::getViewBoxDimenstions(const QString& viewBox)
+{
+ QStringList capturedTexts = viewBox.split(" ", QString::SkipEmptyParts);
+ if (capturedTexts.count())
+ {
+ if (4 == capturedTexts.count())
+ {
+ mViewBox = QRectF(capturedTexts.at(0).toDouble(), capturedTexts.at(1).toDouble(), capturedTexts.at(2).toDouble(), capturedTexts.at(3).toDouble());
+ mViewPort = mViewBox;
+ mViewPort.translate(- mViewPort.center());
+ mViewBoxCenter.setX(mViewBox.width() / 2);
+ mViewBoxCenter.setY(mViewBox.height() / 2);
+
+ return true;
+ }
+ }
+
+ mViewBox = QRectF(0, 0, 1000, 1000);
+ mViewBoxCenter = QPointF(500, 500);
+ return false;
+}
+
+QSvgGenerator* UBCFFSubsetAdaptor::UBCFFSubsetReader::createSvgGenerator(qreal width, qreal height)
+{
+ QSvgGenerator* generator = new QSvgGenerator();
+// qWarning() << QString("Making generator with file %1, size (%2, %3) and viewbox (%4 %5 %6 %7)").arg(mTempFilePath)
+// .arg(width).arg(height).arg(0.0).arg(0.0).arg(width).arg(width);
+ generator->setResolution(QApplication::desktop()->physicalDpiY());
+ generator->setFileName(mTempFilePath);
+ generator->setSize(QSize(width, height));
+ generator->setViewBox(QRectF(0, 0, width, height));
+
+ return generator;
+}
+
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::getTempFileName()
+{
+ int tmpNumber = 0;
+ QDir rootDir;
+ while (true)
+ {
+ mTempFilePath = QString("%1/sanksvg%2.%3")
+ .arg(rootDir.tempPath())
+ .arg(QDateTime::currentDateTime().toString("dd_MM_yyyy_HH-mm"))
+ .arg(tmpNumber);
+ if (!QFile::exists(mTempFilePath))
+ return true;
+ tmpNumber++;
+ if (tmpNumber == 100000)
+ {
+ qWarning() << "Import failed. Failed to create temporary file for svg objects";
+ return false;
+ }
+ }
+}
+bool UBCFFSubsetAdaptor::UBCFFSubsetReader::createTempFlashPath()
+{
+ int tmpNumber = 0;
+ QDir systemTmp = QDir::temp();
+
+ while (true) {
+ QString dirName = QString("SankTmpFlash%1.%2")
+ .arg(QDateTime::currentDateTime().toString("dd_MM_yyyy_HH-mm"))
+ .arg(tmpNumber++);
+ if (!systemTmp.exists(dirName)) {
+ if (systemTmp.mkdir(dirName)) {
+ mTmpFlashDir = QDir(systemTmp.absolutePath() + "/" + dirName);
+ return true;
+ } else {
+ qDebug() << "Can't create temporary dir maybe due to permissions";
+ return false;
+ }
+ } else if (tmpNumber == 1000) {
+ qWarning() << "Import failed. Failed to create temporary file for svg objects";
+ return false;
+ }
+ }
+
+ return true;
+}
+UBCFFSubsetAdaptor::UBCFFSubsetReader::~UBCFFSubsetReader()
+{
+// QList<int> pages;
+// for (int i = 0; i < mProxy->pageCount(); i++) {
+// pages << i;
+// }
+// UBPersistenceManager::persistenceManager()->deleteDocumentScenes(mProxy, pages);
+}
diff --git a/Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.h b/Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.h
index 0d167c4..68f741e 100644
--- a/Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.h
+++ b/Sankore-3.1/src/adaptors/UBCFFSubsetAdaptor.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,135 +18,136 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBCFFSUBSETADAPTOR_H
-#define UBCFFSUBSETADAPTOR_H
-
-#include <QtXml>
-#include <QString>
-#include <QStack>
-#include <QDomDocument>
-#include <QHash>
-
-class UBDocumentProxy;
-class UBGraphicsScene;
-class QSvgGenerator;
-class UBGraphicsSvgItem;
-class UBGraphicsPixmapItem;
-class UBGraphicsItemDelegate;
-class QTransform;
-class QPainter;
-class UBGraphicsItem;
-class QGraphicsItem;
-class QTextBlockFormat;
-class QTextCharFormat;
-class QTextCursor;
-class UBGraphicsStrokesGroup;
-
-
-class UBCFFSubsetAdaptor
-{
-public:
- UBCFFSubsetAdaptor();
- static bool ConvertCFFFileToUbz(QString &cffSourceFile, UBDocumentProxy* pDocument);
-
-private:
- class UBCFFSubsetReader
- {
- public:
- UBCFFSubsetReader(UBDocumentProxy *proxy, QFile *content);
- ~UBCFFSubsetReader();
-
- UBDocumentProxy *mProxy;
- QString pwdContent;
-
- bool parse();
-
- private:
- QString mTempFilePath;
- UBGraphicsScene *mCurrentScene;
- QRectF mCurrentSceneRect;
- QString mIndent;
- QRectF mViewBox;
- QRectF mViewPort;
- qreal mVBTransFactor;
- QPointF mViewBoxCenter;
- QSize mSize;
- QPointF mShiftVector;
- bool mSvgGSectionIsOpened;
- UBGraphicsGroupContainerItem *mGSectionContainer;
-
- private:
- QDomDocument mDOMdoc;
- QDomNode mCurrentDOMElement;
- QHash<QString, UBGraphicsItem*> persistedItems;
- QMap<QString, QString> mRefToUuidMap;
- QDir mTmpFlashDir;
-
- void addItemToGSection(QGraphicsItem *item);
- bool hashElements();
- void addExtentionsToHash(QDomElement *parent, QDomElement *topGroup);
-
- void hashSvg(QDomNode *parent, QString prefix = "");
- void hashSiblingIwbElements(QDomElement *parent, QDomElement *topGroup = 0);
-
- inline void parseSvgSectionAttr(const QDomElement &);
- bool parseSvgPage(const QDomElement &parent);
- bool parseSvgPageset(const QDomElement &parent);
- bool parseSvgElement(const QDomElement &parent);
- bool parseIwbMeta(const QDomElement &element);
- bool parseSvg(const QDomElement &svgSection);
-
- inline bool parseGSection(const QDomElement &element);
- inline bool parseSvgSwitchSection(const QDomElement &element);
- inline bool parseSvgRect(const QDomElement &element);
- inline bool parseSvgEllipse(const QDomElement &element);
- inline bool parseSvgPolygon(const QDomElement &element);
- inline bool parseSvgPolyline(const QDomElement &element);
- inline bool parseSvgText(const QDomElement &element);
- inline bool parseSvgTextarea(const QDomElement &element);
- inline bool parseSvgImage(const QDomElement &element);
- inline bool parseSvgFlash(const QDomElement &element);
- inline bool parseSvgAudio(const QDomElement &element);
- inline bool parseSvgVideo(const QDomElement &element);
- inline UBGraphicsGroupContainerItem *parseIwbGroup(QDomElement &parent);
- inline bool parseIwbElement(QDomElement &element);
- inline void parseTSpan(const QDomElement &parent, QPainter &painter
- , qreal &curX, qreal &curY, qreal &width, qreal &height, qreal &linespacing, QRectF &lastDrawnTextBoundingRect
- , qreal &fontSize, QColor &fontColor, QString &fontFamily, QString &fontStretch, bool &italic
- , int &fontWeight, int &textAlign, QTransform &fontTransform);
- inline void parseTSpan(const QDomElement &element, QTextCursor &cursor
- , QTextBlockFormat &blockFormat, QTextCharFormat &charFormat);
- inline void hashSceneItem(const QDomElement &element, UBGraphicsItem *item);
-
- // to kill
- inline void parseTextAttributes(const QDomElement &element, qreal &fontSize, QColor &fontColor,
- QString &fontFamily, QString &fontStretch, bool &italic,
- int &fontWeight, int &textAlign, QTransform &fontTransform);
- inline void parseTextAttributes(const QDomElement &element, QFont &font, QColor);
- inline void readTextBlockAttr(const QDomElement &element, QTextBlockFormat &format);
- inline void readTextCharAttr(const QDomElement &element, QTextCharFormat &format);
-
- //elements parsing methods
- bool parseDoc();
-
- bool createNewScene();
- bool persistCurrentScene();
- bool persistScenes();
-
-// helper methods
- void repositionSvgItem(QGraphicsItem *item, qreal width, qreal height,
- qreal x, qreal y,
- QTransform &transform);
- QColor colorFromString(const QString& clrString);
- QTransform transformFromString(const QString trString, QGraphicsItem *item = 0);
- bool getViewBoxDimenstions(const QString& viewBox);
- QSvgGenerator* createSvgGenerator(qreal width, qreal height);
- bool getTempFileName();
- inline bool strToBool(QString);
- bool createTempFlashPath();
- };
-};
-
-#endif // UBCFFSUBSETADAPTOR_H
+
+
+
+#ifndef UBCFFSUBSETADAPTOR_H
+#define UBCFFSUBSETADAPTOR_H
+
+#include <QtXml>
+#include <QString>
+#include <QStack>
+#include <QDomDocument>
+#include <QHash>
+
+class UBDocumentProxy;
+class UBGraphicsScene;
+class QSvgGenerator;
+class UBGraphicsSvgItem;
+class UBGraphicsPixmapItem;
+class UBGraphicsItemDelegate;
+class QTransform;
+class QPainter;
+class UBGraphicsItem;
+class QGraphicsItem;
+class QTextBlockFormat;
+class QTextCharFormat;
+class QTextCursor;
+class UBGraphicsStrokesGroup;
+
+
+class UBCFFSubsetAdaptor
+{
+public:
+ UBCFFSubsetAdaptor();
+ static bool ConvertCFFFileToUbz(QString &cffSourceFile, UBDocumentProxy* pDocument);
+
+private:
+ class UBCFFSubsetReader
+ {
+ public:
+ UBCFFSubsetReader(UBDocumentProxy *proxy, QFile *content);
+ ~UBCFFSubsetReader();
+
+ UBDocumentProxy *mProxy;
+ QString pwdContent;
+
+ bool parse();
+
+ private:
+ QString mTempFilePath;
+ UBGraphicsScene *mCurrentScene;
+ QRectF mCurrentSceneRect;
+ QString mIndent;
+ QRectF mViewBox;
+ QRectF mViewPort;
+ qreal mVBTransFactor;
+ QPointF mViewBoxCenter;
+ QSize mSize;
+ QPointF mShiftVector;
+ bool mSvgGSectionIsOpened;
+ UBGraphicsGroupContainerItem *mGSectionContainer;
+
+ private:
+ QDomDocument mDOMdoc;
+ QDomNode mCurrentDOMElement;
+ QHash<QString, UBGraphicsItem*> persistedItems;
+ QMap<QString, QString> mRefToUuidMap;
+ QDir mTmpFlashDir;
+
+ void addItemToGSection(QGraphicsItem *item);
+ bool hashElements();
+ void addExtentionsToHash(QDomElement *parent, QDomElement *topGroup);
+
+ void hashSvg(QDomNode *parent, QString prefix = "");
+ void hashSiblingIwbElements(QDomElement *parent, QDomElement *topGroup = 0);
+
+ inline void parseSvgSectionAttr(const QDomElement &);
+ bool parseSvgPage(const QDomElement &parent);
+ bool parseSvgPageset(const QDomElement &parent);
+ bool parseSvgElement(const QDomElement &parent);
+ bool parseIwbMeta(const QDomElement &element);
+ bool parseSvg(const QDomElement &svgSection);
+
+ inline bool parseGSection(const QDomElement &element);
+ inline bool parseSvgSwitchSection(const QDomElement &element);
+ inline bool parseSvgRect(const QDomElement &element);
+ inline bool parseSvgEllipse(const QDomElement &element);
+ inline bool parseSvgPolygon(const QDomElement &element);
+ inline bool parseSvgPolyline(const QDomElement &element);
+ inline bool parseSvgText(const QDomElement &element);
+ inline bool parseSvgTextarea(const QDomElement &element);
+ inline bool parseSvgImage(const QDomElement &element);
+ inline bool parseSvgFlash(const QDomElement &element);
+ inline bool parseSvgAudio(const QDomElement &element);
+ inline bool parseSvgVideo(const QDomElement &element);
+ inline UBGraphicsGroupContainerItem *parseIwbGroup(QDomElement &parent);
+ inline bool parseIwbElement(QDomElement &element);
+ inline void parseTSpan(const QDomElement &parent, QPainter &painter
+ , qreal &curX, qreal &curY, qreal &width, qreal &height, qreal &linespacing, QRectF &lastDrawnTextBoundingRect
+ , qreal &fontSize, QColor &fontColor, QString &fontFamily, QString &fontStretch, bool &italic
+ , int &fontWeight, int &textAlign, QTransform &fontTransform);
+ inline void parseTSpan(const QDomElement &element, QTextCursor &cursor
+ , QTextBlockFormat &blockFormat, QTextCharFormat &charFormat);
+ inline void hashSceneItem(const QDomElement &element, UBGraphicsItem *item);
+
+ // to kill
+ inline void parseTextAttributes(const QDomElement &element, qreal &fontSize, QColor &fontColor,
+ QString &fontFamily, QString &fontStretch, bool &italic,
+ int &fontWeight, int &textAlign, QTransform &fontTransform);
+ inline void parseTextAttributes(const QDomElement &element, QFont &font, QColor);
+ inline void readTextBlockAttr(const QDomElement &element, QTextBlockFormat &format);
+ inline void readTextCharAttr(const QDomElement &element, QTextCharFormat &format);
+
+ //elements parsing methods
+ bool parseDoc();
+
+ bool createNewScene();
+ bool persistCurrentScene();
+ bool persistScenes();
+
+// helper methods
+ void repositionSvgItem(QGraphicsItem *item, qreal width, qreal height,
+ qreal x, qreal y,
+ QTransform &transform);
+ QColor colorFromString(const QString& clrString);
+ QTransform transformFromString(const QString trString, QGraphicsItem *item = 0);
+ bool getViewBoxDimenstions(const QString& viewBox);
+ QSvgGenerator* createSvgGenerator(qreal width, qreal height);
+ bool getTempFileName();
+ inline bool strToBool(QString);
+ bool createTempFlashPath();
+ };
+};
+
+#endif // UBCFFSUBSETADAPTOR_H
diff --git a/Sankore-3.1/src/adaptors/UBExportAdaptor.cpp b/Sankore-3.1/src/adaptors/UBExportAdaptor.cpp
index 67c0068..8a8df9a 100644
--- a/Sankore-3.1/src/adaptors/UBExportAdaptor.cpp
+++ b/Sankore-3.1/src/adaptors/UBExportAdaptor.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBExportAdaptor.h"
#include "document/UBDocumentProxy.h"
@@ -38,6 +39,7 @@
UBExportAdaptor::UBExportAdaptor(QObject *parent)
: QObject(parent)
, mIsVerbose(true)
+ , mAssociatedAction(0)
{
// NOOP
}
@@ -120,4 +122,4 @@ void UBExportAdaptor::showErrorsList(QList<QString> errorsList)
dialog->setMessages(errorsList);
dialog->show();
}
-}
\ No newline at end of file
+}
diff --git a/Sankore-3.1/src/adaptors/UBExportAdaptor.h b/Sankore-3.1/src/adaptors/UBExportAdaptor.h
index bedba66..0430229 100644
--- a/Sankore-3.1/src/adaptors/UBExportAdaptor.h
+++ b/Sankore-3.1/src/adaptors/UBExportAdaptor.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBEXPORTADAPTOR_H_
#define UBEXPORTADAPTOR_H_
@@ -29,7 +30,7 @@ class UBDocumentProxy;
class UBExportAdaptor : public QObject
{
- Q_OBJECT;
+ Q_OBJECT
public:
UBExportAdaptor(QObject *parent = 0);
@@ -38,6 +39,9 @@ class UBExportAdaptor : public QObject
virtual QString exportName() = 0;
virtual QString exportExtention() { return "";}
virtual void persist(UBDocumentProxy* pDocument) = 0;
+ virtual bool associatedActionactionAvailableFor(const QModelIndex &selectedIndex) {Q_UNUSED(selectedIndex); return false;}
+ QAction *associatedAction() {return mAssociatedAction;}
+ void setAssociatedAction(QAction *pAssociatedAction) {mAssociatedAction = pAssociatedAction;}
virtual void setVerbode(bool verbose)
{
@@ -56,6 +60,7 @@ class UBExportAdaptor : public QObject
void showErrorsList(QList<QString> errorsList);
bool mIsVerbose;
+ QPointer<QAction>mAssociatedAction;
};
diff --git a/Sankore-3.1/src/adaptors/UBExportCFF.cpp b/Sankore-3.1/src/adaptors/UBExportCFF.cpp
index b4eedcb..b036b2a 100644
--- a/Sankore-3.1/src/adaptors/UBExportCFF.cpp
+++ b/Sankore-3.1/src/adaptors/UBExportCFF.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,12 +20,17 @@
*/
+
#include "UBExportCFF.h"
#include "UBCFFAdaptor.h"
#include "document/UBDocumentProxy.h"
#include "core/UBDocumentManager.h"
#include "core/UBApplication.h"
#include "core/memcheck.h"
+#include "document/UBDocumentController.h"
+
+#include <QModelIndex>
+#include <QObject>
UBExportCFF::UBExportCFF(QObject *parent)
@@ -81,4 +86,14 @@ void UBExportCFF::persist(UBDocumentProxy* pDocument)
}
-}
\ No newline at end of file
+}
+
+bool UBExportCFF::associatedActionactionAvailableFor(const QModelIndex &selectedIndex)
+{
+ const UBDocumentTreeModel *docModel = qobject_cast<const UBDocumentTreeModel*>(selectedIndex.model());
+ if (!selectedIndex.isValid() || docModel->isCatalog(selectedIndex)) {
+ return false;
+ }
+
+ return true;
+}
diff --git a/Sankore-3.1/src/adaptors/UBExportCFF.h b/Sankore-3.1/src/adaptors/UBExportCFF.h
index e9d15b6..ce103e2 100644
--- a/Sankore-3.1/src/adaptors/UBExportCFF.h
+++ b/Sankore-3.1/src/adaptors/UBExportCFF.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBExportCFF_H_
#define UBExportCFF_H_
@@ -33,7 +34,7 @@ class UBDocumentProxy;
class UBExportCFF : public UBExportAdaptor
{
- Q_OBJECT;
+ Q_OBJECT
public:
UBExportCFF(QObject *parent = 0);
@@ -42,6 +43,7 @@ public:
virtual QString exportName();
virtual QString exportExtention();
virtual void persist(UBDocumentProxy* pDocument);
+ virtual bool associatedActionactionAvailableFor(const QModelIndex &selectedIndex);
};
-#endif /* UBExportCFF_H_ */
\ No newline at end of file
+#endif /* UBExportCFF_H_ */
diff --git a/Sankore-3.1/src/adaptors/UBExportDocument.cpp b/Sankore-3.1/src/adaptors/UBExportDocument.cpp
index 38f3c76..257cdd4 100644
--- a/Sankore-3.1/src/adaptors/UBExportDocument.cpp
+++ b/Sankore-3.1/src/adaptors/UBExportDocument.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -28,6 +28,7 @@
#include "core/UBApplication.h"
#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
#include "globals/UBGlobals.h"
@@ -125,3 +126,14 @@ QString UBExportDocument::exportName()
{
return tr("Export to Sankore Format");
}
+
+bool UBExportDocument::associatedActionactionAvailableFor(const QModelIndex &selectedIndex)
+{
+ const UBDocumentTreeModel *docModel = qobject_cast<const UBDocumentTreeModel*>(selectedIndex.model());
+ if (!selectedIndex.isValid() || docModel->isCatalog(selectedIndex)) {
+ return false;
+ }
+
+ return true;
+}
+
diff --git a/Sankore-3.1/src/adaptors/UBExportDocument.h b/Sankore-3.1/src/adaptors/UBExportDocument.h
index 3b8e2c5..8567606 100644
--- a/Sankore-3.1/src/adaptors/UBExportDocument.h
+++ b/Sankore-3.1/src/adaptors/UBExportDocument.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBEXPORTDOCUMENT_H_
#define UBEXPORTDOCUMENT_H_
@@ -34,7 +35,7 @@ class UBDocumentProxy;
class UBExportDocument : public UBExportAdaptor, public UBProcessingProgressListener
{
- Q_OBJECT;
+ Q_OBJECT
public:
UBExportDocument(QObject *parent = 0);
@@ -47,6 +48,10 @@ class UBExportDocument : public UBExportAdaptor, public UBProcessingProgressList
virtual void persistsDocument(UBDocumentProxy* pDocument, QString filename);
virtual void processing(const QString& pObjectName, int pCurrent, int pTotal);
+
+ virtual bool associatedActionactionAvailableFor(const QModelIndex &selectedIndex);
+
+
};
#endif /* UBEXPORTDOCUMENT_H_ */
diff --git a/Sankore-3.1/src/adaptors/UBExportDocumentSetAdaptor.cpp b/Sankore-3.1/src/adaptors/UBExportDocumentSetAdaptor.cpp
new file mode 100644
index 0000000..4a1aa17
--- /dev/null
+++ b/Sankore-3.1/src/adaptors/UBExportDocumentSetAdaptor.cpp
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "UBExportDocumentSetAdaptor.h"
+#include "UBExportDocument.h"
+
+#include "frameworks/UBPlatformUtils.h"
+
+#include "core/UBDocumentManager.h"
+#include "core/UBApplication.h"
+
+#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
+
+#include "globals/UBGlobals.h"
+#include "core/UBPersistenceManager.h"
+
+THIRD_PARTY_WARNINGS_DISABLE
+#include "quazip.h"
+#include "quazipfile.h"
+THIRD_PARTY_WARNINGS_ENABLE
+
+#include "transition/UniboardSankoreTransition.h"
+
+#include "core/memcheck.h"
+
+UBExportDocumentSetAdaptor::UBExportDocumentSetAdaptor(QObject *parent)
+ : UBExportAdaptor(parent)
+{
+
+}
+
+UBExportDocumentSetAdaptor::~UBExportDocumentSetAdaptor()
+{
+ // NOOP
+}
+
+void UBExportDocumentSetAdaptor::persist(UBDocumentProxy* pDocumentProxy)
+{
+ QModelIndex treeViewParentIndex;
+ UBPersistenceManager *persistenceManager = UBPersistenceManager::persistenceManager();
+ UBDocumentTreeModel *treeModel = persistenceManager->mDocumentTreeStructureModel;
+ QString filename;
+
+ if (pDocumentProxy) {
+ treeViewParentIndex = treeModel->indexForProxy(pDocumentProxy);
+ if (!treeViewParentIndex.isValid()) {
+ qDebug() << "failed to export";
+ UBApplication::showMessage(tr("Failed to export..."));
+ return;
+ }
+ filename = askForFileName(pDocumentProxy, tr("Export as UBX File"));
+
+ } else {
+ treeViewParentIndex = UBApplication::documentController->firstSelectedTreeIndex();
+ if (!treeViewParentIndex.isValid()) {
+ qDebug() << "failed to export";
+ UBApplication::showMessage(tr("Failed to export..."));
+ return;
+ }
+ UBDocumentProxy proxy;
+ filename = askForFileName(&proxy, tr("Export as UBX File"));
+ }
+
+ if (filename.length() > 0)
+ {
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+
+ if (mIsVerbose)
+ UBApplication::showMessage(tr("Exporting document..."));
+
+ if (persistData(treeViewParentIndex, filename)) {
+ if (mIsVerbose) {
+ UBApplication::showMessage(tr("Export successful."));
+ }
+ } else {
+ if (mIsVerbose) {
+ UBApplication::showMessage(tr("Export failed."));
+ }
+ }
+
+ QApplication::restoreOverrideCursor();
+ }
+}
+
+bool UBExportDocumentSetAdaptor::persistData(const QModelIndex &pRootIndex, QString filename)
+{
+ UBPersistenceManager *persistenceManager = UBPersistenceManager::persistenceManager();
+ UBDocumentTreeModel *treeModel = persistenceManager->mDocumentTreeStructureModel;
+
+ QModelIndex index = pRootIndex;
+
+ if (!index.isValid()) {
+ return false;
+ }
+
+ QuaZip zip(filename);
+ zip.setFileNameCodec("UTF-8");
+
+ if(!zip.open(QuaZip::mdCreate))
+ {
+ qWarning("Export failed. Cause: zip.open(): %d", zip.getZipError());
+ return false;
+ }
+
+ if (!addDocumentToZip(pRootIndex, treeModel, zip)) {
+ zip.close();
+ return false;
+ }
+
+ zip.close();
+ UBPlatformUtils::setFileType(filename, 0x5542647A /* UBdz */);
+
+ return true;
+}
+
+QString UBExportDocumentSetAdaptor::exportExtention()
+{
+ return QString(".ubx");
+}
+
+QString UBExportDocumentSetAdaptor::exportName()
+{
+ return tr("Export to Sankore UBX Format");
+}
+
+bool UBExportDocumentSetAdaptor::addDocumentToZip(const QModelIndex &pIndex, UBDocumentTreeModel *model, QuaZip &zip)
+{
+ static int i = 0;
+ i++;
+
+ QModelIndex parentIndex = pIndex;
+ if (!parentIndex.isValid()) {
+ return false;
+ }
+
+ UBDocumentProxy *pDocumentProxy = model->proxyForIndex(parentIndex);
+ if (pDocumentProxy) {
+ UniboardSankoreTransition document;
+ QString documentPath(pDocumentProxy->persistencePath());
+ document.checkDocumentDirectory(documentPath);
+
+ QDir documentDir = QDir(pDocumentProxy->persistencePath());
+ QuaZipFile zipFile(&zip);
+ UBFileSystemUtils::compressDirInZip(documentDir, QFileInfo(documentPath).fileName() + "/", &zipFile, false);
+
+ if(zip.getZipError() != 0)
+ {
+ qWarning("Export failed. Cause: zip.close(): %d", zip.getZipError());
+ }
+ }
+
+ for (int i = 0; i < model->rowCount(parentIndex); ++i) {
+ QModelIndex curIndex = model->index(i, 0, parentIndex);
+ if (!addDocumentToZip(curIndex, model, zip)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool UBExportDocumentSetAdaptor::associatedActionactionAvailableFor(const QModelIndex &selectedIndex)
+{
+ const UBDocumentTreeModel *docModel = qobject_cast<const UBDocumentTreeModel*>(selectedIndex.model());
+ if (!selectedIndex.isValid() || docModel->isDocument(selectedIndex)) {
+ return false;
+ }
+
+ return true;
+}
+
diff --git a/Sankore-3.1/src/adaptors/UBExportDocumentSetAdaptor.h b/Sankore-3.1/src/adaptors/UBExportDocumentSetAdaptor.h
new file mode 100644
index 0000000..8e46337
--- /dev/null
+++ b/Sankore-3.1/src/adaptors/UBExportDocumentSetAdaptor.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef UBEXPORTDOCUMENTSETADAPTOR_H
+#define UBEXPORTDOCUMENTSETADAPTOR_H
+
+#include <QtCore>
+#include "UBExportAdaptor.h"
+#include "frameworks/UBFileSystemUtils.h"
+#include "globals/UBGlobals.h"
+
+THIRD_PARTY_WARNINGS_DISABLE
+#include "quazip.h"
+#include "quazipfile.h"
+THIRD_PARTY_WARNINGS_ENABLE
+
+class UBDocumentProxy;
+class UBDocumentTreeModel;
+
+
+class UBExportDocumentSetAdaptor : public UBExportAdaptor
+{
+ Q_OBJECT
+
+ public:
+ UBExportDocumentSetAdaptor(QObject *parent = 0);
+ virtual ~UBExportDocumentSetAdaptor();
+
+ virtual QString exportName();
+ virtual QString exportExtention();
+
+ virtual void persist(UBDocumentProxy* pDocument);
+ bool persistData(const QModelIndex &pRootIndex, QString filename);
+ bool addDocumentToZip(const QModelIndex &pIndex, UBDocumentTreeModel *model, QuaZip &zip);
+
+ virtual bool associatedActionactionAvailableFor(const QModelIndex &selectedIndex);
+
+
+};
+
+#endif // UBEXPORTDOCUMENTSETADAPTOR_H
diff --git a/Sankore-3.1/src/adaptors/UBExportFullPDF.cpp b/Sankore-3.1/src/adaptors/UBExportFullPDF.cpp
index b3c80a1..471c22e 100644
--- a/Sankore-3.1/src/adaptors/UBExportFullPDF.cpp
+++ b/Sankore-3.1/src/adaptors/UBExportFullPDF.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBExportFullPDF.h"
#include <QtCore>
@@ -35,6 +36,7 @@
#include "domain/UBGraphicsPDFItem.h"
#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
#include "pdf/GraphicsPDFItem.h"
@@ -275,3 +277,13 @@ QString UBExportFullPDF::exportName()
{
return tr("Export to PDF");
}
+
+bool UBExportFullPDF::associatedActionactionAvailableFor(const QModelIndex &selectedIndex)
+{
+ const UBDocumentTreeModel *docModel = qobject_cast<const UBDocumentTreeModel*>(selectedIndex.model());
+ if (!selectedIndex.isValid() || docModel->isCatalog(selectedIndex)) {
+ return false;
+ }
+
+ return true;
+}
diff --git a/Sankore-3.1/src/adaptors/UBExportFullPDF.h b/Sankore-3.1/src/adaptors/UBExportFullPDF.h
index 41274b8..49e0b97 100644
--- a/Sankore-3.1/src/adaptors/UBExportFullPDF.h
+++ b/Sankore-3.1/src/adaptors/UBExportFullPDF.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBExportFullPDF_H_
#define UBExportFullPDF_H_
@@ -30,7 +31,7 @@ class UBDocumentProxy;
class UBExportFullPDF : public UBExportAdaptor
{
- Q_OBJECT;
+ Q_OBJECT
public:
UBExportFullPDF(QObject *parent = 0);
@@ -41,6 +42,7 @@ class UBExportFullPDF : public UBExportAdaptor
virtual void persist(UBDocumentProxy* pDocument);
virtual void persistsDocument(UBDocumentProxy* pDocument, const QString& filename);
+ virtual bool associatedActionactionAvailableFor(const QModelIndex &selectedIndex);
protected:
void saveOverlayPdf(UBDocumentProxy* pDocumentProxy, const QString& filename);
diff --git a/Sankore-3.1/src/adaptors/UBExportPDF.cpp b/Sankore-3.1/src/adaptors/UBExportPDF.cpp
index 682583b..6400130 100644
--- a/Sankore-3.1/src/adaptors/UBExportPDF.cpp
+++ b/Sankore-3.1/src/adaptors/UBExportPDF.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBExportPDF.h"
#include <QtCore>
@@ -34,6 +35,7 @@
#include "domain/UBGraphicsSvgItem.h"
#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
#include "pdf/GraphicsPDFItem.h"
@@ -133,3 +135,13 @@ QString UBExportPDF::exportName()
{
return tr("Export to PDF");
}
+
+bool UBExportPDF::associatedActionactionAvailableFor(const QModelIndex &selectedIndex)
+{
+ const UBDocumentTreeModel *docModel = qobject_cast<const UBDocumentTreeModel*>(selectedIndex.model());
+ if (!selectedIndex.isValid() || docModel->isCatalog(selectedIndex)) {
+ return false;
+ }
+
+ return true;
+}
diff --git a/Sankore-3.1/src/adaptors/UBExportPDF.h b/Sankore-3.1/src/adaptors/UBExportPDF.h
index 5c0abf8..4a27b76 100644
--- a/Sankore-3.1/src/adaptors/UBExportPDF.h
+++ b/Sankore-3.1/src/adaptors/UBExportPDF.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBEXPORTPDF_H_
#define UBEXPORTPDF_H_
@@ -30,7 +31,7 @@ class UBDocumentProxy;
class UBExportPDF : public UBExportAdaptor
{
- Q_OBJECT;
+ Q_OBJECT
public:
UBExportPDF(QObject *parent = 0);
@@ -39,6 +40,7 @@ class UBExportPDF : public UBExportAdaptor
virtual QString exportName();
virtual QString exportExtention();
virtual void persist(UBDocumentProxy* pDocument);
+ virtual bool associatedActionactionAvailableFor(const QModelIndex &selectedIndex);
static void persistsDocument(UBDocumentProxy* pDocument, const QString& filename);
};
diff --git a/Sankore-3.1/src/adaptors/UBExportWeb.cpp b/Sankore-3.1/src/adaptors/UBExportWeb.cpp
index 1745592..41cd942 100644
--- a/Sankore-3.1/src/adaptors/UBExportWeb.cpp
+++ b/Sankore-3.1/src/adaptors/UBExportWeb.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBExportWeb.h"
#include "frameworks/UBPlatformUtils.h"
@@ -29,6 +30,7 @@
#include "core/UBApplication.h"
#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
#include "globals/UBGlobals.h"
@@ -90,3 +92,13 @@ QString UBExportWeb::exportName()
{
return tr("Export to Web Browser");
}
+
+bool UBExportWeb::associatedActionactionAvailableFor(const QModelIndex &selectedIndex)
+{
+ const UBDocumentTreeModel *docModel = qobject_cast<const UBDocumentTreeModel*>(selectedIndex.model());
+ if (!selectedIndex.isValid() || docModel->isCatalog(selectedIndex)) {
+ return false;
+ }
+
+ return true;
+}
diff --git a/Sankore-3.1/src/adaptors/UBExportWeb.h b/Sankore-3.1/src/adaptors/UBExportWeb.h
index 970a0c3..7a20446 100644
--- a/Sankore-3.1/src/adaptors/UBExportWeb.h
+++ b/Sankore-3.1/src/adaptors/UBExportWeb.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBEXPORTWEB_H_
#define UBEXPORTWEB_H_
@@ -31,7 +32,7 @@ class UBDocumentProxy;
class UBExportWeb : public UBExportAdaptor
{
- Q_OBJECT;
+ Q_OBJECT
public:
UBExportWeb(QObject *parent = 0);
@@ -40,6 +41,8 @@ class UBExportWeb : public UBExportAdaptor
virtual QString exportName();
virtual void persist(UBDocumentProxy* pDocument);
+ virtual bool associatedActionactionAvailableFor(const QModelIndex &selectedIndex);
+
};
diff --git a/Sankore-3.1/src/adaptors/UBImportAdaptor.cpp b/Sankore-3.1/src/adaptors/UBImportAdaptor.cpp
index acf8c4f..0a842f3 100644
--- a/Sankore-3.1/src/adaptors/UBImportAdaptor.cpp
+++ b/Sankore-3.1/src/adaptors/UBImportAdaptor.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBImportAdaptor.h"
#include "core/UBApplication.h"
diff --git a/Sankore-3.1/src/adaptors/UBImportAdaptor.h b/Sankore-3.1/src/adaptors/UBImportAdaptor.h
index bc3e07d..a99a991 100644
--- a/Sankore-3.1/src/adaptors/UBImportAdaptor.h
+++ b/Sankore-3.1/src/adaptors/UBImportAdaptor.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBIMPORTADAPTOR_H_
#define UBIMPORTADAPTOR_H_
diff --git a/Sankore-3.1/src/adaptors/UBImportCFF.cpp b/Sankore-3.1/src/adaptors/UBImportCFF.cpp
index df6c88e..611b316 100644
--- a/Sankore-3.1/src/adaptors/UBImportCFF.cpp
+++ b/Sankore-3.1/src/adaptors/UBImportCFF.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,270 +18,277 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include <QDir>
-#include <QList>
-
-#include "core/UBApplication.h"
-#include "core/UBPersistenceManager.h"
-#include "core/UBDocumentManager.h"
-#include "core/UBPersistenceManager.h"
-#include "document/UBDocumentProxy.h"
-#include "domain/UBGraphicsPDFItem.h"
-#include "frameworks/UBFileSystemUtils.h"
-#include "pdf/PDFRenderer.h"
-
-#include "UBCFFSubsetAdaptor.h"
-#include "UBImportCFF.h"
-
-#include "globals/UBGlobals.h"
-
-THIRD_PARTY_WARNINGS_DISABLE
-#include "quazip.h"
-#include "quazipfile.h"
-#include "quazipfileinfo.h"
-THIRD_PARTY_WARNINGS_ENABLE
-
-#include "core/memcheck.h"
-
-UBImportCFF::UBImportCFF(QObject *parent)
- : UBDocumentBasedImportAdaptor(parent)
-{
- // NOOP
-}
-
-
-UBImportCFF::~UBImportCFF()
-{
- // NOOP
-}
-
-
-QStringList UBImportCFF::supportedExtentions()
-{
- return QStringList("iwb");
-}
-
-
-QString UBImportCFF::importFileFilter()
-{
- QString filter = tr("Common File Format (");
- QStringList formats = supportedExtentions();
- bool isFirst = true;
-
- foreach(QString format, formats)
- {
- if(isFirst)
- isFirst = false;
- else
- filter.append(" ");
-
- filter.append("*."+format);
- }
-
- filter.append(")");
-
- return filter;
-}
-
-bool UBImportCFF::addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile)
-{
- QFileInfo fi(pFile);
- UBApplication::showMessage(tr("Importing file %1...").arg(fi.baseName()), true);
-
- // first unzip the file to the correct place
- //TODO create temporary path for iwb file content
- QString path = QDir::tempPath();
-
- QString documentRootFolder = expandFileToDir(pFile, path);
- QString contentFile;
- if (documentRootFolder.isEmpty()) //if file has failed to unzip it is probably just xml file
- contentFile = pFile.fileName();
- else //get path to content xml (according to iwbcff specification)
- contentFile = documentRootFolder.append("/content.xml");
-
- if(!contentFile.length()){
- UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName()));
- return false;
- }
- else{
- //TODO convert expanded CFF file content to the destination document
- //create destination document proxy
- //fill metadata and save
- UBDocumentProxy* destDocument = new UBDocumentProxy(UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath());
- QDir dir;
- dir.mkdir(destDocument->persistencePath());
-
- //try to import cff to document
- if (UBCFFSubsetAdaptor::ConvertCFFFileToUbz(contentFile, destDocument))
- {
- UBPersistenceManager::persistenceManager()->addDirectoryContentToDocument(destDocument->persistencePath(), pDocument);
- UBFileSystemUtils::deleteDir(destDocument->persistencePath());
- delete destDocument;
- UBApplication::showMessage(tr("Import successful."));
- return true;
- }
- else
- {
- UBFileSystemUtils::deleteDir(destDocument->persistencePath());
- delete destDocument;
- UBApplication::showMessage(tr("Import failed."));
- return false;
- }
- }
-}
-
-QString UBImportCFF::expandFileToDir(const QFile& pZipFile, const QString& pDir)
-{
- QuaZip zip(pZipFile.fileName());
-
- if(!zip.open(QuaZip::mdUnzip)) {
- qWarning() << "Import failed. Cause zip.open(): " << zip.getZipError();
- return "";
- }
-
- zip.setFileNameCodec("UTF-8");
- QuaZipFileInfo info;
- QuaZipFile file(&zip);
-
- //create unique cff document root fodler
- //use current date/time and temp number for folder name
- QString documentRootFolder;
- int tmpNumber = 0;
- QDir rootDir;
- while (true) {
- QString tempPath = QString("%1/sank%2.%3")
- .arg(pDir)
- .arg(QDateTime::currentDateTime().toString("dd_MM_yyyy_HH-mm"))
- .arg(tmpNumber);
- if (!rootDir.exists(tempPath)) {
- documentRootFolder = tempPath;
- break;
- }
- tmpNumber++;
- if (tmpNumber == 100000) {
- qWarning() << "Import failed. Failed to create temporary directory for iwb file";
- return "";
- }
- }
- if (!rootDir.mkdir(documentRootFolder)) {
- qWarning() << "Import failed. Couse: failed to create temp folder for cff package";
- }
-
- QFile out;
- char c;
- for(bool more=zip.goToFirstFile(); more; more=zip.goToNextFile()) {
- if(!zip.getCurrentFileInfo(&info)) {
- //TOD UB 4.3 O display error to user or use crash reporter
- qWarning() << "Import failed. Cause: getCurrentFileInfo(): " << zip.getZipError();
- return "";
- }
-// if(!file.open(QIODevice::ReadOnly)) {
-// qWarning() << "Import failed. Cause: file.open(): " << zip.getZipError();
-// return "";
-// }
- file.open(QIODevice::ReadOnly);
- if(file.getZipError()!= UNZ_OK) {
- qWarning() << "Import failed. Cause: file.getFileName(): " << zip.getZipError();
- return "";
- }
-
- QString newFileName = documentRootFolder + "/" + file.getActualFileName();
-
- QFileInfo newFileInfo(newFileName);
- rootDir.mkpath(newFileInfo.absolutePath());
-
- out.setFileName(newFileName);
- out.open(QIODevice::WriteOnly);
-
- while(file.getChar(&c))
- out.putChar(c);
-
- out.close();
-
- if(file.getZipError()!=UNZ_OK) {
- qWarning() << "Import failed. Cause: " << zip.getZipError();
- return "";
- }
- if(!file.atEnd()) {
- qWarning() << "Import failed. Cause: read all but not EOF";
- return "";
- }
-
- file.close();
-
- if(file.getZipError()!=UNZ_OK) {
- qWarning() << "Import failed. Cause: file.close(): " << file.getZipError();
- return "";
- }
- }
-
- zip.close();
-
- if(zip.getZipError()!=UNZ_OK) {
- qWarning() << "Import failed. Cause: zip.close(): " << zip.getZipError();
- return "";
- }
-
- return documentRootFolder;
-}
-
-
-UBDocumentProxy* UBImportCFF::importFile(const QFile& pFile, const QString& pGroup)
-{
- Q_UNUSED(pGroup); // group is defined in the imported file
-
- QFileInfo fi(pFile);
- UBApplication::showMessage(tr("Importing file %1...").arg(fi.baseName()), true);
-
- // first unzip the file to the correct place
- //TODO create temporary path for iwb file content
- QString path = QDir::tempPath();
-
- QString documentRootFolder = expandFileToDir(pFile, path);
- QString contentFile;
- if (documentRootFolder.isEmpty())
- //if file has failed to umzip it is probably just xml file
- contentFile = pFile.fileName();
- else
- //get path to content xml
- contentFile = QString("%1/content.xml").arg(documentRootFolder);
-
- if(!contentFile.length()){
- UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName()));
- return 0;
- }
- else{
- //create destination document proxy
- //fill metadata and save
- UBDocumentProxy* destDocument = new UBDocumentProxy(UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath());
- QDir dir;
- dir.mkdir(destDocument->persistencePath());
- if (pGroup.length() > 0)
- destDocument->setMetaData(UBSettings::documentGroupName, pGroup);
- if (fi.baseName() > 0)
- destDocument->setMetaData(UBSettings::documentName, fi.baseName());
-
- destDocument->setMetaData(UBSettings::documentVersion, UBSettings::currentFileVersion);
- destDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
-
- UBDocumentProxy* newDocument = NULL;
- //try to import cff to document
- if (UBCFFSubsetAdaptor::ConvertCFFFileToUbz(contentFile, destDocument))
- {
- newDocument = UBPersistenceManager::persistenceManager()->createDocumentFromDir(destDocument->persistencePath());
- UBApplication::showMessage(tr("Import successful."));
- }
- else
- {
- UBFileSystemUtils::deleteDir(destDocument->persistencePath());
- UBApplication::showMessage(tr("Import failed."));
- }
- delete destDocument;
-
- if (documentRootFolder.length() != 0)
- UBFileSystemUtils::deleteDir(documentRootFolder);
- return newDocument;
- }
-}
+
+
+
+#include <QDir>
+#include <QList>
+
+#include "core/UBApplication.h"
+#include "core/UBPersistenceManager.h"
+#include "core/UBDocumentManager.h"
+#include "core/UBPersistenceManager.h"
+#include "document/UBDocumentProxy.h"
+#include "domain/UBGraphicsPDFItem.h"
+#include "frameworks/UBFileSystemUtils.h"
+#include "pdf/PDFRenderer.h"
+
+#include "UBCFFSubsetAdaptor.h"
+#include "UBImportCFF.h"
+
+#include "globals/UBGlobals.h"
+
+THIRD_PARTY_WARNINGS_DISABLE
+#include "quazip.h"
+#include "quazipfile.h"
+#include "quazipfileinfo.h"
+THIRD_PARTY_WARNINGS_ENABLE
+
+#include "core/memcheck.h"
+
+UBImportCFF::UBImportCFF(QObject *parent)
+ : UBDocumentBasedImportAdaptor(parent)
+{
+ // NOOP
+}
+
+
+UBImportCFF::~UBImportCFF()
+{
+ // NOOP
+}
+
+
+QStringList UBImportCFF::supportedExtentions()
+{
+ return QStringList("iwb");
+}
+
+
+QString UBImportCFF::importFileFilter()
+{
+ QString filter = tr("Common File Format (");
+ QStringList formats = supportedExtentions();
+ bool isFirst = true;
+
+ foreach(QString format, formats)
+ {
+ if(isFirst)
+ isFirst = false;
+ else
+ filter.append(" ");
+
+ filter.append("*."+format);
+ }
+
+ filter.append(")");
+
+ return filter;
+}
+
+bool UBImportCFF::addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile)
+{
+ QFileInfo fi(pFile);
+ UBApplication::showMessage(tr("Importing file %1...").arg(fi.baseName()), true);
+
+ // first unzip the file to the correct place
+ //TODO create temporary path for iwb file content
+ QString path = QDir::tempPath();
+
+ QString documentRootFolder = expandFileToDir(pFile, path);
+ QString contentFile;
+ if (documentRootFolder.isEmpty()) //if file has failed to unzip it is probably just xml file
+ contentFile = pFile.fileName();
+ else //get path to content xml (according to iwbcff specification)
+ contentFile = documentRootFolder.append("/content.xml");
+
+ if(!contentFile.length()){
+ UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName()));
+ return false;
+ }
+ else{
+ //TODO convert expanded CFF file content to the destination document
+ //create destination document proxy
+ //fill metadata and save
+ UBDocumentProxy* destDocument = new UBDocumentProxy(UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath());
+ QDir dir;
+ dir.mkdir(destDocument->persistencePath());
+
+ //try to import cff to document
+ if (UBCFFSubsetAdaptor::ConvertCFFFileToUbz(contentFile, destDocument))
+ {
+ UBPersistenceManager::persistenceManager()->addDirectoryContentToDocument(destDocument->persistencePath(), pDocument);
+ UBFileSystemUtils::deleteDir(destDocument->persistencePath());
+ delete destDocument;
+ UBApplication::showMessage(tr("Import successful."));
+ return true;
+ }
+ else
+ {
+ UBFileSystemUtils::deleteDir(destDocument->persistencePath());
+ delete destDocument;
+ UBApplication::showMessage(tr("Import failed."));
+ return false;
+ }
+ }
+}
+
+QString UBImportCFF::expandFileToDir(const QFile& pZipFile, const QString& pDir)
+{
+ QuaZip zip(pZipFile.fileName());
+
+ if(!zip.open(QuaZip::mdUnzip)) {
+ qWarning() << "Import failed. Cause zip.open(): " << zip.getZipError();
+ return "";
+ }
+
+ zip.setFileNameCodec("UTF-8");
+ QuaZipFileInfo info;
+ QuaZipFile file(&zip);
+
+ //create unique cff document root fodler
+ //use current date/time and temp number for folder name
+ QString documentRootFolder;
+ int tmpNumber = 0;
+ QDir rootDir;
+ while (true) {
+ QString tempPath = QString("%1/sank%2.%3")
+ .arg(pDir)
+ .arg(QDateTime::currentDateTime().toString("dd_MM_yyyy_HH-mm"))
+ .arg(tmpNumber);
+ if (!rootDir.exists(tempPath)) {
+ documentRootFolder = tempPath;
+ break;
+ }
+ tmpNumber++;
+ if (tmpNumber == 100000) {
+ qWarning() << "Import failed. Failed to create temporary directory for iwb file";
+ return "";
+ }
+ }
+ if (!rootDir.mkdir(documentRootFolder)) {
+ qWarning() << "Import failed. Couse: failed to create temp folder for cff package";
+ }
+
+ QFile out;
+ char c;
+ for(bool more=zip.goToFirstFile(); more; more=zip.goToNextFile()) {
+ if(!zip.getCurrentFileInfo(&info)) {
+ //TOD UB 4.3 O display error to user or use crash reporter
+ qWarning() << "Import failed. Cause: getCurrentFileInfo(): " << zip.getZipError();
+ return "";
+ }
+// if(!file.open(QIODevice::ReadOnly)) {
+// qWarning() << "Import failed. Cause: file.open(): " << zip.getZipError();
+// return "";
+// }
+ file.open(QIODevice::ReadOnly);
+ if(file.getZipError()!= UNZ_OK) {
+ qWarning() << "Import failed. Cause: file.getFileName(): " << zip.getZipError();
+ return "";
+ }
+
+ QString newFileName = documentRootFolder + "/" + file.getActualFileName();
+
+ QFileInfo newFileInfo(newFileName);
+ rootDir.mkpath(newFileInfo.absolutePath());
+
+ out.setFileName(newFileName);
+ out.open(QIODevice::WriteOnly);
+
+ while(file.getChar(&c))
+ out.putChar(c);
+
+ out.close();
+
+ if(file.getZipError()!=UNZ_OK) {
+ qWarning() << "Import failed. Cause: " << zip.getZipError();
+ return "";
+ }
+ if(!file.atEnd()) {
+ qWarning() << "Import failed. Cause: read all but not EOF";
+ return "";
+ }
+
+ file.close();
+
+ if(file.getZipError()!=UNZ_OK) {
+ qWarning() << "Import failed. Cause: file.close(): " << file.getZipError();
+ return "";
+ }
+ }
+
+ zip.close();
+
+ if(zip.getZipError()!=UNZ_OK) {
+ qWarning() << "Import failed. Cause: zip.close(): " << zip.getZipError();
+ return "";
+ }
+
+ return documentRootFolder;
+}
+
+
+UBDocumentProxy* UBImportCFF::importFile(const QFile& pFile, const QString& pGroup)
+{
+ Q_UNUSED(pGroup); // group is defined in the imported file
+
+ QFileInfo fi(pFile);
+ UBApplication::showMessage(tr("Importing file %1...").arg(fi.baseName()), true);
+
+ // first unzip the file to the correct place
+ //TODO create temporary path for iwb file content
+ QString path = QDir::tempPath();
+
+ QString documentRootFolder = expandFileToDir(pFile, path);
+ QString contentFile;
+ if (documentRootFolder.isEmpty())
+ //if file has failed to umzip it is probably just xml file
+ contentFile = pFile.fileName();
+ else
+ //get path to content xml
+ contentFile = QString("%1/content.xml").arg(documentRootFolder);
+
+ if(!contentFile.length()){
+ UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName()));
+ return 0;
+ }
+ else{
+ //create destination document proxy
+ //fill metadata and save
+ UBDocumentProxy* destDocument = new UBDocumentProxy(UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath());
+ QDir dir;
+ dir.mkdir(destDocument->persistencePath());
+ if (pGroup.length() > 0)
+ destDocument->setMetaData(UBSettings::documentGroupName, pGroup);
+ if (fi.baseName() > 0)
+ destDocument->setMetaData(UBSettings::documentName, fi.baseName());
+
+ destDocument->setMetaData(UBSettings::documentVersion, UBSettings::currentFileVersion);
+ destDocument->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+
+ UBDocumentProxy* newDocument = NULL;
+ //try to import cff to document
+ if (UBCFFSubsetAdaptor::ConvertCFFFileToUbz(contentFile, destDocument))
+ {
+ newDocument = UBPersistenceManager::persistenceManager()->createDocumentFromDir(destDocument->persistencePath()
+ ,""
+ ,""
+ ,false
+ ,false
+ ,true);
+
+ UBApplication::showMessage(tr("Import successful."));
+ }
+ else
+ {
+ UBFileSystemUtils::deleteDir(destDocument->persistencePath());
+ UBApplication::showMessage(tr("Import failed."));
+ }
+ delete destDocument;
+
+ if (documentRootFolder.length() != 0)
+ UBFileSystemUtils::deleteDir(documentRootFolder);
+ return newDocument;
+ }
+}
diff --git a/Sankore-3.1/src/adaptors/UBImportCFF.h b/Sankore-3.1/src/adaptors/UBImportCFF.h
index f3bd163..d06b9d1 100644
--- a/Sankore-3.1/src/adaptors/UBImportCFF.h
+++ b/Sankore-3.1/src/adaptors/UBImportCFF.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,32 +18,33 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBIMPORTCFF_H
-#define UBIMPORTCFF_H
-
-#include <QtGui>
-#include "UBImportAdaptor.h"
-
-class UBDocumentProxy;
-
-class UBImportCFF : public UBDocumentBasedImportAdaptor
-{
- Q_OBJECT;
-
- public:
- UBImportCFF(QObject *parent = 0);
- virtual ~UBImportCFF();
-
- virtual QStringList supportedExtentions();
- virtual QString importFileFilter();
-
- virtual bool addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile);
- virtual UBDocumentProxy* importFile(const QFile& pFile, const QString& pGroup);
-
- private:
- QString expandFileToDir(const QFile& pZipFile, const QString& pDir);
-};
-
-#endif // UBIMPORTCFF_H
+
+
+
+#ifndef UBIMPORTCFF_H
+#define UBIMPORTCFF_H
+
+#include <QtGui>
+#include "UBImportAdaptor.h"
+
+class UBDocumentProxy;
+
+class UBImportCFF : public UBDocumentBasedImportAdaptor
+{
+ Q_OBJECT;
+
+ public:
+ UBImportCFF(QObject *parent = 0);
+ virtual ~UBImportCFF();
+
+ virtual QStringList supportedExtentions();
+ virtual QString importFileFilter();
+
+ virtual bool addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile);
+ virtual UBDocumentProxy* importFile(const QFile& pFile, const QString& pGroup);
+
+ private:
+ QString expandFileToDir(const QFile& pZipFile, const QString& pDir);
+};
+
+#endif // UBIMPORTCFF_H
diff --git a/Sankore-3.1/src/adaptors/UBImportDocument.cpp b/Sankore-3.1/src/adaptors/UBImportDocument.cpp
index aa03fff..d5dbb4a 100644
--- a/Sankore-3.1/src/adaptors/UBImportDocument.cpp
+++ b/Sankore-3.1/src/adaptors/UBImportDocument.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBImportDocument.h"
#include "document/UBDocumentProxy.h"
@@ -182,7 +183,12 @@ UBDocumentProxy* UBImportDocument::importFile(const QFile& pFile, const QString&
if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool() && !QFile(documentRootFolder+"/page000.svg").exists())
addTitlePage=true;
- UBDocumentProxy* newDocument = UBPersistenceManager::persistenceManager()->createDocumentFromDir(documentRootFolder, pGroup, "", false, addTitlePage);
+ UBDocumentProxy* newDocument = UBPersistenceManager::persistenceManager()->createDocumentFromDir(documentRootFolder
+ , pGroup
+ , ""
+ , false
+ , addTitlePage
+ , true);
UBApplication::showMessage(tr("Import successful."));
return newDocument;
}
diff --git a/Sankore-3.1/src/adaptors/UBImportDocument.h b/Sankore-3.1/src/adaptors/UBImportDocument.h
index 7b223f8..8ac246f 100644
--- a/Sankore-3.1/src/adaptors/UBImportDocument.h
+++ b/Sankore-3.1/src/adaptors/UBImportDocument.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBIMPORTDOCUMENT_H_
#define UBIMPORTDOCUMENT_H_
diff --git a/Sankore-3.1/src/adaptors/UBImportDocumentSetAdaptor.cpp b/Sankore-3.1/src/adaptors/UBImportDocumentSetAdaptor.cpp
new file mode 100644
index 0000000..5488805
--- /dev/null
+++ b/Sankore-3.1/src/adaptors/UBImportDocumentSetAdaptor.cpp
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "UBImportDocumentSetAdaptor.h"
+
+#include "document/UBDocumentProxy.h"
+
+#include "frameworks/UBFileSystemUtils.h"
+
+#include "core/UBApplication.h"
+#include "core/UBSettings.h"
+#include "core/UBPersistenceManager.h"
+
+#include "globals/UBGlobals.h"
+
+THIRD_PARTY_WARNINGS_DISABLE
+#include "quazip.h"
+#include "quazipfile.h"
+#include "quazipfileinfo.h"
+THIRD_PARTY_WARNINGS_ENABLE
+
+#include "core/memcheck.h"
+
+UBImportDocumentSetAdaptor::UBImportDocumentSetAdaptor(QObject *parent)
+ :UBImportAdaptor(parent)
+{
+ // NOOP
+}
+
+UBImportDocumentSetAdaptor::~UBImportDocumentSetAdaptor()
+{
+ // NOOP
+}
+
+
+QStringList UBImportDocumentSetAdaptor::supportedExtentions()
+{
+ return QStringList("ubx");
+}
+
+
+QString UBImportDocumentSetAdaptor::importFileFilter()
+{
+ return tr("Open-Sankore (set of documents) (*.ubx)");
+}
+
+QFileInfoList UBImportDocumentSetAdaptor::importData(const QString &zipFile, const QString &destination)
+{
+ //Create tmp directory to extract data, will be deleted after
+ QString tmpDir;
+ int i = 0;
+ QFileInfoList result;
+ do {
+ tmpDir = QDir::tempPath() + "/Sankore_tmpImportUBX_" + QString::number(i++);
+ } while (QFileInfo(tmpDir).exists());
+
+ QDir(QDir::tempPath()).mkdir(tmpDir);
+
+ QFile fZipFile(zipFile);
+
+ if (!extractFileToDir(fZipFile, tmpDir)) {
+ UBFileSystemUtils::deleteDir(tmpDir);
+ return QFileInfoList();
+ }
+
+ QDir tDir(tmpDir);
+
+ foreach(QFileInfo readDir, tDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden , QDir::Name)) {
+ QString newFileName = readDir.fileName();
+ if (QFileInfo(destination + "/" + readDir.fileName()).exists()) {
+ newFileName = QFileInfo(UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath(tmpDir)).fileName();
+ }
+ QString newFilePath = destination + "/" + newFileName;
+ if (UBFileSystemUtils::copy(readDir.absoluteFilePath(), newFilePath)) {
+ result.append(newFilePath);
+ }
+ }
+
+ UBFileSystemUtils::deleteDir(tmpDir);
+
+ return result;
+}
+
+
+bool UBImportDocumentSetAdaptor::extractFileToDir(const QFile& pZipFile, const QString& pDir)
+{
+ QDir rootDir(pDir);
+ QuaZip zip(pZipFile.fileName());
+
+ if(!zip.open(QuaZip::mdUnzip))
+ {
+ qWarning() << "Import failed. Cause zip.open(): " << zip.getZipError();
+ return false;
+ }
+
+ zip.setFileNameCodec("UTF-8");
+ QuaZipFileInfo info;
+ QuaZipFile file(&zip);
+
+ QFile out;
+ char c;
+
+ QString documentRoot = QFileInfo(pDir).absoluteFilePath();
+ for(bool more=zip.goToFirstFile(); more; more=zip.goToNextFile())
+ {
+ if(!zip.getCurrentFileInfo(&info))
+ {
+ //TOD UB 4.3 O display error to user or use crash reporter
+ qWarning() << "Import failed. Cause: getCurrentFileInfo(): " << zip.getZipError();
+ return false;
+ }
+
+ if(!file.open(QIODevice::ReadOnly))
+ {
+ qWarning() << "Import failed. Cause: file.open(): " << zip.getZipError();
+ return false;
+ }
+
+ if(file.getZipError()!= UNZ_OK)
+ {
+ qWarning() << "Import failed. Cause: file.getFileName(): " << zip.getZipError();
+ return false;
+ }
+
+ QString actFileName = file.getActualFileName();
+// int ind = actFileName.indexOf("/");
+// if ( ind!= -1) {
+// actFileName.remove(0, ind + 1);
+// }
+ QString newFileName = documentRoot + "/" + actFileName;
+ QFileInfo newFileInfo(newFileName);
+ if (!rootDir.mkpath(newFileInfo.absolutePath()))
+ return false;
+
+ out.setFileName(newFileName);
+ if (!out.open(QIODevice::WriteOnly))
+ return false;
+
+ // Slow like hell (on GNU/Linux at least), but it is not my fault.
+ // Not ZIP/UNZIP package's fault either.
+ // The slowest thing here is out.putChar(c).
+ QByteArray outFileContent = file.readAll();
+ if (out.write(outFileContent) == -1)
+ {
+ qWarning() << "Import failed. Cause: Unable to write file";
+ out.close();
+ return false;
+ }
+
+ while(file.getChar(&c))
+ out.putChar(c);
+
+ out.close();
+
+ if(file.getZipError()!=UNZ_OK)
+ {
+ qWarning() << "Import failed. Cause: " << zip.getZipError();
+ return false;
+ }
+
+ if(!file.atEnd())
+ {
+ qWarning() << "Import failed. Cause: read all but not EOF";
+ return false;
+ }
+
+ file.close();
+
+ if(file.getZipError()!=UNZ_OK)
+ {
+ qWarning() << "Import failed. Cause: file.close(): " << file.getZipError();
+ return false;
+ }
+
+ }
+
+ zip.close();
+
+ if(zip.getZipError()!=UNZ_OK)
+ {
+ qWarning() << "Import failed. Cause: zip.close(): " << zip.getZipError();
+ return false;
+ }
+
+ return true;
+}
diff --git a/Sankore-3.1/src/adaptors/UBImportDocumentSetAdaptor.h b/Sankore-3.1/src/adaptors/UBImportDocumentSetAdaptor.h
new file mode 100644
index 0000000..7e07cfc
--- /dev/null
+++ b/Sankore-3.1/src/adaptors/UBImportDocumentSetAdaptor.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef UBIMPORTDOCUMENTSETADAPTOR_H
+#define UBIMPORTDOCUMENTSETADAPTOR_H
+
+#include <QtGui>
+#include "UBImportAdaptor.h"
+
+class UBDocumentProxy;
+
+class UBImportDocumentSetAdaptor : public UBImportAdaptor
+{
+ Q_OBJECT
+
+ public:
+ UBImportDocumentSetAdaptor(QObject *parent = 0);
+ virtual ~UBImportDocumentSetAdaptor();
+
+ virtual QStringList supportedExtentions();
+ virtual QString importFileFilter();
+
+ QFileInfoList importData(const QString &zipFile, const QString &destination);
+
+// virtual UBDocumentProxy* importFile(const QFile& pFile, const QString& pGroup);
+// virtual bool addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile);
+
+ private:
+ bool extractFileToDir(const QFile& pZipFile, const QString& pDir);
+
+};
+
+#endif // UBIMPORTDOCUMENTSETADAPTOR_H
diff --git a/Sankore-3.1/src/adaptors/UBImportImage.cpp b/Sankore-3.1/src/adaptors/UBImportImage.cpp
index 697b906..ce0648e 100644
--- a/Sankore-3.1/src/adaptors/UBImportImage.cpp
+++ b/Sankore-3.1/src/adaptors/UBImportImage.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBImportImage.h"
#include "document/UBDocumentProxy.h"
diff --git a/Sankore-3.1/src/adaptors/UBImportImage.h b/Sankore-3.1/src/adaptors/UBImportImage.h
index 8706ff4..c727308 100644
--- a/Sankore-3.1/src/adaptors/UBImportImage.h
+++ b/Sankore-3.1/src/adaptors/UBImportImage.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBIMPORTIMAGE_H_
#define UBIMPORTIMAGE_H_
diff --git a/Sankore-3.1/src/adaptors/UBImportPDF.cpp b/Sankore-3.1/src/adaptors/UBImportPDF.cpp
index c73405d..552b2b8 100644
--- a/Sankore-3.1/src/adaptors/UBImportPDF.cpp
+++ b/Sankore-3.1/src/adaptors/UBImportPDF.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBImportPDF.h"
#include "document/UBDocumentProxy.h"
diff --git a/Sankore-3.1/src/adaptors/UBImportPDF.h b/Sankore-3.1/src/adaptors/UBImportPDF.h
index 9b2f7b0..7b1bbbd 100644
--- a/Sankore-3.1/src/adaptors/UBImportPDF.h
+++ b/Sankore-3.1/src/adaptors/UBImportPDF.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBIMPORTPDF_H_
#define UBIMPORTPDF_H_
diff --git a/Sankore-3.1/src/adaptors/UBImportVirtualPrinter.cpp b/Sankore-3.1/src/adaptors/UBImportVirtualPrinter.cpp
index 94ea9d2..0cfd2b1 100644
--- a/Sankore-3.1/src/adaptors/UBImportVirtualPrinter.cpp
+++ b/Sankore-3.1/src/adaptors/UBImportVirtualPrinter.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/adaptors/UBIniFileParser.cpp b/Sankore-3.1/src/adaptors/UBIniFileParser.cpp
index be33bd5..67e2bf3 100644
--- a/Sankore-3.1/src/adaptors/UBIniFileParser.cpp
+++ b/Sankore-3.1/src/adaptors/UBIniFileParser.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBIniFileParser.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/adaptors/UBIniFileParser.h b/Sankore-3.1/src/adaptors/UBIniFileParser.h
index c43e4b5..b60178a 100644
--- a/Sankore-3.1/src/adaptors/UBIniFileParser.h
+++ b/Sankore-3.1/src/adaptors/UBIniFileParser.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBINIFILEPARSER_H_
#define UBINIFILEPARSER_H_
diff --git a/Sankore-3.1/src/adaptors/UBMetadataDcSubsetAdaptor.cpp b/Sankore-3.1/src/adaptors/UBMetadataDcSubsetAdaptor.cpp
index cf7ee3c..c857801 100644
--- a/Sankore-3.1/src/adaptors/UBMetadataDcSubsetAdaptor.cpp
+++ b/Sankore-3.1/src/adaptors/UBMetadataDcSubsetAdaptor.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBMetadataDcSubsetAdaptor.h"
#include <QtGui>
@@ -80,7 +81,8 @@ void UBMetadataDcSubsetAdaptor::persist(UBDocumentProxy* proxy)
return;
}
QString fileName = proxy->persistencePath() + "/" + metadataFilename;
- qWarning() << fileName;
+ qDebug() << "persisting metadata to" << fileName;
+
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
diff --git a/Sankore-3.1/src/adaptors/UBMetadataDcSubsetAdaptor.h b/Sankore-3.1/src/adaptors/UBMetadataDcSubsetAdaptor.h
index 40b7b45..303c8f3 100644
--- a/Sankore-3.1/src/adaptors/UBMetadataDcSubsetAdaptor.h
+++ b/Sankore-3.1/src/adaptors/UBMetadataDcSubsetAdaptor.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBMETADATADCSUBSETADAPTOR_H_
#define UBMETADATADCSUBSETADAPTOR_H_
diff --git a/Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.cpp b/Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.cpp
index 9cd8310..14749c5 100644
--- a/Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.cpp
+++ b/Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBSvgSubsetAdaptor.h"
#include <QtCore>
@@ -37,6 +38,7 @@
#include "domain/UBGraphicsStroke.h"
#include "domain/UBGraphicsStrokesGroup.h"
#include "domain/UBGraphicsGroupContainerItem.h"
+#include "domain/UBGraphicsGroupContainerItemDelegate.h"
#include "domain/UBItem.h"
#include "tools/UBGraphicsRuler.h"
@@ -71,6 +73,8 @@
#include "pdf/PDFRenderer.h"
+#include "customWidgets/UBGraphicsItemAction.h"
+
#include "core/memcheck.h"
//#include "qtlogger.h"
@@ -247,7 +251,7 @@ QString UBSvgSubsetAdaptor::uniboardDocumentNamespaceUriFromVersion(int mFileVer
UBGraphicsScene* UBSvgSubsetAdaptor::loadScene(UBDocumentProxy* proxy, const int pageIndex)
{
QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.svg", pageIndex);
- qDebug() << fileName;
+ qDebug() << "loading scene from" << fileName;
QFile file(fileName);
if (file.exists())
@@ -551,6 +555,7 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
{
UBGraphicsPolygonItem* polygonItem = 0;
+ QString parentId = mXmlReader.attributes().value(mNamespaceUri, "parent").toString();
if (mXmlReader.name() == "polygon")
{
polygonItem = polygonItemFromPolygonSvg(mScene->isDarkBackground() ? Qt::white : Qt::black);
@@ -559,11 +564,13 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
{
polygonItem = polygonItemFromLineSvg(mScene->isDarkBackground() ? Qt::white : Qt::black);
}
+ if(parentId.isEmpty() && strokesGroup)
+ parentId = strokesGroup->uuid().toString();
+
+ Q_ASSERT(!parentId.isEmpty());
if (polygonItem)
{
- mScene->addItem(polygonItem);
-
polygonItem->setUuid(uuidFromSvg);
if (annotationGroup)
@@ -580,7 +587,21 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
polygonItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Graphic));
+ UBGraphicsStrokesGroup* group;
+ if(!mStrokesGroupList.contains(parentId)){
+ group = new UBGraphicsStrokesGroup();
+ mStrokesGroupList.insert(parentId,group);
+ group->Delegate()->setAction(readAction());
+ mStrokeList.insert(parentId,new UBGraphicsStroke);
+ }
+ else
+ group = mStrokesGroupList.value(parentId);
+
polygonItem->show();
+ polygonItem->setStrokesGroup(group);
+ polygonItem->setStroke(mStrokeList.value(parentId));
+ group->addToGroup(polygonItem);
+
}
}
else if (mXmlReader.name() == "polyline")
@@ -955,7 +976,6 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
currentWidget->setDatastoreEntry(key, value);
} else if (mXmlReader.name() == tGroups) {
//considering groups section at the end of the document
-
readGroupRoot();
}
else
@@ -967,10 +987,9 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
{
if (mXmlReader.name() == "g")
{
- if(strokesGroup && mScene){
- mScene->addItem(strokesGroup);
- //graphicsItemFromSvg(strokesGroup);
- }
+// if(strokesGroup && mScene){
+// mScene->addItem(strokesGroup);
+// }
if (annotationGroup)
{
@@ -989,14 +1008,18 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
qWarning() << "error parsing Sankore file " << mXmlReader.errorString();
}
- if (mScene) {
- mScene->setModified(false);
+ QMapIterator<QString, UBGraphicsStrokesGroup*> iterator(mStrokesGroupList);
+ while (iterator.hasNext()) {
+ iterator.next();
+ mScene->addItem(iterator.value());
}
- if (annotationGroup)
- {
- if (annotationGroup->polygons().empty())
+ if (mScene)
+ mScene->setModified(false);
+
+ if (annotationGroup && annotationGroup->polygons().empty()){
delete annotationGroup;
+ annotationGroup = 0;
}
mScene->enableUndoRedoStack();
@@ -1004,10 +1027,11 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene()
}
-UBGraphicsGroupContainerItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::readGroup()
+UBGraphicsGroupContainerItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::readGroup(UBGraphicsItemAction* action, QString uuid)
{
+ bool isAnActionForStroke = false;
UBGraphicsGroupContainerItem *group = new UBGraphicsGroupContainerItem();
- QMultiMap<QString, UBGraphicsPolygonItem *> strokesGroupsContainer;
+// QMultiMap<QString, UBGraphicsPolygonItem *> strokesGroupsContainer;
QList<QGraphicsItem *> groupContainer;
mXmlReader.readNext();
@@ -1016,81 +1040,89 @@ UBGraphicsGroupContainerItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::readGroup()
if (mXmlReader.isEndElement()) {
mXmlReader.readNext();
break;
- } else if (mXmlReader.isStartElement())
- {
+ }
+ else if (mXmlReader.isStartElement()){
if (mXmlReader.name() == tGroup)
{
- qDebug() << "came across the group id is" << mXmlReader.attributes().value(aId);
UBGraphicsGroupContainerItem *curGroup = readGroup();
if (curGroup)
groupContainer.append(curGroup);
else
- qDebug() << "this is an error";
+ qDebug() << "this is an error if readGroup(UBGraphicsItemAction* action, QString uuid)";
}
- else if (mXmlReader.name() == tElement)
- {
+ else if (mXmlReader.name() == tElement){
QString id = mXmlReader.attributes().value(aId).toString();
- QString itemId = id.right(QUuid().toString().size());
- QString groupId = id.left(QUuid().toString().size());
+// QString itemId = id.right(QUuid().toString().size());
+// QString groupId = id.left(QUuid().toString().size());
+
+// if(groupId == uuid)
+ if(id == uuid)
+ isAnActionForStroke = true;
QGraphicsItem *curItem = readElementFromGroup();
- UBGraphicsPolygonItem *curPolygon = qgraphicsitem_cast<UBGraphicsPolygonItem *>(curItem);
+// UBGraphicsPolygonItem *curPolygon = qgraphicsitem_cast<UBGraphicsPolygonItem *>(curItem);
- if (curPolygon && !groupId.isEmpty() && !itemId.isEmpty() && itemId != groupId)
- {
- strokesGroupsContainer.insert(groupId, curPolygon);
- }
- else // item
- {
- if(curItem)
+// if (curPolygon && !groupId.isEmpty() && !itemId.isEmpty() && itemId != groupId)
+// strokesGroupsContainer.insert(groupId, curPolygon);
+// else // item
+// {
+ if(curItem && id.count("{") < 2)
groupContainer.append(curItem);
else
- qDebug() << "this is an error";
- }
- }else {
- mXmlReader.skipCurrentElement();
+ qDebug() << "this is an error if readGroup(UBGraphicsItemAction* action, QString uuid)";
+// }
}
- } else {
- mXmlReader.readNext();
+ else
+ mXmlReader.skipCurrentElement();
}
+ else
+ mXmlReader.readNext();
}
- foreach (QString key, strokesGroupsContainer.keys().toSet())
- {
- UBGraphicsStrokesGroup* pStrokesGroup = new UBGraphicsStrokesGroup();
- UBGraphicsStroke *currentStroke = new UBGraphicsStroke();
- foreach(UBGraphicsPolygonItem* poly, strokesGroupsContainer.values(key))
- {
- if (poly)
- {
- mScene->removeItem(poly);
- mScene->removeItemFromDeletion(poly);
- poly->setStrokesGroup(pStrokesGroup);
- poly->setStroke(currentStroke);
- pStrokesGroup->addToGroup(poly);
- }
- }
- if (currentStroke->polygons().empty())
- delete currentStroke;
+// foreach (QString key, strokesGroupsContainer.keys().toSet())
+// {
+// UBGraphicsStrokesGroup* pStrokesGroup = new UBGraphicsStrokesGroup();
+// if(action && isAnActionForStroke)
+// pStrokesGroup->Delegate()->setAction(action);
+// UBGraphicsStroke *currentStroke = new UBGraphicsStroke();
+// foreach(UBGraphicsPolygonItem* poly, strokesGroupsContainer.values(key))
+// {
+// if (poly)
+// {
+// mScene->removeItem(poly);
+// mScene->removeItemFromDeletion(poly);
+// poly->setStrokesGroup(pStrokesGroup);
+// poly->setStroke(currentStroke);
+// pStrokesGroup->addToGroup(poly);
+// }
+// }
+// if (currentStroke->polygons().empty())
+// delete currentStroke;
+
+// if (pStrokesGroup->childItems().count())
+// mScene->addItem(pStrokesGroup);
+// else
+// delete pStrokesGroup;
+
+// if (pStrokesGroup)
+// {
+// QGraphicsItem *strokeGroup = qgraphicsitem_cast<QGraphicsItem *>(pStrokesGroup);
+// if(strokeGroup)
+// groupContainer.append(strokeGroup);
+// else
+// qDebug() << "this is an error";
+// }
+// }
- if (pStrokesGroup->childItems().count())
- mScene->addItem(pStrokesGroup);
- else
- delete pStrokesGroup;
+ foreach(QGraphicsItem* item, groupContainer)
+ group->addToGroup(item,false);
- if (pStrokesGroup)
- {
- QGraphicsItem *strokeGroup = qgraphicsitem_cast<QGraphicsItem *>(pStrokesGroup);
- if(strokeGroup)
- groupContainer.append(strokeGroup);
- else
- qDebug() << "this is an error";
- }
+ if(action && !isAnActionForStroke){
+ UBGraphicsGroupContainerItemDelegate* delegate = dynamic_cast<UBGraphicsGroupContainerItemDelegate*>(group->Delegate());
+ delegate->setAction(action);
}
- foreach(QGraphicsItem* item, groupContainer)
- group->addToGroup(item);
if (group->childItems().count())
{
@@ -1111,16 +1143,22 @@ void UBSvgSubsetAdaptor::UBSvgSubsetReader::readGroupRoot()
if (mXmlReader.isEndElement()) {
mXmlReader.readNext();
break;
- } else if (mXmlReader.isStartElement()) {
- if (mXmlReader.name() == tGroup) {
- UBGraphicsGroupContainerItem *curGroup = readGroup();
- if (curGroup) {
+ }
+ else if (mXmlReader.isStartElement()){
+ if (mXmlReader.name() == tGroup){
+ UBGraphicsItemAction* action = readAction();
+ UBGraphicsGroupContainerItem *curGroup = readGroup(action, mXmlReader.attributes().value("id").toString());
+ if (curGroup)
mScene->addGroup(curGroup);
- }
- }else {
+
+ }
+ else {
mXmlReader.skipCurrentElement();
+// qDebug() << "skypped elements :" << mXmlReader.name();
}
- } else {
+ }
+ else {
+// qDebug() << "read next " << mXmlReader.name();
mXmlReader.readNext();
}
}
@@ -1134,7 +1172,9 @@ QGraphicsItem *UBSvgSubsetAdaptor::UBSvgSubsetReader::readElementFromGroup()
result = mScene->itemForUuid(QUuid(uuid));
if(!result)
- qDebug() << "uuid " << uuid;
+ result = mStrokesGroupList.take(uuid.replace("}","").replace("{",""));
+
+ //Q_ASSERT(result);
mXmlReader.skipCurrentElement();
mXmlReader.readNext();
@@ -1237,39 +1277,17 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex)
UBGraphicsStrokesGroup* strokesGroupItem = qgraphicsitem_cast<UBGraphicsStrokesGroup*>(item);
+ bool isFirstItem = true;
if(strokesGroupItem && strokesGroupItem->isVisible()){
- QDomElement newGroupElement;
- if (!strokesGroupItem->parentItem() && strokesGroupItem->childItems().count()) {
- newGroupElement = groupDomDocument.createElement(tGroup);
- newGroupElement.setAttribute(aId, strokesGroupItem->uuid().toString());
- groupRoot.appendChild(newGroupElement);
- }
-
- //disabling g section parsing as a group of elements. Use groups refs instead
-// mXmlWriter.writeStartElement("g");
-// mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "uuid", UBStringUtils::toCanonicalUuid(strokesGroupItem->uuid()));
-// QMatrix matrix = item->sceneMatrix();
-// if (!matrix.isIdentity()){
-// mXmlWriter.writeAttribute("transform", toSvgTransform(matrix));
-// }
-
// Add the polygons
foreach(QGraphicsItem* item, strokesGroupItem->childItems()){
-
UBGraphicsPolygonItem* poly = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
if(NULL != poly){
- polygonItemToSvgPolygon(poly, true);
- if (!newGroupElement.isNull()) {
- QDomElement curPolygonElement = groupDomDocument.createElement(tElement);
- curPolygonElement.setAttribute(aId, strokesGroupItem->uuid().toString()
- + poly->uuid().toString());
- newGroupElement.appendChild(curPolygonElement);
- }
+ polygonItemToSvgPolygon(poly, true, isFirstItem ? strokesGroupItem->Delegate()->action(): 0);
items.removeOne(poly);
+ isFirstItem = false;
}
}
-
-// mXmlWriter.writeEndElement(); //g
}
// Is the item a polygon?
@@ -1459,7 +1477,7 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex)
UBGraphicsGroupContainerItem *groupItem = qgraphicsitem_cast<UBGraphicsGroupContainerItem*>(item);
if (groupItem && groupItem->isVisible())
{
- persistGroupToDom(groupItem, &groupRoot, &groupDomDocument);
+ persistGroupToDom(groupItem, &groupRoot, &groupDomDocument,groupItem->Delegate()->action());
continue;
}
}
@@ -1502,6 +1520,12 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex)
if (curElement.hasAttribute(aId)) {
mXmlWriter.writeStartElement(curElement.tagName());
mXmlWriter.writeAttribute(aId, curElement.attribute(aId));
+ if(curElement.hasAttribute("actionType")){
+ mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri,"actionType",curElement.attribute("actionType"));
+ mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri,"actionFirstParameter",curElement.attribute("actionFirstParameter"));
+ if(curElement.hasAttribute("actionSecondParameter"))
+ mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri,"actionSecondParameter",curElement.attribute("actionSecondParameter"));
+ }
QDomElement curSubElement = curElement.firstChildElement();
while (!curSubElement.isNull()) {
if (curSubElement.hasAttribute(aId)) {
@@ -1540,12 +1564,19 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene(int pageIndex)
return true;
}
-void UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistGroupToDom(QGraphicsItem *groupItem, QDomElement *curParent, QDomDocument *groupDomDocument)
+void UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistGroupToDom(QGraphicsItem *groupItem, QDomElement *curParent, QDomDocument *groupDomDocument, UBGraphicsItemAction* action)
{
QUuid uuid = UBGraphicsScene::getPersonalUuid(groupItem);
if (!uuid.isNull()) {
QDomElement curGroupElement = groupDomDocument->createElement(tGroup);
curGroupElement.setAttribute(aId, uuid);
+ if(action){
+ QStringList actionParameter = action->save();
+ curGroupElement.setAttribute("actionType",actionParameter.at(0));
+ curGroupElement.setAttribute("actionFirstParameter",actionParameter.at(1));
+ if(actionParameter.count() > 2)
+ curGroupElement.setAttribute("actionSecondParameter",actionParameter.at(2));
+ }
curParent->appendChild(curGroupElement);
foreach (QGraphicsItem *item, groupItem->childItems()) {
@@ -1553,14 +1584,16 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistGroupToDom(QGraphicsItem *gro
if (!tmpUuid.isNull()) {
if (item->type() == UBGraphicsGroupContainerItem::Type && item->childItems().count()) {
persistGroupToDom(item, curParent, groupDomDocument);
- } else if (item->type() == UBGraphicsStrokesGroup::Type) {
- foreach (QGraphicsItem *polygonItem, item->childItems()) {
- QDomElement curPolygonElement = groupDomDocument->createElement(tElement);
- curPolygonElement.setAttribute(aId, tmpUuid.toString()
- + UBGraphicsItem::getOwnUuid(polygonItem).toString());
- curGroupElement.appendChild(curPolygonElement);
- }
- } else {
+ }
+// else if (item->type() == UBGraphicsStrokesGroup::Type) {
+// foreach (QGraphicsItem *polygonItem, item->childItems()) {
+// QDomElement curPolygonElement = groupDomDocument->createElement(tElement);
+// curPolygonElement.setAttribute(aId, tmpUuid.toString()
+// + UBGraphicsItem::getOwnUuid(polygonItem).toString());
+// curGroupElement.appendChild(curPolygonElement);
+// }
+// }
+ else {
QDomElement curSubElement = groupDomDocument->createElement(tElement);
curSubElement.setAttribute(aId, tmpUuid);
@@ -1571,27 +1604,6 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistGroupToDom(QGraphicsItem *gro
}
}
-void UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistStrokeToDom(QGraphicsItem *strokeItem, QDomElement *curParent, QDomDocument *curDomDocument)
-{
- QUuid uuid = UBGraphicsScene::getPersonalUuid(strokeItem);
- if (!uuid.isNull()) {
- QDomElement curStrokesGroupElement = curDomDocument->createElement(tStrokeGroup);
- curStrokesGroupElement.setAttribute(aId, uuid);
- curParent->appendChild(curStrokesGroupElement);
-
- foreach (QGraphicsItem *item, strokeItem->childItems()) {
- QUuid tmpUuid = UBGraphicsScene::getPersonalUuid(item);
- if (!tmpUuid.isNull()) {
- if (item->type() == UBGraphicsPolygonItem::Type && item->childItems().count()) {
- QDomElement curSubElement = curDomDocument->createElement(tElement);
- curSubElement.setAttribute(aId, tmpUuid);
- curStrokesGroupElement.appendChild(curSubElement);
- }
- }
- }
- }
-}
-
void UBSvgSubsetAdaptor::UBSvgSubsetWriter::polygonItemToSvgLine(UBGraphicsPolygonItem* polygonItem, bool groupHoldsInfo)
{
mXmlWriter.writeStartElement("line");
@@ -1699,7 +1711,7 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::strokeToSvgPolygon(UBGraphicsStroke*
}
}
-void UBSvgSubsetAdaptor::UBSvgSubsetWriter::polygonItemToSvgPolygon(UBGraphicsPolygonItem* polygonItem, bool groupHoldsInfo)
+void UBSvgSubsetAdaptor::UBSvgSubsetWriter::polygonItemToSvgPolygon(UBGraphicsPolygonItem* polygonItem, bool groupHoldsInfo, UBGraphicsItemAction* action)
{
QPolygonF polygon = polygonItem->polygon();
@@ -1744,6 +1756,10 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::polygonItemToSvgPolygon(UBGraphicsPo
, "fill-on-light-background", polygonItem->colorOnLightBackground().name());
}
+
+ if(action)
+ writeAction(action);
+
mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "uuid", UBStringUtils::toCanonicalUuid(polygonItem->uuid()));
if (polygonItem->parentItem()) {
mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "parent", UBStringUtils::toCanonicalUuid(UBGraphicsItem::getOwnUuid(polygonItem->parentItem())));
@@ -2130,12 +2146,53 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::pixmapItemToLinkedImage(UBGraphicsPi
mXmlWriter.writeAttribute(nsXLink, "href", fileName);
+ writeAction(pixmapItem->Delegate()->action());
graphicsItemToSvg(pixmapItem);
mXmlWriter.writeEndElement();
}
+void UBSvgSubsetAdaptor::UBSvgSubsetWriter::writeAction(UBGraphicsItemAction* action)
+{
+ if(action){
+ QStringList actionParameters = action->save();
+ mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri,"actionType",actionParameters.at(0));
+ mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri,"actionFirstParameter",actionParameters.at(1));
+ if(actionParameters.count()>2)
+ mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri,"actionSecondParameter",actionParameters.at(2));
+ }
+}
+
+UBGraphicsItemAction* UBSvgSubsetAdaptor::UBSvgSubsetReader::readAction()
+{
+ UBGraphicsItemAction* result = 0;
+ QXmlStreamAttributes attributes = mXmlReader.attributes();
+ QStringRef actionParameters = attributes.value(UBSettings::uniboardDocumentNamespaceUri, "actionType");
+ if(actionParameters.isEmpty())
+ return result;
+ switch (actionParameters.toString().toInt()) {
+ case eLinkToAudio:
+ result = new UBGraphicsItemPlayAudioAction(attributes.value(UBSettings::uniboardDocumentNamespaceUri, "actionFirstParameter").toString(),false);
+ break;
+ case eLinkToPage:{
+ QString pageParameter = attributes.value(UBSettings::uniboardDocumentNamespaceUri, "actionSecondParameter").toString();
+ if(pageParameter.isEmpty())
+ result = new UBGraphicsItemMoveToPageAction((eUBGraphicsItemMovePageAction)attributes.value(UBSettings::uniboardDocumentNamespaceUri, "actionFirstParameter").toString().toInt());
+ else
+ result = new UBGraphicsItemMoveToPageAction((eUBGraphicsItemMovePageAction)attributes.value(UBSettings::uniboardDocumentNamespaceUri, "actionFirstParameter").toString().toInt(),pageParameter.toInt());
+ break;
+ }
+ case eLinkToWebUrl:
+ result = new UBGraphicsItemLinkToWebPageAction(mXmlReader.attributes().value(UBSettings::uniboardDocumentNamespaceUri, "actionFirstParameter").toString());
+ break;
+ default:
+ break;
+ }
+
+ return result;
+}
+
UBGraphicsPixmapItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::pixmapItemFromSvg()
{
@@ -2157,6 +2214,7 @@ UBGraphicsPixmapItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::pixmapItemFromSvg()
graphicsItemFromSvg(pixmapItem);
+ pixmapItem->Delegate()->setAction(readAction());
return pixmapItem;
}
@@ -2188,6 +2246,8 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::svgItemToLinkedSvg(UBGraphicsSvgItem
mXmlWriter.writeAttribute(nsXLink, "href", fileName);
+ writeAction(svgItem->Delegate()->action());
+
graphicsItemToSvg(svgItem);
mXmlWriter.writeEndElement();
@@ -2213,6 +2273,7 @@ UBGraphicsSvgItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::svgItemFromSvg()
}
graphicsItemFromSvg(svgItem);
+ svgItem->Delegate()->setAction(readAction());
return svgItem;
@@ -2631,7 +2692,7 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::graphicsWidgetToSvg(UBGraphicsWidget
}
QString snapshotPath = mDocumentPath + "/" + UBPersistenceManager::widgetDirectory + "/" + uuid + ".png";
- item->takeSnapshot().save(snapshotPath, "PNG");
+ item->snapshot().save(snapshotPath, "PNG");
mXmlWriter.writeStartElement(nsXHtml, "iframe");
@@ -2765,6 +2826,8 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::textItemToSvg(UBGraphicsTextItem* it
mXmlWriter.writeStartElement("foreignObject");
mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "type", "text");
+ writeAction(item->Delegate()->action());
+
graphicsItemToSvg(item);
mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "width", QString("%1").arg(item->textWidth()));
@@ -2797,6 +2860,7 @@ UBGraphicsTextItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::textItemFromSvg()
UBGraphicsTextItem* textItem = new UBGraphicsTextItem();
graphicsItemFromSvg(textItem);
+ textItem->Delegate()->setAction(readAction());
QStringRef ubFillOnDarkBackground = mXmlReader.attributes().value(mNamespaceUri, "fill-on-dark-background");
QStringRef ubFillOnLightBackground = mXmlReader.attributes().value(mNamespaceUri, "fill-on-light-background");
@@ -3249,7 +3313,7 @@ UBGraphicsCache* UBSvgSubsetAdaptor::UBSvgSubsetReader::cacheFromSvg()
QColor color(colorR.toString().toInt(), colorG.toString().toInt(), colorB.toString().toInt(), colorA.toString().toInt());
pCache->setMaskColor(color);
- pCache->setShapeWidth(shapeSize.toString().toInt());
+ pCache->setHoleWidth(shapeSize.toString().toInt());
pCache->setMaskShape(static_cast<eMaskShape>(shape.toString().toInt()));
pCache->setVisible(true);
@@ -3270,7 +3334,7 @@ void UBSvgSubsetAdaptor::UBSvgSubsetWriter::cacheToSvg(UBGraphicsCache* item)
mXmlWriter.writeAttribute("colorB", QString("%1").arg(item->maskColor().blue()));
mXmlWriter.writeAttribute("colorA", QString("%1").arg(item->maskColor().alpha()));
mXmlWriter.writeAttribute("shape", QString("%1").arg(item->maskshape()));
- mXmlWriter.writeAttribute("shapeSize", QString("%1").arg(item->shapeWidth()));
+ mXmlWriter.writeAttribute("shapeSize", QString("%1").arg(item->holeWidth()));
QString zs;
zs.setNum(item->zValue(), 'f'); // 'f' keeps precision
diff --git a/Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.h b/Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.h
index 7169523..d4457ca 100644
--- a/Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.h
+++ b/Sankore-3.1/src/adaptors/UBSvgSubsetAdaptor.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,246 +18,253 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBSVGSUBSETADAPTOR_H_
-#define UBSVGSUBSETADAPTOR_H_
-
-#include <QtGui>
-#include <QtXml>
-
-#include "frameworks/UBGeometryUtils.h"
-
-class UBGraphicsSvgItem;
-class UBGraphicsPolygonItem;
-class UBGraphicsPixmapItem;
-class UBGraphicsPDFItem;
-class UBGraphicsWidgetItem;
-class UBGraphicsMediaItem;
-class UBGraphicsAppleWidgetItem;
-class UBGraphicsW3CWidgetItem;
-class UBGraphicsTextItem;
-class UBGraphicsCurtainItem;
-class UBGraphicsRuler;
-class UBGraphicsCompass;
-class UBGraphicsProtractor;
-class UBGraphicsScene;
-class UBDocumentProxy;
-class UBGraphicsStroke;
-class UBPersistenceManager;
-class UBGraphicsTriangle;
-class UBGraphicsCache;
-class IDataStorage;
-class UBGraphicsGroupContainerItem;
-
-class UBSvgSubsetAdaptor
-{
- private:
-
- UBSvgSubsetAdaptor() {;}
- virtual ~UBSvgSubsetAdaptor() {;}
-
- public:
-
- static UBGraphicsScene* loadScene(UBDocumentProxy* proxy, const int pageIndex);
- static void persistScene(UBDocumentProxy* proxy, UBGraphicsScene* pScene, const int pageIndex);
- static void upgradeScene(UBDocumentProxy* proxy, const int pageIndex);
-
- static QUuid sceneUuid(UBDocumentProxy* proxy, const int pageIndex);
- static void setSceneUuid(UBDocumentProxy* proxy, const int pageIndex, QUuid pUuid);
-
- static bool addElementToBeStored(QString domName,IDataStorage* dataStorageClass);
-
- static void convertPDFObjectsToImages(UBDocumentProxy* proxy);
- static void convertSvgImagesToImages(UBDocumentProxy* proxy);
-
- static QMap<QString,IDataStorage*> getAdditionalElementToStore() { return additionalElementToStore;}
-
- static const QString nsSvg;
- static const QString nsXLink;
- static const QString nsXHtml;
- static const QString nsUb;
- static const QString xmlTrue;
- static const QString xmlFalse;
-
- static const QString sFontSizePrefix;
- static const QString sPixelUnit;
- static const QString sFontWeightPrefix;
- static const QString sFontStylePrefix;
-
- static QString readTeacherGuideNode(int sceneIndex);
- private:
-
- static UBGraphicsScene* loadScene(UBDocumentProxy* proxy, const QByteArray& pArray);
-
- static QDomDocument loadSceneDocument(UBDocumentProxy* proxy, const int pPageIndex);
-
- static QString uniboardDocumentNamespaceUriFromVersion(int fileVersion);
-
- static const QString sFormerUniboardDocumentNamespaceUri;
-
- static QString toSvgTransform(const QMatrix& matrix);
- static QMatrix fromSvgTransform(const QString& transform);
-
- static QMap<QString,IDataStorage*> additionalElementToStore;
-
-
-
-
- class UBSvgSubsetReader
- {
- public:
-
- UBSvgSubsetReader(UBDocumentProxy* proxy, const QByteArray& pXmlData);
-
- virtual ~UBSvgSubsetReader(){}
-
- UBGraphicsScene* loadScene();
-
- private:
-
- UBGraphicsPolygonItem* polygonItemFromLineSvg(const QColor& pDefaultBrushColor);
-
- UBGraphicsPolygonItem* polygonItemFromPolygonSvg(const QColor& pDefaultBrushColor);
-
- QList<UBGraphicsPolygonItem*> polygonItemsFromPolylineSvg(const QColor& pDefaultColor);
-
- UBGraphicsPixmapItem* pixmapItemFromSvg();
-
- UBGraphicsSvgItem* svgItemFromSvg();
-
- UBGraphicsPDFItem* pdfItemFromPDF();
-
- UBGraphicsMediaItem* videoItemFromSvg();
-
- UBGraphicsMediaItem* audioItemFromSvg();
-
- UBGraphicsAppleWidgetItem* graphicsAppleWidgetFromSvg();
-
- UBGraphicsW3CWidgetItem* graphicsW3CWidgetFromSvg();
-
- UBGraphicsTextItem* textItemFromSvg();
-
- UBGraphicsCurtainItem* curtainItemFromSvg();
-
- UBGraphicsRuler* rulerFromSvg();
-
- UBGraphicsCompass* compassFromSvg();
-
- UBGraphicsProtractor* protractorFromSvg();
-
- UBGraphicsTriangle* triangleFromSvg();
-
- UBGraphicsCache* cacheFromSvg();
-
- void readGroupRoot();
- QGraphicsItem *readElementFromGroup();
- UBGraphicsGroupContainerItem* readGroup();
-
- void graphicsItemFromSvg(QGraphicsItem* gItem);
-
- qreal getZValueFromSvg();
- QUuid getUuidFromSvg();
-
- QXmlStreamReader mXmlReader;
- int mFileVersion;
- UBDocumentProxy *mProxy;
- QString mDocumentPath;
-
- QColor mGroupDarkBackgroundColor;
- QColor mGroupLightBackgroundColor;
- qreal mGroupZIndex;
- bool mGroupHasInfo;
-
- QString mNamespaceUri;
- UBGraphicsScene *mScene;
- };
-
- class UBSvgSubsetWriter
- {
- public:
-
- UBSvgSubsetWriter(UBDocumentProxy* proxy, UBGraphicsScene* pScene, const int pageIndex);
-
- bool persistScene(int pageIndex);
-
- virtual ~UBSvgSubsetWriter(){}
-
- private:
-
- void persistGroupToDom(QGraphicsItem *groupItem, QDomElement *curParent, QDomDocument *curDomDocument);
- void persistStrokeToDom(QGraphicsItem *strokeItem, QDomElement *curParent, QDomDocument *curDomDocument);
- void polygonItemToSvgPolygon(UBGraphicsPolygonItem* polygonItem, bool groupHoldsInfo);
- void polygonItemToSvgLine(UBGraphicsPolygonItem* polygonItem, bool groupHoldsInfo);
- void strokeToSvgPolyline(UBGraphicsStroke* stroke, bool groupHoldsInfo);
- void strokeToSvgPolygon(UBGraphicsStroke* stroke, bool groupHoldsInfo);
-
- inline QString pointsToSvgPointsAttribute(QVector<QPointF> points)
- {
- UBGeometryUtils::crashPointList(points);
-
- int pointsCount = points.size();
- QString svgPoints;
-
- int length = 0;
- QString sBuf;
-
- for(int j = 0; j < pointsCount; j++)
- {
- sBuf = "%1,%2 ";
- const QPointF & point = points.at(j);
-
- QString temp1 = "%1", temp2 = "%2";
-
- temp1 = temp1.arg(point.x());
- temp2 = temp2.arg(point.y());
-
- QLocale loc(QLocale::C);
- sBuf = sBuf.arg(loc.toFloat(temp1)).arg(loc.toFloat(temp2));
-
- svgPoints.insert(length, sBuf);
- length += sBuf.length();
- }
- return svgPoints;
- }
-
- inline qreal trickAlpha(qreal alpha)
- {
- qreal trickAlpha = alpha;
- if(trickAlpha >= 0.2 && trickAlpha < 0.6){
- trickAlpha /= 5;
- }else if (trickAlpha < 0.8)
- trickAlpha /= 3;
-
- return trickAlpha;
- }
-
- void pixmapItemToLinkedImage(UBGraphicsPixmapItem *pixmapItem);
- void svgItemToLinkedSvg(UBGraphicsSvgItem *svgItem);
- void pdfItemToLinkedPDF(UBGraphicsPDFItem *pdfItem);
- void videoItemToLinkedVideo(UBGraphicsMediaItem *videoItem);
- void audioItemToLinkedAudio(UBGraphicsMediaItem *audioItem);
- void graphicsItemToSvg(QGraphicsItem *item);
- void graphicsAppleWidgetToSvg(UBGraphicsAppleWidgetItem *item);
- void graphicsW3CWidgetToSvg(UBGraphicsW3CWidgetItem *item);
- void graphicsWidgetToSvg(UBGraphicsWidgetItem *item);
- void textItemToSvg(UBGraphicsTextItem *item);
- void curtainItemToSvg(UBGraphicsCurtainItem *item);
- void rulerToSvg(UBGraphicsRuler *item);
- void compassToSvg(UBGraphicsCompass *item);
- void protractorToSvg(UBGraphicsProtractor *item);
- void cacheToSvg(UBGraphicsCache* item);
- void triangleToSvg(UBGraphicsTriangle *item);
- void writeSvgElement();
-
- private:
-
- UBGraphicsScene* mScene;
- QXmlStreamWriter mXmlWriter;
- QString mDocumentPath;
- int mPageIndex;
-
- };
-};
-
-#endif /* UBSVGSUBSETADAPTOR_H_ */
+
+
+
+#ifndef UBSVGSUBSETADAPTOR_H_
+#define UBSVGSUBSETADAPTOR_H_
+
+#include <QtGui>
+#include <QtXml>
+
+#include "frameworks/UBGeometryUtils.h"
+
+class UBGraphicsSvgItem;
+class UBGraphicsPolygonItem;
+class UBGraphicsPixmapItem;
+class UBGraphicsPDFItem;
+class UBGraphicsWidgetItem;
+class UBGraphicsMediaItem;
+class UBGraphicsAppleWidgetItem;
+class UBGraphicsW3CWidgetItem;
+class UBGraphicsTextItem;
+class UBGraphicsCurtainItem;
+class UBGraphicsRuler;
+class UBGraphicsCompass;
+class UBGraphicsProtractor;
+class UBGraphicsScene;
+class UBDocumentProxy;
+class UBGraphicsStroke;
+class UBPersistenceManager;
+class UBGraphicsTriangle;
+class UBGraphicsCache;
+class IDataStorage;
+class UBGraphicsGroupContainerItem;
+class UBGraphicsItemAction;
+class UBGraphicsStrokesGroup;
+
+class UBSvgSubsetAdaptor
+{
+ private:
+
+ UBSvgSubsetAdaptor() {;}
+ virtual ~UBSvgSubsetAdaptor() {;}
+
+ public:
+
+ static UBGraphicsScene* loadScene(UBDocumentProxy* proxy, const int pageIndex);
+ static void persistScene(UBDocumentProxy* proxy, UBGraphicsScene* pScene, const int pageIndex);
+ static void upgradeScene(UBDocumentProxy* proxy, const int pageIndex);
+
+ static QUuid sceneUuid(UBDocumentProxy* proxy, const int pageIndex);
+ static void setSceneUuid(UBDocumentProxy* proxy, const int pageIndex, QUuid pUuid);
+
+ static bool addElementToBeStored(QString domName,IDataStorage* dataStorageClass);
+
+ static void convertPDFObjectsToImages(UBDocumentProxy* proxy);
+ static void convertSvgImagesToImages(UBDocumentProxy* proxy);
+
+ static QMap<QString,IDataStorage*> getAdditionalElementToStore() { return additionalElementToStore;}
+
+ static const QString nsSvg;
+ static const QString nsXLink;
+ static const QString nsXHtml;
+ static const QString nsUb;
+ static const QString xmlTrue;
+ static const QString xmlFalse;
+
+ static const QString sFontSizePrefix;
+ static const QString sPixelUnit;
+ static const QString sFontWeightPrefix;
+ static const QString sFontStylePrefix;
+
+ static QString readTeacherGuideNode(int sceneIndex);
+ private:
+
+ static UBGraphicsScene* loadScene(UBDocumentProxy* proxy, const QByteArray& pArray);
+
+ static QDomDocument loadSceneDocument(UBDocumentProxy* proxy, const int pPageIndex);
+
+ static QString uniboardDocumentNamespaceUriFromVersion(int fileVersion);
+
+ static const QString sFormerUniboardDocumentNamespaceUri;
+
+ static QString toSvgTransform(const QMatrix& matrix);
+ static QMatrix fromSvgTransform(const QString& transform);
+
+ static QMap<QString,IDataStorage*> additionalElementToStore;
+
+
+
+
+ class UBSvgSubsetReader
+ {
+ public:
+
+ UBSvgSubsetReader(UBDocumentProxy* proxy, const QByteArray& pXmlData);
+
+ virtual ~UBSvgSubsetReader(){}
+
+ UBGraphicsScene* loadScene();
+
+ private:
+
+ UBGraphicsPolygonItem* polygonItemFromLineSvg(const QColor& pDefaultBrushColor);
+
+ UBGraphicsPolygonItem* polygonItemFromPolygonSvg(const QColor& pDefaultBrushColor);
+
+ QList<UBGraphicsPolygonItem*> polygonItemsFromPolylineSvg(const QColor& pDefaultColor);
+
+ UBGraphicsPixmapItem* pixmapItemFromSvg();
+
+ UBGraphicsSvgItem* svgItemFromSvg();
+
+ UBGraphicsPDFItem* pdfItemFromPDF();
+
+ UBGraphicsMediaItem* videoItemFromSvg();
+
+ UBGraphicsMediaItem* audioItemFromSvg();
+
+ UBGraphicsAppleWidgetItem* graphicsAppleWidgetFromSvg();
+
+ UBGraphicsW3CWidgetItem* graphicsW3CWidgetFromSvg();
+
+ UBGraphicsTextItem* textItemFromSvg();
+
+ UBGraphicsCurtainItem* curtainItemFromSvg();
+
+ UBGraphicsRuler* rulerFromSvg();
+
+ UBGraphicsCompass* compassFromSvg();
+
+ UBGraphicsProtractor* protractorFromSvg();
+
+ UBGraphicsTriangle* triangleFromSvg();
+
+ UBGraphicsCache* cacheFromSvg();
+
+ void readGroupRoot();
+ QGraphicsItem *readElementFromGroup();
+ UBGraphicsGroupContainerItem* readGroup(UBGraphicsItemAction *action = 0, QString uuid = "");
+
+ void graphicsItemFromSvg(QGraphicsItem* gItem);
+
+ qreal getZValueFromSvg();
+ QUuid getUuidFromSvg();
+
+ QXmlStreamReader mXmlReader;
+ int mFileVersion;
+ UBDocumentProxy *mProxy;
+ QString mDocumentPath;
+
+ QColor mGroupDarkBackgroundColor;
+ QColor mGroupLightBackgroundColor;
+ qreal mGroupZIndex;
+ bool mGroupHasInfo;
+
+ QString mNamespaceUri;
+ UBGraphicsScene *mScene;
+ UBGraphicsItemAction* readAction();
+ QMap<QString,UBGraphicsStrokesGroup*> mStrokesGroupList;
+ QMap<QString,UBGraphicsStroke*> mStrokeList;
+ };
+
+ class UBSvgSubsetWriter
+ {
+ public:
+
+ UBSvgSubsetWriter(UBDocumentProxy* proxy, UBGraphicsScene* pScene, const int pageIndex);
+
+ bool persistScene(int pageIndex);
+
+ virtual ~UBSvgSubsetWriter(){}
+
+ private:
+
+ void persistGroupToDom(QGraphicsItem *groupItem, QDomElement *curParent, QDomDocument *curDomDocument, UBGraphicsItemAction *action = 0);
+ void persistStrokeToDom(QGraphicsItem *strokeItem, QDomElement *curParent, QDomDocument *curDomDocument);
+ void polygonItemToSvgPolygon(UBGraphicsPolygonItem* polygonItem, bool groupHoldsInfo, UBGraphicsItemAction* action = 0);
+ void polygonItemToSvgLine(UBGraphicsPolygonItem* polygonItem, bool groupHoldsInfo);
+ void strokeToSvgPolyline(UBGraphicsStroke* stroke, bool groupHoldsInfo);
+ void strokeToSvgPolygon(UBGraphicsStroke* stroke, bool groupHoldsInfo);
+ void writeAction(UBGraphicsItemAction* action);
+
+ inline QString pointsToSvgPointsAttribute(QVector<QPointF> points)
+ {
+ UBGeometryUtils::crashPointList(points);
+
+ int pointsCount = points.size();
+ QString svgPoints;
+
+ int length = 0;
+ QString sBuf;
+
+ for(int j = 0; j < pointsCount; j++)
+ {
+ sBuf = "%1,%2 ";
+ const QPointF & point = points.at(j);
+
+ QString temp1 = "%1", temp2 = "%2";
+
+ temp1 = temp1.arg(point.x());
+ temp2 = temp2.arg(point.y());
+
+ QLocale loc(QLocale::C);
+ sBuf = sBuf.arg(loc.toFloat(temp1)).arg(loc.toFloat(temp2));
+
+ svgPoints.insert(length, sBuf);
+ length += sBuf.length();
+ }
+ return svgPoints;
+ }
+
+ inline qreal trickAlpha(qreal alpha)
+ {
+ qreal trickAlpha = alpha;
+ if(trickAlpha >= 0.2 && trickAlpha < 0.6){
+ trickAlpha /= 5;
+ }else if (trickAlpha < 0.8)
+ trickAlpha /= 3;
+
+ return trickAlpha;
+ }
+
+ void pixmapItemToLinkedImage(UBGraphicsPixmapItem *pixmapItem);
+ void svgItemToLinkedSvg(UBGraphicsSvgItem *svgItem);
+ void pdfItemToLinkedPDF(UBGraphicsPDFItem *pdfItem);
+ void videoItemToLinkedVideo(UBGraphicsMediaItem *videoItem);
+ void audioItemToLinkedAudio(UBGraphicsMediaItem *audioItem);
+ void graphicsItemToSvg(QGraphicsItem *item);
+ void graphicsAppleWidgetToSvg(UBGraphicsAppleWidgetItem *item);
+ void graphicsW3CWidgetToSvg(UBGraphicsW3CWidgetItem *item);
+ void graphicsWidgetToSvg(UBGraphicsWidgetItem *item);
+ void textItemToSvg(UBGraphicsTextItem *item);
+ void curtainItemToSvg(UBGraphicsCurtainItem *item);
+ void rulerToSvg(UBGraphicsRuler *item);
+ void compassToSvg(UBGraphicsCompass *item);
+ void protractorToSvg(UBGraphicsProtractor *item);
+ void cacheToSvg(UBGraphicsCache* item);
+ void triangleToSvg(UBGraphicsTriangle *item);
+ void writeSvgElement();
+
+ private:
+
+ UBGraphicsScene* mScene;
+ QXmlStreamWriter mXmlWriter;
+ QString mDocumentPath;
+ int mPageIndex;
+
+ };
+};
+
+#endif /* UBSVGSUBSETADAPTOR_H_ */
diff --git a/Sankore-3.1/src/adaptors/UBThumbnailAdaptor.cpp b/Sankore-3.1/src/adaptors/UBThumbnailAdaptor.cpp
index 6a22155..0374e92 100644
--- a/Sankore-3.1/src/adaptors/UBThumbnailAdaptor.cpp
+++ b/Sankore-3.1/src/adaptors/UBThumbnailAdaptor.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,169 +18,175 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBThumbnailAdaptor.h"
-
-#include <QtCore>
-
-#include "frameworks/UBFileSystemUtils.h"
-
-#include "core/UBPersistenceManager.h"
-#include "core/UBApplication.h"
-#include "core/UBSettings.h"
-
-
-#include "gui/UBDockTeacherGuideWidget.h"
-#include "gui/UBTeacherGuideWidget.h"
-
-#include "board/UBBoardController.h"
-#include "board/UBBoardPaletteManager.h"
-
-#include "document/UBDocumentProxy.h"
-
-#include "domain/UBGraphicsScene.h"
-
-#include "UBSvgSubsetAdaptor.h"
-
-#include "core/memcheck.h"
-
-void UBThumbnailAdaptor::generateMissingThumbnails(UBDocumentProxy* proxy)
-{
- int existingPageCount = proxy->pageCount();
-
- for (int iPageNo = 0; iPageNo < existingPageCount; ++iPageNo)
- {
- QString thumbFileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", iPageNo);
-
- QFile thumbFile(thumbFileName);
-
- if (!thumbFile.exists())
- {
- bool displayMessage = (existingPageCount > 5);
-
- int thumbCount = 0;
-
- UBGraphicsScene* scene = UBSvgSubsetAdaptor::loadScene(proxy, iPageNo);
-
- if (scene)
- {
- thumbCount++;
-
- if (displayMessage && thumbCount == 1)
- UBApplication::showMessage(tr("Generating preview thumbnails ..."));
-
- persistScene(proxy, scene, iPageNo);
- }
-
- if (displayMessage && thumbCount > 0)
- UBApplication::showMessage(tr("%1 thumbnails generated ...").arg(thumbCount));
-
- }
- }
-}
-
-const QPixmap* UBThumbnailAdaptor::get(UBDocumentProxy* proxy, int pageIndex)
-{
- QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex);
-
- QFile file(fileName);
- if (!file.exists())
- {
- generateMissingThumbnails(proxy);
- }
-
- QPixmap* pix = new QPixmap();
- if (file.exists())
- {
- //Warning. Works only with modified Qt
-#ifdef Q_WS_X11
- pix->load(fileName, 0, Qt::AutoColor);
-#else
- pix->load(fileName, 0, Qt::AutoColor, false);
-#endif
- }
- return pix;
-}
-
-void UBThumbnailAdaptor::updateDocumentToHandleZeroPage(UBDocumentProxy* proxy)
-{
- if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool()){
- QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.svg", 0);
- QFile file(fileName);
- if(!file.exists()){
- UBPersistenceManager::persistenceManager()->persistDocumentScene(proxy,new UBGraphicsScene(proxy),0);
- }
- }
-}
-
-void UBThumbnailAdaptor::load(UBDocumentProxy* proxy, QList<const QPixmap*>& list)
-{
- updateDocumentToHandleZeroPage(proxy);
- generateMissingThumbnails(proxy);
-
- foreach(const QPixmap* pm, list)
- delete pm;
- list.clear();
- for(int i=0; i<proxy->pageCount(); i++)
- list.append(get(proxy, i));
-}
-
-void UBThumbnailAdaptor::persistScene(UBDocumentProxy* proxy, UBGraphicsScene* pScene, int pageIndex, bool overrideModified)
-{
- QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex);
-
- QFile thumbFile(fileName);
-
- if (pScene->isModified() || overrideModified || !thumbFile.exists() || UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified())
- {
- qreal nominalWidth = pScene->nominalSize().width();
- qreal nominalHeight = pScene->nominalSize().height();
- qreal ratio = nominalWidth / nominalHeight;
- QRectF sceneRect = pScene->normalizedSceneRect(ratio);
-
- qreal width = UBSettings::maxThumbnailWidth;
- qreal height = width / ratio;
-
- QImage thumb(width, height, QImage::Format_ARGB32);
-
- QRectF imageRect(0, 0, width, height);
-
- QPainter painter(&thumb);
- painter.setRenderHint(QPainter::Antialiasing, true);
- painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
-
- if (pScene->isDarkBackground())
- {
- painter.fillRect(imageRect, Qt::black);
- }
- else
- {
- painter.fillRect(imageRect, Qt::white);
- }
-
- pScene->setRenderingContext(UBGraphicsScene::NonScreen);
- pScene->setRenderingQuality(UBItem::RenderingQualityHigh);
-
- pScene->render(&painter, imageRect, sceneRect, Qt::KeepAspectRatio);
-
- if(UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified()){
- QPixmap toque(":images/toque.svg");
- painter.setOpacity(0.6);
- painter.drawPixmap(QPoint(width - toque.width(),0),toque);
- }
-
- pScene->setRenderingContext(UBGraphicsScene::Screen);
- pScene->setRenderingQuality(UBItem::RenderingQualityNormal);
-
- thumb.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation).save(fileName, "JPG");
- }
-}
-
-
-QUrl UBThumbnailAdaptor::thumbnailUrl(UBDocumentProxy* proxy, int pageIndex)
-{
- QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex);
-
- return QUrl::fromLocalFile(fileName);
-}
+
+
+
+#include "UBThumbnailAdaptor.h"
+
+#include <QtCore>
+
+#include "frameworks/UBFileSystemUtils.h"
+
+#include "core/UBPersistenceManager.h"
+#include "core/UBApplication.h"
+#include "core/UBSettings.h"
+
+
+#include "gui/UBDockTeacherGuideWidget.h"
+#include "gui/UBTeacherGuideWidget.h"
+
+#include "board/UBBoardController.h"
+#include "board/UBBoardPaletteManager.h"
+
+#include "document/UBDocumentProxy.h"
+
+#include "domain/UBGraphicsScene.h"
+
+#include "UBSvgSubsetAdaptor.h"
+
+#include "core/memcheck.h"
+
+void UBThumbnailAdaptor::generateMissingThumbnails(UBDocumentProxy* proxy)
+{
+ int existingPageCount = proxy->pageCount();
+
+ for (int iPageNo = 0; iPageNo < existingPageCount; ++iPageNo)
+ {
+ QString thumbFileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", iPageNo);
+
+ QFile thumbFile(thumbFileName);
+
+ if (!thumbFile.exists())
+ {
+ bool displayMessage = (existingPageCount > 5);
+
+ int thumbCount = 0;
+
+ UBGraphicsScene* scene = UBSvgSubsetAdaptor::loadScene(proxy, iPageNo);
+
+ if (scene)
+ {
+ thumbCount++;
+
+ if (displayMessage && thumbCount == 1)
+ UBApplication::showMessage(tr("Generating preview thumbnails ..."));
+
+ persistScene(proxy, scene, iPageNo);
+ }
+
+ if (displayMessage && thumbCount > 0)
+ UBApplication::showMessage(tr("%1 thumbnails generated ...").arg(thumbCount));
+
+ }
+ }
+}
+
+const QPixmap* UBThumbnailAdaptor::get(UBDocumentProxy* proxy, int pageIndex)
+{
+ QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex);
+
+ QFile file(fileName);
+ if (!file.exists())
+ {
+ generateMissingThumbnails(proxy);
+ }
+
+ QPixmap* pix = new QPixmap();
+ if (file.exists())
+ {
+ //Warning. Works only with modified Qt
+#ifdef Q_WS_X11
+ pix->load(fileName, 0, Qt::AutoColor);
+#else
+ pix->load(fileName, 0, Qt::AutoColor, false);
+#endif
+ }
+ return pix;
+}
+
+void UBThumbnailAdaptor::updateDocumentToHandleZeroPage(UBDocumentProxy* proxy)
+{
+ if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool()){
+ QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.svg", 0);
+ QFile file(fileName);
+ if(!file.exists()){
+ UBPersistenceManager::persistenceManager()->persistDocumentScene(proxy,new UBGraphicsScene(proxy),0);
+ }
+ }
+}
+
+void UBThumbnailAdaptor::load(UBDocumentProxy* proxy, QList<const QPixmap*>& list)
+{
+ updateDocumentToHandleZeroPage(proxy);
+ generateMissingThumbnails(proxy);
+
+ foreach(const QPixmap* pm, list)
+ delete pm;
+ list.clear();
+ for(int i=0; proxy && i<proxy->pageCount(); i++)
+ list.append(get(proxy, i));
+}
+
+void UBThumbnailAdaptor::clearThumbs(QList<const QPixmap *> &list)
+{
+ foreach(const QPixmap* pm, list)
+ delete pm;
+ list.clear();
+}
+
+void UBThumbnailAdaptor::persistScene(UBDocumentProxy* proxy, UBGraphicsScene* pScene, int pageIndex, bool overrideModified)
+{
+ QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex);
+
+ QFile thumbFile(fileName);
+
+ if (pScene->isModified() || overrideModified || !thumbFile.exists() || UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified())
+ {
+ qreal nominalWidth = pScene->nominalSize().width();
+ qreal nominalHeight = pScene->nominalSize().height();
+ qreal ratio = nominalWidth / nominalHeight;
+ QRectF sceneRect = pScene->normalizedSceneRect(ratio);
+
+ qreal width = UBSettings::maxThumbnailWidth;
+ qreal height = width / ratio;
+
+ QImage thumb(width, height, QImage::Format_ARGB32);
+
+ QRectF imageRect(0, 0, width, height);
+
+ QPainter painter(&thumb);
+ painter.setRenderHint(QPainter::Antialiasing, true);
+ painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
+
+ if (pScene->isDarkBackground())
+ {
+ painter.fillRect(imageRect, Qt::black);
+ }
+ else
+ {
+ painter.fillRect(imageRect, Qt::white);
+ }
+
+ pScene->setRenderingQuality(UBItem::RenderingQualityHigh);
+
+ pScene->render(&painter, imageRect, sceneRect, Qt::KeepAspectRatio);
+
+ if(UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified()){
+ QPixmap toque(":images/toque.svg");
+ painter.setOpacity(0.6);
+ painter.drawPixmap(QPoint(width - toque.width(),0),toque);
+ }
+
+ pScene->setRenderingQuality(UBItem::RenderingQualityNormal);
+
+ thumb.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation).save(fileName, "JPG");
+ }
+}
+
+
+QUrl UBThumbnailAdaptor::thumbnailUrl(UBDocumentProxy* proxy, int pageIndex)
+{
+ QString fileName = proxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", pageIndex);
+
+ return QUrl::fromLocalFile(fileName);
+}
diff --git a/Sankore-3.1/src/adaptors/UBThumbnailAdaptor.h b/Sankore-3.1/src/adaptors/UBThumbnailAdaptor.h
index 02008f6..5b07dbb 100644
--- a/Sankore-3.1/src/adaptors/UBThumbnailAdaptor.h
+++ b/Sankore-3.1/src/adaptors/UBThumbnailAdaptor.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,34 +18,36 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBTHUMBNAILADAPTOR_H
-#define UBTHUMBNAILADAPTOR_H
-
-#include <QtCore>
-
-class UBDocument;
-class UBDocumentProxy;
-class UBGraphicsScene;
-
-class UBThumbnailAdaptor //static class
-{
- Q_DECLARE_TR_FUNCTIONS(UBThumbnailAdaptor)
-
-public:
- static QUrl thumbnailUrl(UBDocumentProxy* proxy, int pageIndex);
-
- static void persistScene(UBDocumentProxy* proxy, UBGraphicsScene* pScene, int pageIndex, bool overrideModified = false);
-
- static const QPixmap* get(UBDocumentProxy* proxy, int index);
- static void load(UBDocumentProxy* proxy, QList<const QPixmap*>& list);
-
-private:
- static void generateMissingThumbnails(UBDocumentProxy* proxy);
- static void updateDocumentToHandleZeroPage(UBDocumentProxy* proxy);
-
- UBThumbnailAdaptor() {}
-};
-
-#endif // UBTHUMBNAILADAPTOR_H
+
+
+
+#ifndef UBTHUMBNAILADAPTOR_H
+#define UBTHUMBNAILADAPTOR_H
+
+#include <QtCore>
+
+class UBDocument;
+class UBDocumentProxy;
+class UBGraphicsScene;
+
+class UBThumbnailAdaptor //static class
+{
+ Q_DECLARE_TR_FUNCTIONS(UBThumbnailAdaptor)
+
+public:
+ static QUrl thumbnailUrl(UBDocumentProxy* proxy, int pageIndex);
+
+ static void persistScene(UBDocumentProxy* proxy, UBGraphicsScene* pScene, int pageIndex, bool overrideModified = false);
+
+ static const QPixmap* get(UBDocumentProxy* proxy, int index);
+ static void load(UBDocumentProxy* proxy, QList<const QPixmap*>& list);
+ static void clearThumbs(QList<const QPixmap*>& list);
+
+private:
+ static void generateMissingThumbnails(UBDocumentProxy* proxy);
+ static void updateDocumentToHandleZeroPage(UBDocumentProxy* proxy);
+
+ UBThumbnailAdaptor() {}
+};
+
+#endif // UBTHUMBNAILADAPTOR_H
diff --git a/Sankore-3.1/src/adaptors/UBWebPublisher.cpp b/Sankore-3.1/src/adaptors/UBWebPublisher.cpp
index 3b95e00..e779f14 100644
--- a/Sankore-3.1/src/adaptors/UBWebPublisher.cpp
+++ b/Sankore-3.1/src/adaptors/UBWebPublisher.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,9 +20,11 @@
*/
+
#include "UBWebPublisher.h"
#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
#include "adaptors/publishing/UBDocumentPublisher.h"
@@ -63,4 +65,14 @@ void UBWebPublisher::persist(UBDocumentProxy* pDocumentProxy)
}
+bool UBWebPublisher::associatedActionactionAvailableFor(const QModelIndex &selectedIndex)
+{
+ const UBDocumentTreeModel *docModel = qobject_cast<const UBDocumentTreeModel*>(selectedIndex.model());
+ if (!selectedIndex.isValid() || docModel->isCatalog(selectedIndex)) {
+ return false;
+ }
+
+ return true;
+}
+
diff --git a/Sankore-3.1/src/adaptors/UBWebPublisher.h b/Sankore-3.1/src/adaptors/UBWebPublisher.h
index f2a14aa..d2ac514 100644
--- a/Sankore-3.1/src/adaptors/UBWebPublisher.h
+++ b/Sankore-3.1/src/adaptors/UBWebPublisher.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWEBPUBLISHER_H_
#define UBWEBPUBLISHER_H_
@@ -35,7 +36,7 @@ class UBServerXMLHttpRequest;
class UBWebPublisher : public UBExportAdaptor
{
- Q_OBJECT;
+ Q_OBJECT
public:
UBWebPublisher(QObject *parent = 0);
@@ -44,6 +45,8 @@ class UBWebPublisher : public UBExportAdaptor
virtual QString exportName();
virtual void persist(UBDocumentProxy* pDocument);
+
+ virtual bool associatedActionactionAvailableFor(const QModelIndex &selectedIndex);
};
diff --git a/Sankore-3.1/src/adaptors/adaptors.pri b/Sankore-3.1/src/adaptors/adaptors.pri
index 4fc92ce..8ad6460 100644
--- a/Sankore-3.1/src/adaptors/adaptors.pri
+++ b/Sankore-3.1/src/adaptors/adaptors.pri
@@ -15,12 +15,12 @@ HEADERS += src/adaptors/UBExportAdaptor.h\
src/adaptors/UBWebPublisher.h \
src/adaptors/UBImportCFF.h \
src/adaptors/UBExportCFF.h \
- src/adaptors/UBCFFSubsetAdaptor.h
+ src/adaptors/UBCFFSubsetAdaptor.h \
+ src/adaptors/UBExportDocumentSetAdaptor.h \
+ src/adaptors/UBImportDocumentSetAdaptor.h
HEADERS += src/adaptors/publishing/UBDocumentPublisher.h \
src/adaptors/publishing/UBSvgSubsetRasterizer.h
-
-
SOURCES += src/adaptors/UBExportAdaptor.cpp\
src/adaptors/UBExportPDF.cpp \
@@ -39,7 +39,9 @@ SOURCES += src/adaptors/UBExportAdaptor.cpp\
src/adaptors/UBImportCFF.cpp \
src/adaptors/UBExportCFF.cpp \
src/adaptors/UBCFFSubsetAdaptor.cpp \
- src/adaptors/publishing/UBDocumentPublisher.cpp
+ src/adaptors/publishing/UBDocumentPublisher.cpp \
+ src/adaptors/UBExportDocumentSetAdaptor.cpp \
+ src/adaptors/UBImportDocumentSetAdaptor.cpp
SOURCES += \
src/adaptors/publishing/UBSvgSubsetRasterizer.cpp
diff --git a/Sankore-3.1/src/adaptors/publishing/UBDocumentPublisher.cpp b/Sankore-3.1/src/adaptors/publishing/UBDocumentPublisher.cpp
index 59a2b18..2c91f86 100644
--- a/Sankore-3.1/src/adaptors/publishing/UBDocumentPublisher.cpp
+++ b/Sankore-3.1/src/adaptors/publishing/UBDocumentPublisher.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,813 +18,813 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include <QFileInfo>
-
-#include "UBDocumentPublisher.h"
-
-#include "frameworks/UBPlatformUtils.h"
-#include "frameworks/UBFileSystemUtils.h"
-#include "frameworks/UBStringUtils.h"
-
-#include "network/UBNetworkAccessManager.h"
-#include "network/UBServerXMLHttpRequest.h"
-
-#include "core/UBDocumentManager.h"
-#include "core/UBApplication.h"
-#include "core/UBPersistenceManager.h"
-#include "core/UBApplicationController.h"
-
-#include "board/UBBoardController.h"
-
-#include "gui/UBMainWindow.h"
-
-#include "document/UBDocumentProxy.h"
-#include "document/UBDocumentContainer.h"
-
-#include "domain/UBGraphicsWidgetItem.h"
-
-#include "globals/UBGlobals.h"
-
-THIRD_PARTY_WARNINGS_DISABLE
-#include "quazip.h"
-#include "quazipfile.h"
-THIRD_PARTY_WARNINGS_ENABLE
-
-#include "adaptors/UBExportFullPDF.h"
-#include "adaptors/UBExportDocument.h"
-#include "adaptors/UBSvgSubsetAdaptor.h"
-
-#include "UBSvgSubsetRasterizer.h"
-
-#include "../../core/UBApplication.h"
-
-#include "core/memcheck.h"
-
-
-UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *parent)
- : QObject(parent)
- , mSourceDocument(pDocument)
- , mUsername("")
- , mPassword("")
- , bLoginCookieSet(false)
-{
- init();
-}
-
-
-UBDocumentPublisher::~UBDocumentPublisher()
-{
-}
-
-
-void UBDocumentPublisher::publish()
-{
- //check that the username and password are stored on preferences
- UBSettings* settings = UBSettings::settings();
-
- if(settings->communityUsername().isEmpty() || settings->communityPassword().isEmpty()){
- UBApplication::showMessage(tr("Credentials has to not been filled out yet."));
- qDebug() << "trying to connect to community without the required credentials";
- return;
- }
-
- mUsername = settings->communityUsername();
- mPassword = settings->communityPassword();
-
- UBPublicationDlg dlg;
- if(QDialog::Accepted == dlg.exec())
- {
- mDocInfos.title = dlg.title();
- mDocInfos.description = dlg.description();
-
- buildUbwFile();
-
- UBApplication::showMessage(tr("Uploading Sankore File on Web."));
-
- sendUbw(mUsername, mPassword);
- }
-}
-
-void UBDocumentPublisher::buildUbwFile()
-{
- QDir d;
- d.mkpath(UBFileSystemUtils::defaultTempDirPath());
-
- QString tmpDir = UBFileSystemUtils::createTempDir();
-
- if (UBFileSystemUtils::copyDir(mSourceDocument->persistencePath(), tmpDir))
- {
- QString documentName = mSourceDocument->name();
-
- mPublishingPath = tmpDir;
- mPublishingSize = mSourceDocument->pageCount();
-
- rasterizeScenes();
-
- upgradeDocumentForPublishing();
-
- UBExportFullPDF pdfExporter;
- pdfExporter.setVerbode(false);
- pdfExporter.persistsDocument(mSourceDocument, mPublishingPath + "/" + documentName + ".pdf");
-
- UBExportDocument ubzExporter;
- ubzExporter.setVerbode(false);
- ubzExporter.persistsDocument(mSourceDocument, mPublishingPath + "/" + documentName + ".ubz");
-
- // remove all useless files
-
- for (int pageIndex = 0; pageIndex < mPublishingSize; pageIndex++) {
- QString filename = mPublishingPath + UBFileSystemUtils::digitFileFormat("/page%1.svg",pageIndex);
-
- QFile::remove(filename);
- }
-
- UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::imageDirectory);
- UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::objectDirectory);
- UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::videoDirectory);
- UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::audioDirectory);
-
- mTmpZipFile = UBFileSystemUtils::defaultTempDirPath() + "/" + UBStringUtils::toCanonicalUuid(QUuid::createUuid()) + ".ubw~";
-
- QuaZip zip(mTmpZipFile);
- zip.setFileNameCodec("UTF-8");
- if (!zip.open(QuaZip::mdCreate))
- {
- qWarning() << "Export failed. Cause: zip.open(): " << zip.getZipError() << "," << mTmpZipFile;
- QApplication::restoreOverrideCursor();
- return;
- }
-
- QuaZipFile outFile(&zip);
-
- if (!UBFileSystemUtils::compressDirInZip(mPublishingPath, "", &outFile, true))
- {
- qWarning("Export failed. compressDirInZip failed ...");
- zip.close();
- UBApplication::showMessage(tr("Export failed."));
- QApplication::restoreOverrideCursor();
- return;
- }
-
- if (zip.getZipError() != 0)
- {
- qWarning("Export failed. Cause: zip.close(): %d", zip.getZipError());
- zip.close();
- UBApplication::showMessage(tr("Export failed."));
- QApplication::restoreOverrideCursor();
- return;
- }
-
- zip.close();
-
- }
- else
- {
- UBApplication::showMessage(tr("Export canceled ..."));
- QApplication::restoreOverrideCursor();
- }
-}
-
-void UBDocumentPublisher::rasterizeScenes()
-{
-
- for (int pageIndex = 0; pageIndex < mPublishingSize; pageIndex++)
- {
- UBApplication::showMessage(tr("Converting page %1/%2 ...").arg(UBDocumentContainer::pageFromSceneIndex(pageIndex)).arg(mPublishingSize), true);
-
- UBDocumentProxy publishingDocument(mPublishingPath);
- UBSvgSubsetRasterizer rasterizer(&publishingDocument, pageIndex);
-
- QString filename = mPublishingPath + UBFileSystemUtils::digitFileFormat("/page%1.jpg",pageIndex);
-
- rasterizer.rasterizeToFile(filename);
-
- }
-}
-
-
-void UBDocumentPublisher::updateGoogleMapApiKey()
-{
- QDir widgestDir(mPublishingPath + "/" + UBPersistenceManager::widgetDirectory);
-
- QString uniboardWebGoogleMapApiKey = UBSettings::settings()->uniboardWebGoogleMapApiKey->get().toString();
-
- foreach(QFileInfo dirInfo, widgestDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot))
- {
- QString config = UBFileSystemUtils::readTextFile(dirInfo.absoluteFilePath() + "/config.xml").toLower();
-
- if (config.contains("google") && config.contains("map"))
- {
- QDir widgetDir(dirInfo.absoluteFilePath());
-
- foreach(QFileInfo fileInfo, widgetDir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot))
- {
- QFile file(fileInfo.absoluteFilePath());
-
- if (file.open(QIODevice::ReadWrite))
- {
- QTextStream stream(&file);
- QString content = stream.readAll();
-
- if (content.contains("ABQIAAAA6vtVqAUu8kZ_eTz7c8kwSBT9UCAhw_xm0LNFHsWmQxTJAdp5lxSY_5r-lZriY_7sACaMnl80JcX6Og"))
- {
- content.replace("ABQIAAAA6vtVqAUu8kZ_eTz7c8kwSBT9UCAhw_xm0LNFHsWmQxTJAdp5lxSY_5r-lZriY_7sACaMnl80JcX6Og",
- uniboardWebGoogleMapApiKey);
-
- file.resize(0);
- file.write(content.toUtf8());
- }
- file.close();
- }
- }
- }
- }
-}
-
-
-void UBDocumentPublisher::upgradeDocumentForPublishing()
-{
- for (int pageIndex = 0; pageIndex < mPublishingSize; pageIndex++)
- {
- UBDocumentProxy publishingDocument(mPublishingPath);
- UBGraphicsScene *scene = UBSvgSubsetAdaptor::loadScene(&publishingDocument, pageIndex);
-
- QList<UBGraphicsW3CWidgetItem*> widgets;
-
- foreach(QGraphicsItem* item, scene->items()){
- UBGraphicsW3CWidgetItem *widgetItem = dynamic_cast<UBGraphicsW3CWidgetItem*>(item);
-
- if(widgetItem){
- generateWidgetPropertyScript(widgetItem, UBDocumentContainer::pageFromSceneIndex(pageIndex));
- widgets << widgetItem;
- }
- }
-
- QString filename = mPublishingPath + UBFileSystemUtils::digitFileFormat("/page%1.json",pageIndex);
-
- QFile jsonFile(filename);
- if (jsonFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
- {
- jsonFile.write("{\n");
- jsonFile.write(QString(" \"scene\": {\n").toUtf8());
- jsonFile.write(QString(" \"x\": %1,\n").arg(scene->normalizedSceneRect().x()).toUtf8());
- jsonFile.write(QString(" \"y\": %1,\n").arg(scene->normalizedSceneRect().y()).toUtf8());
- jsonFile.write(QString(" \"width\": %1,\n").arg(scene->normalizedSceneRect().width()).toUtf8());
- jsonFile.write(QString(" \"height\": %1\n").arg(scene->normalizedSceneRect().height()).toUtf8());
- jsonFile.write(QString(" },\n").toUtf8());
-
- jsonFile.write(QString(" \"widgets\": [\n").toUtf8());
-
- bool first = true;
-
- foreach(UBGraphicsW3CWidgetItem* widget, widgets)
- {
- if (!first)
- jsonFile.write(QString(" ,\n").toUtf8());
-
- jsonFile.write(QString(" {\n").toUtf8());
- jsonFile.write(QString(" \"uuid\": \"%1\",\n").arg(UBStringUtils::toCanonicalUuid(widget->uuid())).toUtf8());
- jsonFile.write(QString(" \"id\": \"%1\",\n").arg(widget->metadatas().id).toUtf8());
-
- jsonFile.write(QString(" \"name\": \"%1\",\n").arg(widget->metadatas().name).toUtf8());
- jsonFile.write(QString(" \"description\": \"%1\",\n").arg(widget->metadatas().description).toUtf8());
- jsonFile.write(QString(" \"author\": \"%1\",\n").arg(widget->metadatas().author).toUtf8());
- jsonFile.write(QString(" \"authorEmail\": \"%1\",\n").arg(widget->metadatas().authorEmail).toUtf8());
- jsonFile.write(QString(" \"authorHref\": \"%1\",\n").arg(widget->metadatas().authorHref).toUtf8());
- jsonFile.write(QString(" \"version\": \"%1\",\n").arg(widget->metadatas().authorHref).toUtf8());
-
- jsonFile.write(QString(" \"x\": %1,\n").arg(widget->sceneBoundingRect().x()).toUtf8());
- jsonFile.write(QString(" \"y\": %1,\n").arg(widget->sceneBoundingRect().y()).toUtf8());
- jsonFile.write(QString(" \"width\": %1,\n").arg(widget->sceneBoundingRect().width()).toUtf8());
- jsonFile.write(QString(" \"height\": %1,\n").arg(widget->sceneBoundingRect().height()).toUtf8());
-
- jsonFile.write(QString(" \"nominalWidth\": %1,\n").arg(widget->boundingRect().width()).toUtf8());
- jsonFile.write(QString(" \"nominalHeight\": %1,\n").arg(widget->boundingRect().height()).toUtf8());
-
- QString url = UBPersistenceManager::widgetDirectory + "/" + widget->uuid().toString() + ".wgt";
- jsonFile.write(QString(" \"src\": \"%1\",\n").arg(url).toUtf8());
- QString startFile = widget->mainHtmlFileName();
- jsonFile.write(QString(" \"startFile\": \"%1\",\n").arg(startFile).toUtf8());
-
- QMap<QString, QString> preferences = widget->UBGraphicsWidgetItem::preferences();
-
- jsonFile.write(QString(" \"preferences\": {\n").toUtf8());
-
- foreach(QString key, preferences.keys())
- {
- QString sep = ",";
- if (key == preferences.keys().last())
- sep = "";
-
- jsonFile.write(QString(" \"%1\": \"%2\"%3\n")
- .arg(key)
- .arg(preferences.value(key))
- .arg(sep)
- .toUtf8());
- }
- jsonFile.write(QString(" },\n").toUtf8());
-
- jsonFile.write(QString(" \"datastore\": {\n").toUtf8());
-
- QMap<QString, QString> datastoreEntries = widget->datastoreEntries();
-
- foreach(QString entry, datastoreEntries.keys())
- {
- QString sep = ",";
- if (entry == datastoreEntries.keys().last())
- sep = "";
-
- jsonFile.write(QString(" \"%1\": \"%2\"%3\n")
- .arg(entry)
- .arg(datastoreEntries.value(entry))
- .arg(sep)
- .toUtf8());
- }
- jsonFile.write(QString(" }\n").toUtf8());
-
- jsonFile.write(QString(" }\n").toUtf8());
-
- first = false;
- }
-
- jsonFile.write(" ]\n");
- jsonFile.write("}\n");
- }
- else
- {
- qWarning() << "Cannot open file" << filename << "for saving page state";
- }
-
- delete scene;
- }
-
- updateGoogleMapApiKey();
-}
-
-
-void UBDocumentPublisher::generateWidgetPropertyScript(UBGraphicsW3CWidgetItem *widgetItem, int pageNumber)
-{
-
- QMap<QString, QString> preferences = widgetItem->UBGraphicsWidgetItem::preferences();
- QMap<QString, QString> datastoreEntries = widgetItem->datastoreEntries();
-
- QString startFileName = widgetItem->mainHtmlFileName();
-
- if (!startFileName.startsWith("http://"))
- {
- QString startFilePath = mPublishingPath + "/" + UBPersistenceManager::widgetDirectory + "/" + widgetItem->uuid().toString() + ".wgt/" + startFileName;
-
- QFile startFile(startFilePath);
-
- if (startFile.exists())
- {
- if (startFile.open(QIODevice::ReadWrite))
- {
- QTextStream stream(&startFile);
- QStringList lines;
-
- bool addedJs = false;
-
- QString line;
- do
- {
- line = stream.readLine();
- if (!line.isNull())
- {
- lines << line;
-
- if (!addedJs && line.contains("<head") && line.contains(">") ) // TODO UB 4.6, this is naive ... the HEAD tag may be on several lines
- {
- lines << "";
- lines << " <script type=\"text/javascript\">";
-
- lines << " var widget = {};";
- lines << " widget.id = '" + widgetItem->metadatas().id + "';";
- lines << " widget.name = '" + widgetItem->metadatas().name + "';";
- lines << " widget.description = '" + widgetItem->metadatas().description + "';";
- lines << " widget.author = '" + widgetItem->metadatas().author + "';";
- lines << " widget.authorEmail = '" + widgetItem->metadatas().authorEmail + "';";
- lines << " widget.authorHref = '" + widgetItem->metadatas().authorHref + "';";
- lines << " widget.version = '" + widgetItem->metadatas().version + "';";
-
- lines << " widget.uuid = '" + UBStringUtils::toCanonicalUuid(widgetItem->uuid()) + "';";
-
- lines << " widget.width = " + QString("%1").arg(widgetItem->nominalSize().width()) + ";";
- lines << " widget.height = " + QString("%1").arg(widgetItem->nominalSize().height()) + ";";
- lines << " widget.openUrl = function(url) { window.open(url); }";
- lines << " widget.preferences = new Array()";
-
- foreach(QString pref, preferences.keys())
- {
- lines << " widget.preferences['" + pref + "'] = '" + preferences.value(pref) + "';";
- }
-
- lines << " widget.preferences.key = function(index) {";
- lines << " var currentIndex = 0;";
- lines << " for(key in widget.preferences){";
- lines << " if (currentIndex == index){ return key;}";
- lines << " currentIndex++;";
- lines << " }";
- lines << " return '';";
- lines << " }";
-
- lines << " widget.preferences.getItem = function(key) {";
- lines << " return widget.preferences[key];";
- lines << " }";
-
- lines << " widget.preferences.setItem = function(key, value) {}";
- lines << " widget.preferences.removeItem = function(key) {}";
- lines << " widget.preferences.clear = function() {}";
-
- lines << " var uniboard = {};";
- lines << " uniboard.pageCount = " + QString("%1").arg(mPublishingSize) + ";";
- lines << " uniboard.currentPageNumber = " + QString("%1").arg(pageNumber) + ";";
- lines << " uniboard.uuid = '" + UBStringUtils::toCanonicalUuid(widgetItem->uuid()) + "'";
- lines << " uniboard.lang = navigator.language;";
- lines << " uniboard.locale = function() {return navigator.language}";
- lines << " uniboard.messages = {}";
- lines << " uniboard.messages.subscribeToTopic = function(topicName){}";
- lines << " uniboard.messages.unsubscribeFromTopic = function(topicName){}";
- lines << " uniboard.messages.sendMessage = function(topicName, message){}";
-
- lines << " uniboard.datastore = {};";
- lines << " uniboard.datastore.document = new Array();";
- foreach(QString entry, datastoreEntries.keys())
- {
- lines << " uniboard.datastore.document['" + entry + "'] = '" + datastoreEntries.value(entry) + "';";
- }
-
- lines << " uniboard.datastore.document.key = function(index) {";
- lines << " var currentIndex = 0;";
- lines << " for(key in uniboard.datastore.document){";
- lines << " if (currentIndex == index){ return key;}";
- lines << " currentIndex++;";
- lines << " }";
- lines << " return '';";
- lines << " }";
-
- lines << " uniboard.datastore.document.getItem = function(key) {";
- lines << " return uniboard.datastore.document[key];";
- lines << " }";
-
- lines << " uniboard.datastore.document.setItem = function(key, value) {}";
- lines << " uniboard.datastore.document.removeItem = function(key) {}";
- lines << " uniboard.datastore.document.clear = function() {}";
-
- lines << " uniboard.setTool = function(tool){}";
- lines << " uniboard.setPenColor = function(color){}";
- lines << " uniboard.setMarkerColor = function(color){}";
-
- lines << " uniboard.pageThumbnail = function(pageNumber){";
- lines << " var nb;";
- lines << " if (pageNumber < 10) return 'page00' + pageNumber + '.thumbnail.jpg';";
- lines << " if (pageNumber < 100) return 'page0' + pageNumber + '.thumbnail.jpg';";
- lines << " return 'page' + pageNumber + '.thumbnail.jpg;'";
- lines << " }";
-
- lines << " uniboard.zoom = function(factor, x, y){}";
- lines << " uniboard.move = function(x, y){}";
- lines << " uniboard.move = function(x, y){}";
- lines << " uniboard.moveTo = function(x, y){}";
- lines << " uniboard.drawLineTo = function(x, y, width){}";
- lines << " uniboard.eraseLineTo = function(x, y, width){}";
- lines << " uniboard.clear = function(){}";
- lines << " uniboard.setBackground = function(dark, crossed){}";
- lines << " uniboard.addObject = function(url, width, height, x, y, background){}";
- lines << " uniboard.resize = function(width, height){window.resizeTo(width, height);}";
-
- lines << " uniboard.showMessage = function(message){alert(message);}";
- lines << " uniboard.centerOn = function(x, y){}";
- lines << " uniboard.addText = function(text, x, y){}";
-
- lines << " uniboard.setPreference = function(key, value){}";
- lines << " uniboard.preference = function(key, defValue){";
- lines << " var pref = widget.preferences[key];";
- lines << " if (pref == undefined) ";
- lines << " return defValue;";
- lines << " else ";
- lines << " return pref;";
- lines << " }";
- lines << " uniboard.preferenceKeys = function(){";
- lines << " var keys = new Array();";
- lines << " for(key in widget.preferences){";
- lines << " keys.push(key);";
- lines << " }";
- lines << " return keys;";
- lines << " }";
-
- lines << " uniboard.datastore.document.key = function(index) {";
- lines << " var currentIndex = 0;";
- lines << " for(key in uniboard.datastore.document){";
- lines << " if (currentIndex == index){ return key;}";
- lines << " currentIndex++;";
- lines << " }";
- lines << " return '';";
- lines << " }";
-
- lines << " uniboard.datastore.document.getItem = function(key) {";
- lines << " return uniboard.datastore.document[key];";
- lines << " }";
-
- lines << " uniboard.datastore.document.setItem = function(key, value) {}";
- lines << " uniboard.datastore.document.removeItem = function(key) {}";
- lines << " uniboard.datastore.document.clear = function() {}";
-
- lines << " </script>";
- lines << "";
-
- addedJs = true;
- }
- }
- }
- while (!line.isNull());
-
- startFile.resize(0);
- startFile.write(lines.join("\n").toUtf8()); // TODO UB 4.x detect real html encoding
-
- startFile.close();
- }
- }
- }
- else{
- qWarning() << "Remote Widget start file, cannot inject widget preferences and datastore entries";
- }
-}
-
-void UBDocumentPublisher::init()
-{
- mCrlf=0x0d;
- mCrlf+=0x0a;
- mDocInfos.title = "";
- mDocInfos.description = "";
-
- mpCookieJar = new QNetworkCookieJar();
- mpNetworkMgr = new QNetworkAccessManager(this);
-
- connect(mpNetworkMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*)));
-}
-
-void UBDocumentPublisher::onFinished(QNetworkReply *reply)
-{
- QVariant cookieHeader = reply->rawHeader("Set-Cookie");
- // First we concatenate all the Set-Cookie values (the packet can contains many of them)
- QStringList qslCookie = cookieHeader.toString().split("\n");
- QString qsCookieValue = qslCookie.at(0);
- for (int i = 1; i < qslCookie.size(); i++) {
- qsCookieValue += "; " +qslCookie.at(i);
- }
-
- // Now we isolate every cookie value
- QStringList qslCookieVals = qsCookieValue.split("; ");
-
- bool bTransferOk = false;
-
- for(int j = 0; j < qslCookieVals.size(); j++)
- {
- qDebug() << j;
- if(qslCookieVals.at(j).startsWith("assetStatus"))
- {
- QStringList qslAsset = qslCookieVals.at(j).split("=");
- if(qslAsset.at(1) == "UPLOADED")
- {
- bTransferOk = true;
- break;
- }
- }
- }
-
- if(bTransferOk)
- {
- UBApplication::showMessage(tr("Document uploaded correctly on the web."));
- }
- else
- {
- UBApplication::showMessage(tr("Failed to upload document on the web."));
- }
-
- reply->deleteLater();
-}
-
-void UBDocumentPublisher::sendUbw(QString username, QString password)
-{
- if (QFile::exists(mTmpZipFile))
- {
- QFile f(mTmpZipFile);
- if (f.open(QIODevice::ReadOnly))
- {
- QFileInfo fi(f);
- QByteArray ba = f.readAll();
- QString boundary,data, multipartHeader;
- QByteArray datatoSend;
-
- boundary = "---WebKitFormBoundaryDKBTgA53MiyWrzLY";
- multipartHeader = "multipart/form-data; boundary="+boundary;
-
- data="--"+boundary+mCrlf;
- data+="Content-Disposition: form-data; name=\"title\"" + mCrlf + mCrlf + mDocInfos.title + mCrlf;
- data+="--"+boundary+mCrlf;
- data+="Content-Disposition: form-data; name=\"description\"" + mCrlf + mCrlf + mDocInfos.description.remove("\n") + mCrlf;
- data+="--"+boundary+mCrlf;
- data+="Content-Disposition: form-data; name=\"file\"; filename=\""+ fi.fileName() +"\""+mCrlf;
- data+="Content-Type: application/octet-stream"+mCrlf+mCrlf;
- datatoSend=data.toAscii(); // convert data string to byte array for request
- datatoSend += ba;
- datatoSend += mCrlf;
- datatoSend += QString("--%0--%1").arg(boundary).arg(mCrlf);
-
- QNetworkRequest request(QUrl(QString(DOCPUBLICATION_URL).toAscii().constData()));
-
- request.setHeader(QNetworkRequest::ContentTypeHeader, multipartHeader);
- request.setHeader(QNetworkRequest::ContentLengthHeader,datatoSend.size());
- QString b64Auth = getBase64Of(QString("%0:%1").arg(username).arg(password));
- request.setRawHeader("Authorization", QString("Basic %0").arg(b64Auth).toAscii().constData());
- request.setRawHeader("Host", "planete.sankore.org");
- request.setRawHeader("Accept", "*/*");
- request.setRawHeader("Accept-Language", "en-US,*");
-
- mpCookieJar->setCookiesFromUrl(mCookies, QUrl(DOCPUBLICATION_URL));
- mpNetworkMgr->setCookieJar(mpCookieJar);
-
- // Send the file
- mpNetworkMgr->post(request,datatoSend);
- }
- }
-}
-
-QString UBDocumentPublisher::getBase64Of(QString stringToEncode)
-{
- return stringToEncode.toAscii().toBase64();
-}
-
-// ---------------------------------------------------------
-UBProxyLoginDlg::UBProxyLoginDlg(QWidget *parent, const char *name):QDialog(parent)
- , mpLayout(NULL)
- , mpUserLayout(NULL)
- , mpPasswordLayout(NULL)
- , mpButtons(NULL)
- , mpUserLabel(NULL)
- , mpPasswordLabel(NULL)
- , mpUsername(NULL)
- , mpPassword(NULL)
-{
- setObjectName(name);
- setFixedSize(400, 150);
- setWindowTitle(tr("Proxy Login"));
-
- mpLayout = new QVBoxLayout();
- setLayout(mpLayout);
- mpUserLayout = new QHBoxLayout();
- mpLayout->addLayout(mpUserLayout);
- mpPasswordLayout = new QHBoxLayout();
- mpLayout->addLayout(mpPasswordLayout);
-
- mpUserLabel = new QLabel(tr("Username:"), this);
- mpUsername = new QLineEdit(this);
- mpUserLayout->addWidget(mpUserLabel, 0);
- mpUserLayout->addWidget(mpUsername, 1);
-
- mpPasswordLabel = new QLabel(tr("Password:"), this);
- mpPassword = new QLineEdit(this);
- mpPasswordLayout->addWidget(mpPasswordLabel, 0);
- mpPasswordLayout->addWidget(mpPassword, 1);
-
- mpButtons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
- mpLayout->addWidget(mpButtons);
-
- connect(mpButtons, SIGNAL(accepted()), this, SLOT(accept()));
- connect(mpButtons, SIGNAL(rejected()), this, SLOT(reject()));
-
-}
-
-UBProxyLoginDlg::~UBProxyLoginDlg()
-{
- if(NULL != mpLayout)
- {
- delete mpLayout;
- mpLayout = NULL;
- }
- if(NULL != mpButtons)
- {
- delete mpButtons;
- mpButtons = NULL;
- }
- if(NULL != mpUserLabel)
- {
- delete mpUserLabel;
- mpUserLabel = NULL;
- }
- if(NULL != mpPasswordLabel)
- {
- delete mpPasswordLabel;
- mpPasswordLabel = NULL;
- }
- if(NULL != mpUsername)
- {
- delete mpUsername;
- mpUsername = NULL;
- }
- if(NULL != mpPassword)
- {
- delete mpPassword;
- mpPassword = NULL;
- }
-}
-
-// ---------------------------------------------------------
-UBPublicationDlg::UBPublicationDlg(QWidget *parent, const char *name):QDialog(parent)
- , mpLayout(NULL)
- , mpTitleLayout(NULL)
- , mpTitleLabel(NULL)
- , mpTitle(NULL)
- , mpDescLabel(NULL)
- , mpDescription(NULL)
- , mpButtons(NULL)
-{
- setObjectName(name);
- setWindowTitle(tr("Publish document on the web"));
-
- resize(500, 300);
-
- mpLayout = new QVBoxLayout();
- setLayout(mpLayout);
-
- mpTitleLabel = new QLabel(tr("Title:"), this);
- mpTitle = new QLineEdit(this);
- mpTitleLayout = new QHBoxLayout();
- mpTitleLayout->addWidget(mpTitleLabel, 0);
- mpTitleLayout->addWidget(mpTitle, 1);
- mpLayout->addLayout(mpTitleLayout, 0);
-
- mpDescLabel = new QLabel(tr("Description:"), this);
- mpLayout->addWidget(mpDescLabel, 0);
-
- mpDescription = new QTextEdit(this);
- mpLayout->addWidget(mpDescription, 1);
-
- mpButtons = new QDialogButtonBox(QDialogButtonBox::Cancel | QDialogButtonBox::Ok, Qt::Horizontal, this);
- mpButtons->button(QDialogButtonBox::Ok)->setText(tr("Publish"));
- mpLayout->addWidget(mpButtons);
-
- mpButtons->button(QDialogButtonBox::Ok)->setEnabled(false);
-
- connect(mpButtons, SIGNAL(accepted()), this, SLOT(accept()));
- connect(mpButtons, SIGNAL(rejected()), this, SLOT(reject()));
- connect(mpTitle, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged()));
- connect(mpDescription, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
-}
-
-UBPublicationDlg::~UBPublicationDlg()
-{
- if(NULL != mpTitleLabel)
- {
- delete mpTitleLabel;
- mpTitleLabel = NULL;
- }
- if(NULL != mpTitle)
- {
- delete mpTitle;
- mpTitle = NULL;
- }
- if(NULL != mpDescLabel)
- {
- delete mpDescLabel;
- mpDescLabel = NULL;
- }
- if(NULL != mpDescription)
- {
- delete mpDescription;
- mpDescription = NULL;
- }
- if(NULL != mpButtons)
- {
- delete mpButtons;
- mpButtons = NULL;
- }
- if(NULL != mpTitleLayout)
- {
- delete mpTitleLayout;
- mpTitleLayout = NULL;
- }
- if(NULL != mpLayout)
- {
- delete mpLayout;
- mpLayout = NULL;
- }
-}
-
-void UBPublicationDlg::onTextChanged()
-{
- bool bPublishButtonState = false;
- if(mpTitle->text() != "" && mpDescription->document()->toPlainText() != "")
- {
- bPublishButtonState = true;
- }
- else
- {
- bPublishButtonState = false;
- }
-
- mpButtons->button(QDialogButtonBox::Ok)->setEnabled(bPublishButtonState);
-}
+
+
+#include <QFileInfo>
+
+#include "UBDocumentPublisher.h"
+
+#include "frameworks/UBPlatformUtils.h"
+#include "frameworks/UBFileSystemUtils.h"
+#include "frameworks/UBStringUtils.h"
+
+#include "network/UBNetworkAccessManager.h"
+#include "network/UBServerXMLHttpRequest.h"
+
+#include "core/UBDocumentManager.h"
+#include "core/UBApplication.h"
+#include "core/UBPersistenceManager.h"
+#include "core/UBApplicationController.h"
+
+#include "board/UBBoardController.h"
+
+#include "gui/UBMainWindow.h"
+
+#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentContainer.h"
+
+#include "domain/UBGraphicsWidgetItem.h"
+
+#include "globals/UBGlobals.h"
+
+THIRD_PARTY_WARNINGS_DISABLE
+#include "quazip.h"
+#include "quazipfile.h"
+THIRD_PARTY_WARNINGS_ENABLE
+
+#include "adaptors/UBExportFullPDF.h"
+#include "adaptors/UBExportDocument.h"
+#include "adaptors/UBSvgSubsetAdaptor.h"
+
+#include "UBSvgSubsetRasterizer.h"
+
+#include "../../core/UBApplication.h"
+
+#include "core/memcheck.h"
+
+
+UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *parent)
+ : QObject(parent)
+ , mSourceDocument(pDocument)
+ , mUsername("")
+ , mPassword("")
+ , bLoginCookieSet(false)
+{
+ init();
+}
+
+
+UBDocumentPublisher::~UBDocumentPublisher()
+{
+}
+
+
+void UBDocumentPublisher::publish()
+{
+ //check that the username and password are stored on preferences
+ UBSettings* settings = UBSettings::settings();
+
+ if(settings->communityUsername().isEmpty() || settings->communityPassword().isEmpty()){
+ UBApplication::showMessage(tr("Credentials has to not been filled out yet."));
+ qDebug() << "trying to connect to community without the required credentials";
+ return;
+ }
+
+ mUsername = settings->communityUsername();
+ mPassword = settings->communityPassword();
+
+ UBPublicationDlg dlg;
+ if(QDialog::Accepted == dlg.exec())
+ {
+ mDocInfos.title = dlg.title();
+ mDocInfos.description = dlg.description();
+
+ buildUbwFile();
+
+ UBApplication::showMessage(tr("Uploading Sankore File on Web."));
+
+ sendUbw(mUsername, mPassword);
+ }
+}
+
+void UBDocumentPublisher::buildUbwFile()
+{
+ QDir d;
+ d.mkpath(UBFileSystemUtils::defaultTempDirPath());
+
+ QString tmpDir = UBFileSystemUtils::createTempDir();
+
+ if (UBFileSystemUtils::copyDir(mSourceDocument->persistencePath(), tmpDir))
+ {
+ QString documentName = mSourceDocument->name();
+
+ mPublishingPath = tmpDir;
+ mPublishingSize = mSourceDocument->pageCount();
+
+ rasterizeScenes();
+
+ upgradeDocumentForPublishing();
+
+ UBExportFullPDF pdfExporter;
+ pdfExporter.setVerbode(false);
+ pdfExporter.persistsDocument(mSourceDocument, mPublishingPath + "/" + documentName + ".pdf");
+
+ UBExportDocument ubzExporter;
+ ubzExporter.setVerbode(false);
+ ubzExporter.persistsDocument(mSourceDocument, mPublishingPath + "/" + documentName + ".ubz");
+
+ // remove all useless files
+
+ for (int pageIndex = 0; pageIndex < mPublishingSize; pageIndex++) {
+ QString filename = mPublishingPath + UBFileSystemUtils::digitFileFormat("/page%1.svg",pageIndex);
+
+ QFile::remove(filename);
+ }
+
+ UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::imageDirectory);
+ UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::objectDirectory);
+ UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::videoDirectory);
+ UBFileSystemUtils::deleteDir(mPublishingPath + "/" + UBPersistenceManager::audioDirectory);
+
+ mTmpZipFile = UBFileSystemUtils::defaultTempDirPath() + "/" + UBStringUtils::toCanonicalUuid(QUuid::createUuid()) + ".ubw~";
+
+ QuaZip zip(mTmpZipFile);
+ zip.setFileNameCodec("UTF-8");
+ if (!zip.open(QuaZip::mdCreate))
+ {
+ qWarning() << "Export failed. Cause: zip.open(): " << zip.getZipError() << "," << mTmpZipFile;
+ QApplication::restoreOverrideCursor();
+ return;
+ }
+
+ QuaZipFile outFile(&zip);
+
+ if (!UBFileSystemUtils::compressDirInZip(mPublishingPath, "", &outFile, true))
+ {
+ qWarning("Export failed. compressDirInZip failed ...");
+ zip.close();
+ UBApplication::showMessage(tr("Export failed."));
+ QApplication::restoreOverrideCursor();
+ return;
+ }
+
+ if (zip.getZipError() != 0)
+ {
+ qWarning("Export failed. Cause: zip.close(): %d", zip.getZipError());
+ zip.close();
+ UBApplication::showMessage(tr("Export failed."));
+ QApplication::restoreOverrideCursor();
+ return;
+ }
+
+ zip.close();
+
+ }
+ else
+ {
+ UBApplication::showMessage(tr("Export canceled ..."));
+ QApplication::restoreOverrideCursor();
+ }
+}
+
+void UBDocumentPublisher::rasterizeScenes()
+{
+
+ for (int pageIndex = 0; pageIndex < mPublishingSize; pageIndex++)
+ {
+ UBApplication::showMessage(tr("Converting page %1/%2 ...").arg(UBDocumentContainer::pageFromSceneIndex(pageIndex)).arg(mPublishingSize), true);
+
+ UBDocumentProxy publishingDocument(mPublishingPath);
+ UBSvgSubsetRasterizer rasterizer(&publishingDocument, pageIndex);
+
+ QString filename = mPublishingPath + UBFileSystemUtils::digitFileFormat("/page%1.jpg",pageIndex);
+
+ rasterizer.rasterizeToFile(filename);
+
+ }
+}
+
+
+void UBDocumentPublisher::updateGoogleMapApiKey()
+{
+ QDir widgestDir(mPublishingPath + "/" + UBPersistenceManager::widgetDirectory);
+
+ QString uniboardWebGoogleMapApiKey = UBSettings::settings()->uniboardWebGoogleMapApiKey->get().toString();
+
+ foreach(QFileInfo dirInfo, widgestDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot))
+ {
+ QString config = UBFileSystemUtils::readTextFile(dirInfo.absoluteFilePath() + "/config.xml").toLower();
+
+ if (config.contains("google") && config.contains("map"))
+ {
+ QDir widgetDir(dirInfo.absoluteFilePath());
+
+ foreach(QFileInfo fileInfo, widgetDir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot))
+ {
+ QFile file(fileInfo.absoluteFilePath());
+
+ if (file.open(QIODevice::ReadWrite))
+ {
+ QTextStream stream(&file);
+ QString content = stream.readAll();
+
+ if (content.contains("ABQIAAAA6vtVqAUu8kZ_eTz7c8kwSBT9UCAhw_xm0LNFHsWmQxTJAdp5lxSY_5r-lZriY_7sACaMnl80JcX6Og"))
+ {
+ content.replace("ABQIAAAA6vtVqAUu8kZ_eTz7c8kwSBT9UCAhw_xm0LNFHsWmQxTJAdp5lxSY_5r-lZriY_7sACaMnl80JcX6Og",
+ uniboardWebGoogleMapApiKey);
+
+ file.resize(0);
+ file.write(content.toUtf8());
+ }
+ file.close();
+ }
+ }
+ }
+ }
+}
+
+
+void UBDocumentPublisher::upgradeDocumentForPublishing()
+{
+ for (int pageIndex = 0; pageIndex < mPublishingSize; pageIndex++)
+ {
+ UBDocumentProxy publishingDocument(mPublishingPath);
+ UBGraphicsScene *scene = UBSvgSubsetAdaptor::loadScene(&publishingDocument, pageIndex);
+
+ QList<UBGraphicsW3CWidgetItem*> widgets;
+
+ foreach(QGraphicsItem* item, scene->items()){
+ UBGraphicsW3CWidgetItem *widgetItem = dynamic_cast<UBGraphicsW3CWidgetItem*>(item);
+
+ if(widgetItem){
+ generateWidgetPropertyScript(widgetItem, UBDocumentContainer::pageFromSceneIndex(pageIndex));
+ widgets << widgetItem;
+ }
+ }
+
+ QString filename = mPublishingPath + UBFileSystemUtils::digitFileFormat("/page%1.json",pageIndex);
+
+ QFile jsonFile(filename);
+ if (jsonFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
+ {
+ jsonFile.write("{\n");
+ jsonFile.write(QString(" \"scene\": {\n").toUtf8());
+ jsonFile.write(QString(" \"x\": %1,\n").arg(scene->normalizedSceneRect().x()).toUtf8());
+ jsonFile.write(QString(" \"y\": %1,\n").arg(scene->normalizedSceneRect().y()).toUtf8());
+ jsonFile.write(QString(" \"width\": %1,\n").arg(scene->normalizedSceneRect().width()).toUtf8());
+ jsonFile.write(QString(" \"height\": %1\n").arg(scene->normalizedSceneRect().height()).toUtf8());
+ jsonFile.write(QString(" },\n").toUtf8());
+
+ jsonFile.write(QString(" \"widgets\": [\n").toUtf8());
+
+ bool first = true;
+
+ foreach(UBGraphicsW3CWidgetItem* widget, widgets)
+ {
+ if (!first)
+ jsonFile.write(QString(" ,\n").toUtf8());
+
+ jsonFile.write(QString(" {\n").toUtf8());
+ jsonFile.write(QString(" \"uuid\": \"%1\",\n").arg(UBStringUtils::toCanonicalUuid(widget->uuid())).toUtf8());
+ jsonFile.write(QString(" \"id\": \"%1\",\n").arg(widget->metadatas().id).toUtf8());
+
+ jsonFile.write(QString(" \"name\": \"%1\",\n").arg(widget->metadatas().name).toUtf8());
+ jsonFile.write(QString(" \"description\": \"%1\",\n").arg(widget->metadatas().description).toUtf8());
+ jsonFile.write(QString(" \"author\": \"%1\",\n").arg(widget->metadatas().author).toUtf8());
+ jsonFile.write(QString(" \"authorEmail\": \"%1\",\n").arg(widget->metadatas().authorEmail).toUtf8());
+ jsonFile.write(QString(" \"authorHref\": \"%1\",\n").arg(widget->metadatas().authorHref).toUtf8());
+ jsonFile.write(QString(" \"version\": \"%1\",\n").arg(widget->metadatas().authorHref).toUtf8());
+
+ jsonFile.write(QString(" \"x\": %1,\n").arg(widget->sceneBoundingRect().x()).toUtf8());
+ jsonFile.write(QString(" \"y\": %1,\n").arg(widget->sceneBoundingRect().y()).toUtf8());
+ jsonFile.write(QString(" \"width\": %1,\n").arg(widget->sceneBoundingRect().width()).toUtf8());
+ jsonFile.write(QString(" \"height\": %1,\n").arg(widget->sceneBoundingRect().height()).toUtf8());
+
+ jsonFile.write(QString(" \"nominalWidth\": %1,\n").arg(widget->boundingRect().width()).toUtf8());
+ jsonFile.write(QString(" \"nominalHeight\": %1,\n").arg(widget->boundingRect().height()).toUtf8());
+
+ QString url = UBPersistenceManager::widgetDirectory + "/" + widget->uuid().toString() + ".wgt";
+ jsonFile.write(QString(" \"src\": \"%1\",\n").arg(url).toUtf8());
+ QString startFile = widget->mainHtmlFileName();
+ jsonFile.write(QString(" \"startFile\": \"%1\",\n").arg(startFile).toUtf8());
+
+ QMap<QString, QString> preferences = widget->UBGraphicsWidgetItem::preferences();
+
+ jsonFile.write(QString(" \"preferences\": {\n").toUtf8());
+
+ foreach(QString key, preferences.keys())
+ {
+ QString sep = ",";
+ if (key == preferences.keys().last())
+ sep = "";
+
+ jsonFile.write(QString(" \"%1\": \"%2\"%3\n")
+ .arg(key)
+ .arg(preferences.value(key))
+ .arg(sep)
+ .toUtf8());
+ }
+ jsonFile.write(QString(" },\n").toUtf8());
+
+ jsonFile.write(QString(" \"datastore\": {\n").toUtf8());
+
+ QMap<QString, QString> datastoreEntries = widget->datastoreEntries();
+
+ foreach(QString entry, datastoreEntries.keys())
+ {
+ QString sep = ",";
+ if (entry == datastoreEntries.keys().last())
+ sep = "";
+
+ jsonFile.write(QString(" \"%1\": \"%2\"%3\n")
+ .arg(entry)
+ .arg(datastoreEntries.value(entry))
+ .arg(sep)
+ .toUtf8());
+ }
+ jsonFile.write(QString(" }\n").toUtf8());
+
+ jsonFile.write(QString(" }\n").toUtf8());
+
+ first = false;
+ }
+
+ jsonFile.write(" ]\n");
+ jsonFile.write("}\n");
+ }
+ else
+ {
+ qWarning() << "Cannot open file" << filename << "for saving page state";
+ }
+
+ delete scene;
+ }
+
+ updateGoogleMapApiKey();
+}
+
+
+void UBDocumentPublisher::generateWidgetPropertyScript(UBGraphicsW3CWidgetItem *widgetItem, int pageNumber)
+{
+
+ QMap<QString, QString> preferences = widgetItem->UBGraphicsWidgetItem::preferences();
+ QMap<QString, QString> datastoreEntries = widgetItem->datastoreEntries();
+
+ QString startFileName = widgetItem->mainHtmlFileName();
+
+ if (!startFileName.startsWith("http://"))
+ {
+ QString startFilePath = mPublishingPath + "/" + UBPersistenceManager::widgetDirectory + "/" + widgetItem->uuid().toString() + ".wgt/" + startFileName;
+
+ QFile startFile(startFilePath);
+
+ if (startFile.exists())
+ {
+ if (startFile.open(QIODevice::ReadWrite))
+ {
+ QTextStream stream(&startFile);
+ QStringList lines;
+
+ bool addedJs = false;
+
+ QString line;
+ do
+ {
+ line = stream.readLine();
+ if (!line.isNull())
+ {
+ lines << line;
+
+ if (!addedJs && line.contains("<head") && line.contains(">") ) // TODO UB 4.6, this is naive ... the HEAD tag may be on several lines
+ {
+ lines << "";
+ lines << " <script type=\"text/javascript\">";
+
+ lines << " var widget = {};";
+ lines << " widget.id = '" + widgetItem->metadatas().id + "';";
+ lines << " widget.name = '" + widgetItem->metadatas().name + "';";
+ lines << " widget.description = '" + widgetItem->metadatas().description + "';";
+ lines << " widget.author = '" + widgetItem->metadatas().author + "';";
+ lines << " widget.authorEmail = '" + widgetItem->metadatas().authorEmail + "';";
+ lines << " widget.authorHref = '" + widgetItem->metadatas().authorHref + "';";
+ lines << " widget.version = '" + widgetItem->metadatas().version + "';";
+
+ lines << " widget.uuid = '" + UBStringUtils::toCanonicalUuid(widgetItem->uuid()) + "';";
+
+ lines << " widget.width = " + QString("%1").arg(widgetItem->nominalSize().width()) + ";";
+ lines << " widget.height = " + QString("%1").arg(widgetItem->nominalSize().height()) + ";";
+ lines << " widget.openUrl = function(url) { window.open(url); }";
+ lines << " widget.preferences = new Array()";
+
+ foreach(QString pref, preferences.keys())
+ {
+ lines << " widget.preferences['" + pref + "'] = '" + preferences.value(pref) + "';";
+ }
+
+ lines << " widget.preferences.key = function(index) {";
+ lines << " var currentIndex = 0;";
+ lines << " for(key in widget.preferences){";
+ lines << " if (currentIndex == index){ return key;}";
+ lines << " currentIndex++;";
+ lines << " }";
+ lines << " return '';";
+ lines << " }";
+
+ lines << " widget.preferences.getItem = function(key) {";
+ lines << " return widget.preferences[key];";
+ lines << " }";
+
+ lines << " widget.preferences.setItem = function(key, value) {}";
+ lines << " widget.preferences.removeItem = function(key) {}";
+ lines << " widget.preferences.clear = function() {}";
+
+ lines << " var uniboard = {};";
+ lines << " uniboard.pageCount = " + QString("%1").arg(mPublishingSize) + ";";
+ lines << " uniboard.currentPageNumber = " + QString("%1").arg(pageNumber) + ";";
+ lines << " uniboard.uuid = '" + UBStringUtils::toCanonicalUuid(widgetItem->uuid()) + "'";
+ lines << " uniboard.lang = navigator.language;";
+ lines << " uniboard.locale = function() {return navigator.language}";
+ lines << " uniboard.messages = {}";
+ lines << " uniboard.messages.subscribeToTopic = function(topicName){}";
+ lines << " uniboard.messages.unsubscribeFromTopic = function(topicName){}";
+ lines << " uniboard.messages.sendMessage = function(topicName, message){}";
+
+ lines << " uniboard.datastore = {};";
+ lines << " uniboard.datastore.document = new Array();";
+ foreach(QString entry, datastoreEntries.keys())
+ {
+ lines << " uniboard.datastore.document['" + entry + "'] = '" + datastoreEntries.value(entry) + "';";
+ }
+
+ lines << " uniboard.datastore.document.key = function(index) {";
+ lines << " var currentIndex = 0;";
+ lines << " for(key in uniboard.datastore.document){";
+ lines << " if (currentIndex == index){ return key;}";
+ lines << " currentIndex++;";
+ lines << " }";
+ lines << " return '';";
+ lines << " }";
+
+ lines << " uniboard.datastore.document.getItem = function(key) {";
+ lines << " return uniboard.datastore.document[key];";
+ lines << " }";
+
+ lines << " uniboard.datastore.document.setItem = function(key, value) {}";
+ lines << " uniboard.datastore.document.removeItem = function(key) {}";
+ lines << " uniboard.datastore.document.clear = function() {}";
+
+ lines << " uniboard.setTool = function(tool){}";
+ lines << " uniboard.setPenColor = function(color){}";
+ lines << " uniboard.setMarkerColor = function(color){}";
+
+ lines << " uniboard.pageThumbnail = function(pageNumber){";
+ lines << " var nb;";
+ lines << " if (pageNumber < 10) return 'page00' + pageNumber + '.thumbnail.jpg';";
+ lines << " if (pageNumber < 100) return 'page0' + pageNumber + '.thumbnail.jpg';";
+ lines << " return 'page' + pageNumber + '.thumbnail.jpg;'";
+ lines << " }";
+
+ lines << " uniboard.zoom = function(factor, x, y){}";
+ lines << " uniboard.move = function(x, y){}";
+ lines << " uniboard.move = function(x, y){}";
+ lines << " uniboard.moveTo = function(x, y){}";
+ lines << " uniboard.drawLineTo = function(x, y, width){}";
+ lines << " uniboard.eraseLineTo = function(x, y, width){}";
+ lines << " uniboard.clear = function(){}";
+ lines << " uniboard.setBackground = function(dark, crossed){}";
+ lines << " uniboard.addObject = function(url, width, height, x, y, background){}";
+ lines << " uniboard.resize = function(width, height){window.resizeTo(width, height);}";
+
+ lines << " uniboard.showMessage = function(message){alert(message);}";
+ lines << " uniboard.centerOn = function(x, y){}";
+ lines << " uniboard.addText = function(text, x, y){}";
+
+ lines << " uniboard.setPreference = function(key, value){}";
+ lines << " uniboard.preference = function(key, defValue){";
+ lines << " var pref = widget.preferences[key];";
+ lines << " if (pref == undefined) ";
+ lines << " return defValue;";
+ lines << " else ";
+ lines << " return pref;";
+ lines << " }";
+ lines << " uniboard.preferenceKeys = function(){";
+ lines << " var keys = new Array();";
+ lines << " for(key in widget.preferences){";
+ lines << " keys.push(key);";
+ lines << " }";
+ lines << " return keys;";
+ lines << " }";
+
+ lines << " uniboard.datastore.document.key = function(index) {";
+ lines << " var currentIndex = 0;";
+ lines << " for(key in uniboard.datastore.document){";
+ lines << " if (currentIndex == index){ return key;}";
+ lines << " currentIndex++;";
+ lines << " }";
+ lines << " return '';";
+ lines << " }";
+
+ lines << " uniboard.datastore.document.getItem = function(key) {";
+ lines << " return uniboard.datastore.document[key];";
+ lines << " }";
+
+ lines << " uniboard.datastore.document.setItem = function(key, value) {}";
+ lines << " uniboard.datastore.document.removeItem = function(key) {}";
+ lines << " uniboard.datastore.document.clear = function() {}";
+
+ lines << " </script>";
+ lines << "";
+
+ addedJs = true;
+ }
+ }
+ }
+ while (!line.isNull());
+
+ startFile.resize(0);
+ startFile.write(lines.join("\n").toUtf8()); // TODO UB 4.x detect real html encoding
+
+ startFile.close();
+ }
+ }
+ }
+ else{
+ qWarning() << "Remote Widget start file, cannot inject widget preferences and datastore entries";
+ }
+}
+
+void UBDocumentPublisher::init()
+{
+ mCrlf=0x0d;
+ mCrlf+=0x0a;
+ mDocInfos.title = "";
+ mDocInfos.description = "";
+
+ mpCookieJar = new QNetworkCookieJar();
+ mpNetworkMgr = new QNetworkAccessManager(this);
+
+ connect(mpNetworkMgr, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*)));
+}
+
+void UBDocumentPublisher::onFinished(QNetworkReply *reply)
+{
+ QVariant cookieHeader = reply->rawHeader("Set-Cookie");
+ // First we concatenate all the Set-Cookie values (the packet can contains many of them)
+ QStringList qslCookie = cookieHeader.toString().split("\n");
+ QString qsCookieValue = qslCookie.at(0);
+ for (int i = 1; i < qslCookie.size(); i++) {
+ qsCookieValue += "; " +qslCookie.at(i);
+ }
+
+ // Now we isolate every cookie value
+ QStringList qslCookieVals = qsCookieValue.split("; ");
+
+ bool bTransferOk = false;
+
+ for(int j = 0; j < qslCookieVals.size(); j++)
+ {
+ qDebug() << j;
+ if(qslCookieVals.at(j).startsWith("assetStatus"))
+ {
+ QStringList qslAsset = qslCookieVals.at(j).split("=");
+ if(qslAsset.at(1) == "UPLOADED")
+ {
+ bTransferOk = true;
+ break;
+ }
+ }
+ }
+
+ if(bTransferOk)
+ {
+ UBApplication::showMessage(tr("Document uploaded correctly on the web."));
+ }
+ else
+ {
+ UBApplication::showMessage(tr("Failed to upload document on the web."));
+ }
+
+ reply->deleteLater();
+}
+
+void UBDocumentPublisher::sendUbw(QString username, QString password)
+{
+ if (QFile::exists(mTmpZipFile))
+ {
+ QFile f(mTmpZipFile);
+ if (f.open(QIODevice::ReadOnly))
+ {
+ QFileInfo fi(f);
+ QByteArray ba = f.readAll();
+ QString boundary,data, multipartHeader;
+ QByteArray datatoSend;
+
+ boundary = "---WebKitFormBoundaryDKBTgA53MiyWrzLY";
+ multipartHeader = "multipart/form-data; boundary="+boundary;
+
+ data="--"+boundary+mCrlf;
+ data+="Content-Disposition: form-data; name=\"title\"" + mCrlf + mCrlf + mDocInfos.title + mCrlf;
+ data+="--"+boundary+mCrlf;
+ data+="Content-Disposition: form-data; name=\"description\"" + mCrlf + mCrlf + mDocInfos.description.remove("\n") + mCrlf;
+ data+="--"+boundary+mCrlf;
+ data+="Content-Disposition: form-data; name=\"file\"; filename=\""+ fi.fileName() +"\""+mCrlf;
+ data+="Content-Type: application/octet-stream"+mCrlf+mCrlf;
+ datatoSend=data.toAscii(); // convert data string to byte array for request
+ datatoSend += ba;
+ datatoSend += mCrlf;
+ datatoSend += QString("--%0--%1").arg(boundary).arg(mCrlf);
+
+ QNetworkRequest request(QUrl(QString(DOCPUBLICATION_URL).toAscii().constData()));
+
+ request.setHeader(QNetworkRequest::ContentTypeHeader, multipartHeader);
+ request.setHeader(QNetworkRequest::ContentLengthHeader,datatoSend.size());
+ QString b64Auth = getBase64Of(QString("%0:%1").arg(username).arg(password));
+ request.setRawHeader("Authorization", QString("Basic %0").arg(b64Auth).toAscii().constData());
+ request.setRawHeader("Host", "planete.sankore.org");
+ request.setRawHeader("Accept", "*/*");
+ request.setRawHeader("Accept-Language", "en-US,*");
+
+ mpCookieJar->setCookiesFromUrl(mCookies, QUrl(DOCPUBLICATION_URL));
+ mpNetworkMgr->setCookieJar(mpCookieJar);
+
+ // Send the file
+ mpNetworkMgr->post(request,datatoSend);
+ }
+ }
+}
+
+QString UBDocumentPublisher::getBase64Of(QString stringToEncode)
+{
+ return stringToEncode.toAscii().toBase64();
+}
+
+// ---------------------------------------------------------
+UBProxyLoginDlg::UBProxyLoginDlg(QWidget *parent, const char *name):QDialog(parent)
+ , mpLayout(NULL)
+ , mpUserLayout(NULL)
+ , mpPasswordLayout(NULL)
+ , mpButtons(NULL)
+ , mpUserLabel(NULL)
+ , mpPasswordLabel(NULL)
+ , mpUsername(NULL)
+ , mpPassword(NULL)
+{
+ setObjectName(name);
+ setFixedSize(400, 150);
+ setWindowTitle(tr("Proxy Login"));
+
+ mpLayout = new QVBoxLayout();
+ setLayout(mpLayout);
+ mpUserLayout = new QHBoxLayout();
+ mpLayout->addLayout(mpUserLayout);
+ mpPasswordLayout = new QHBoxLayout();
+ mpLayout->addLayout(mpPasswordLayout);
+
+ mpUserLabel = new QLabel(tr("Username:"), this);
+ mpUsername = new QLineEdit(this);
+ mpUserLayout->addWidget(mpUserLabel, 0);
+ mpUserLayout->addWidget(mpUsername, 1);
+
+ mpPasswordLabel = new QLabel(tr("Password:"), this);
+ mpPassword = new QLineEdit(this);
+ mpPasswordLayout->addWidget(mpPasswordLabel, 0);
+ mpPasswordLayout->addWidget(mpPassword, 1);
+
+ mpButtons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
+ mpLayout->addWidget(mpButtons);
+
+ connect(mpButtons, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(mpButtons, SIGNAL(rejected()), this, SLOT(reject()));
+
+}
+
+UBProxyLoginDlg::~UBProxyLoginDlg()
+{
+ if(NULL != mpLayout)
+ {
+ delete mpLayout;
+ mpLayout = NULL;
+ }
+ if(NULL != mpButtons)
+ {
+ delete mpButtons;
+ mpButtons = NULL;
+ }
+ if(NULL != mpUserLabel)
+ {
+ delete mpUserLabel;
+ mpUserLabel = NULL;
+ }
+ if(NULL != mpPasswordLabel)
+ {
+ delete mpPasswordLabel;
+ mpPasswordLabel = NULL;
+ }
+ if(NULL != mpUsername)
+ {
+ delete mpUsername;
+ mpUsername = NULL;
+ }
+ if(NULL != mpPassword)
+ {
+ delete mpPassword;
+ mpPassword = NULL;
+ }
+}
+
+// ---------------------------------------------------------
+UBPublicationDlg::UBPublicationDlg(QWidget *parent, const char *name):QDialog(parent)
+ , mpLayout(NULL)
+ , mpTitleLayout(NULL)
+ , mpTitleLabel(NULL)
+ , mpTitle(NULL)
+ , mpDescLabel(NULL)
+ , mpDescription(NULL)
+ , mpButtons(NULL)
+{
+ setObjectName(name);
+ setWindowTitle(tr("Publish document on the web"));
+
+ resize(500, 300);
+
+ mpLayout = new QVBoxLayout();
+ setLayout(mpLayout);
+
+ mpTitleLabel = new QLabel(tr("Title:"), this);
+ mpTitle = new QLineEdit(this);
+ mpTitleLayout = new QHBoxLayout();
+ mpTitleLayout->addWidget(mpTitleLabel, 0);
+ mpTitleLayout->addWidget(mpTitle, 1);
+ mpLayout->addLayout(mpTitleLayout, 0);
+
+ mpDescLabel = new QLabel(tr("Description:"), this);
+ mpLayout->addWidget(mpDescLabel, 0);
+
+ mpDescription = new QTextEdit(this);
+ mpLayout->addWidget(mpDescription, 1);
+
+ mpButtons = new QDialogButtonBox(QDialogButtonBox::Cancel | QDialogButtonBox::Ok, Qt::Horizontal, this);
+ mpButtons->button(QDialogButtonBox::Ok)->setText(tr("Publish"));
+ mpLayout->addWidget(mpButtons);
+
+ mpButtons->button(QDialogButtonBox::Ok)->setEnabled(false);
+
+ connect(mpButtons, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(mpButtons, SIGNAL(rejected()), this, SLOT(reject()));
+ connect(mpTitle, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged()));
+ connect(mpDescription, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
+}
+
+UBPublicationDlg::~UBPublicationDlg()
+{
+ if(NULL != mpTitleLabel)
+ {
+ delete mpTitleLabel;
+ mpTitleLabel = NULL;
+ }
+ if(NULL != mpTitle)
+ {
+ delete mpTitle;
+ mpTitle = NULL;
+ }
+ if(NULL != mpDescLabel)
+ {
+ delete mpDescLabel;
+ mpDescLabel = NULL;
+ }
+ if(NULL != mpDescription)
+ {
+ delete mpDescription;
+ mpDescription = NULL;
+ }
+ if(NULL != mpButtons)
+ {
+ delete mpButtons;
+ mpButtons = NULL;
+ }
+ if(NULL != mpTitleLayout)
+ {
+ delete mpTitleLayout;
+ mpTitleLayout = NULL;
+ }
+ if(NULL != mpLayout)
+ {
+ delete mpLayout;
+ mpLayout = NULL;
+ }
+}
+
+void UBPublicationDlg::onTextChanged()
+{
+ bool bPublishButtonState = false;
+ if(mpTitle->text() != "" && mpDescription->document()->toPlainText() != "")
+ {
+ bPublishButtonState = true;
+ }
+ else
+ {
+ bPublishButtonState = false;
+ }
+
+ mpButtons->button(QDialogButtonBox::Ok)->setEnabled(bPublishButtonState);
+}
diff --git a/Sankore-3.1/src/adaptors/publishing/UBDocumentPublisher.h b/Sankore-3.1/src/adaptors/publishing/UBDocumentPublisher.h
index e6d7f85..89bf4a3 100644
--- a/Sankore-3.1/src/adaptors/publishing/UBDocumentPublisher.h
+++ b/Sankore-3.1/src/adaptors/publishing/UBDocumentPublisher.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,124 +18,124 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBDOCUMENTPUBLISHER_H
-#define UBDOCUMENTPUBLISHER_H
-
-#include <QtGui>
-#include <QtNetwork>
-
-#include "ui_webPublishing.h"
-
-#define DOCPUBLICATION_URL "http://planete.sankore.org/xwiki/bin/view/CreateResources/UniboardUpload?xpage=plain&outputSyntax=plain"
-
-typedef struct
-{
- QString title;
- QString description;
-} sDocumentInfos;
-
-class UBDocumentProxy;
-class UBServerXMLHttpRequest;
-class UBGraphicsW3CWidgetItem;
-class QWebView;
-
-class UBProxyLoginDlg : public QDialog
-{
- Q_OBJECT
-public:
- UBProxyLoginDlg(QWidget* parent=0, const char* name="ProxyLoginDlg");
- ~UBProxyLoginDlg();
-
- QString username(){return mpUsername->text();}
- QString password(){return mpPassword->text();}
-
-private:
- QVBoxLayout* mpLayout;
- QHBoxLayout* mpUserLayout;
- QHBoxLayout* mpPasswordLayout;
- QDialogButtonBox* mpButtons;
- QLabel* mpUserLabel;
- QLabel* mpPasswordLabel;
- QLineEdit* mpUsername;
- QLineEdit* mpPassword;
-};
-
-class UBPublicationDlg : public QDialog
-{
- Q_OBJECT
-public:
- UBPublicationDlg(QWidget* parent=0, const char* name="UBPublicationDlg");
- ~UBPublicationDlg();
-
- QString title(){return mpTitle->text();}
- QString description(){return mpDescription->document()->toPlainText();}
-
-private slots:
- void onTextChanged();
-
-private:
- QVBoxLayout* mpLayout;
- QHBoxLayout* mpTitleLayout;
- QLabel* mpTitleLabel;
- QLineEdit* mpTitle;
- QLabel* mpDescLabel;
- QTextEdit* mpDescription;
- QDialogButtonBox* mpButtons;
-};
-
-
-class UBDocumentPublisher : public QObject
-{
- Q_OBJECT;
-
-public:
- explicit UBDocumentPublisher(UBDocumentProxy* sourceDocument, QObject *parent = 0);
- virtual ~UBDocumentPublisher();
-
- void publish();
-
-signals:
-
- void loginDone();
-
-protected:
-
- virtual void updateGoogleMapApiKey();
- virtual void rasterizeScenes();
- virtual void upgradeDocumentForPublishing();
- virtual void generateWidgetPropertyScript(UBGraphicsW3CWidgetItem *widgetItem, int pageNumber);
-
-private slots:
-
- void onFinished(QNetworkReply* reply);
-
-private:
-
- UBDocumentProxy *mSourceDocument;
-
- //UBDocumentProxy *mPublishingDocument;
- QString mPublishingPath;
- int mPublishingSize;
-
-
- void init();
- void sendUbw(QString username, QString password);
- QString getBase64Of(QString stringToEncode);
-
- QHBoxLayout* mpLayout;
- QNetworkAccessManager* mpNetworkMgr;
- QNetworkCookieJar* mpCookieJar;
- QString mUsername;
- QString mPassword;
- QString mCrlf;
- bool bLoginCookieSet;
-
- void buildUbwFile();
- QString mTmpZipFile;
- QList<QNetworkCookie> mCookies;
- sDocumentInfos mDocInfos;
-
-};
-#endif // UBDOCUMENTPUBLISHER_H
+
+
+#ifndef UBDOCUMENTPUBLISHER_H
+#define UBDOCUMENTPUBLISHER_H
+
+#include <QtGui>
+#include <QtNetwork>
+
+#include "ui_webPublishing.h"
+
+#define DOCPUBLICATION_URL "http://planete.sankore.org/xwiki/bin/view/CreateResources/UniboardUpload?xpage=plain&outputSyntax=plain"
+
+typedef struct
+{
+ QString title;
+ QString description;
+} sDocumentInfos;
+
+class UBDocumentProxy;
+class UBServerXMLHttpRequest;
+class UBGraphicsW3CWidgetItem;
+class QWebView;
+
+class UBProxyLoginDlg : public QDialog
+{
+ Q_OBJECT
+public:
+ UBProxyLoginDlg(QWidget* parent=0, const char* name="ProxyLoginDlg");
+ ~UBProxyLoginDlg();
+
+ QString username(){return mpUsername->text();}
+ QString password(){return mpPassword->text();}
+
+private:
+ QVBoxLayout* mpLayout;
+ QHBoxLayout* mpUserLayout;
+ QHBoxLayout* mpPasswordLayout;
+ QDialogButtonBox* mpButtons;
+ QLabel* mpUserLabel;
+ QLabel* mpPasswordLabel;
+ QLineEdit* mpUsername;
+ QLineEdit* mpPassword;
+};
+
+class UBPublicationDlg : public QDialog
+{
+ Q_OBJECT
+public:
+ UBPublicationDlg(QWidget* parent=0, const char* name="UBPublicationDlg");
+ ~UBPublicationDlg();
+
+ QString title(){return mpTitle->text();}
+ QString description(){return mpDescription->document()->toPlainText();}
+
+private slots:
+ void onTextChanged();
+
+private:
+ QVBoxLayout* mpLayout;
+ QHBoxLayout* mpTitleLayout;
+ QLabel* mpTitleLabel;
+ QLineEdit* mpTitle;
+ QLabel* mpDescLabel;
+ QTextEdit* mpDescription;
+ QDialogButtonBox* mpButtons;
+};
+
+
+class UBDocumentPublisher : public QObject
+{
+ Q_OBJECT;
+
+public:
+ explicit UBDocumentPublisher(UBDocumentProxy* sourceDocument, QObject *parent = 0);
+ virtual ~UBDocumentPublisher();
+
+ void publish();
+
+signals:
+
+ void loginDone();
+
+protected:
+
+ virtual void updateGoogleMapApiKey();
+ virtual void rasterizeScenes();
+ virtual void upgradeDocumentForPublishing();
+ virtual void generateWidgetPropertyScript(UBGraphicsW3CWidgetItem *widgetItem, int pageNumber);
+
+private slots:
+
+ void onFinished(QNetworkReply* reply);
+
+private:
+
+ UBDocumentProxy *mSourceDocument;
+
+ //UBDocumentProxy *mPublishingDocument;
+ QString mPublishingPath;
+ int mPublishingSize;
+
+
+ void init();
+ void sendUbw(QString username, QString password);
+ QString getBase64Of(QString stringToEncode);
+
+ QHBoxLayout* mpLayout;
+ QNetworkAccessManager* mpNetworkMgr;
+ QNetworkCookieJar* mpCookieJar;
+ QString mUsername;
+ QString mPassword;
+ QString mCrlf;
+ bool bLoginCookieSet;
+
+ void buildUbwFile();
+ QString mTmpZipFile;
+ QList<QNetworkCookie> mCookies;
+ sDocumentInfos mDocInfos;
+
+};
+#endif // UBDOCUMENTPUBLISHER_H
diff --git a/Sankore-3.1/src/adaptors/publishing/UBSvgSubsetRasterizer.cpp b/Sankore-3.1/src/adaptors/publishing/UBSvgSubsetRasterizer.cpp
index f2080c9..458eb1c 100644
--- a/Sankore-3.1/src/adaptors/publishing/UBSvgSubsetRasterizer.cpp
+++ b/Sankore-3.1/src/adaptors/publishing/UBSvgSubsetRasterizer.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBSvgSubsetRasterizer.h"
#include "domain/UBGraphicsScene.h"
diff --git a/Sankore-3.1/src/adaptors/publishing/UBSvgSubsetRasterizer.h b/Sankore-3.1/src/adaptors/publishing/UBSvgSubsetRasterizer.h
index e7ec6de..fcc40cf 100644
--- a/Sankore-3.1/src/adaptors/publishing/UBSvgSubsetRasterizer.h
+++ b/Sankore-3.1/src/adaptors/publishing/UBSvgSubsetRasterizer.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBSVGSUBSETRASTERIZER_H_
#define UBSVGSUBSETRASTERIZER_H_
diff --git a/Sankore-3.1/src/api/UBLibraryAPI.cpp b/Sankore-3.1/src/api/UBLibraryAPI.cpp
index c065fba..94f4908 100644
--- a/Sankore-3.1/src/api/UBLibraryAPI.cpp
+++ b/Sankore-3.1/src/api/UBLibraryAPI.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBLibraryAPI.h"
#include "core/UBApplication.h"
diff --git a/Sankore-3.1/src/api/UBLibraryAPI.h b/Sankore-3.1/src/api/UBLibraryAPI.h
index d0b2ed0..0a55c94 100644
--- a/Sankore-3.1/src/api/UBLibraryAPI.h
+++ b/Sankore-3.1/src/api/UBLibraryAPI.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBLIBRARYAPI_H_
#define UBLIBRARYAPI_H_
diff --git a/Sankore-3.1/src/api/UBW3CWidgetAPI.cpp b/Sankore-3.1/src/api/UBW3CWidgetAPI.cpp
index 60a1aa4..3295ba0 100644
--- a/Sankore-3.1/src/api/UBW3CWidgetAPI.cpp
+++ b/Sankore-3.1/src/api/UBW3CWidgetAPI.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBW3CWidgetAPI.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/api/UBW3CWidgetAPI.h b/Sankore-3.1/src/api/UBW3CWidgetAPI.h
index da490fa..cd41cbd 100644
--- a/Sankore-3.1/src/api/UBW3CWidgetAPI.h
+++ b/Sankore-3.1/src/api/UBW3CWidgetAPI.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBW3CWIDGETAPI_H_
#define UBW3CWIDGETAPI_H_
diff --git a/Sankore-3.1/src/api/UBWidgetMessageAPI.cpp b/Sankore-3.1/src/api/UBWidgetMessageAPI.cpp
index 9147d3b..674aec7 100644
--- a/Sankore-3.1/src/api/UBWidgetMessageAPI.cpp
+++ b/Sankore-3.1/src/api/UBWidgetMessageAPI.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBWidgetMessageAPI.h"
#include "core/UBApplication.h"
diff --git a/Sankore-3.1/src/api/UBWidgetMessageAPI.h b/Sankore-3.1/src/api/UBWidgetMessageAPI.h
index fad6ee1..366dbe9 100644
--- a/Sankore-3.1/src/api/UBWidgetMessageAPI.h
+++ b/Sankore-3.1/src/api/UBWidgetMessageAPI.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWIDGETMESSAGEAPI_H_
#define UBWIDGETMESSAGEAPI_H_
diff --git a/Sankore-3.1/src/api/UBWidgetUniboardAPI.cpp b/Sankore-3.1/src/api/UBWidgetUniboardAPI.cpp
index 7ba93be..75307c6 100644
--- a/Sankore-3.1/src/api/UBWidgetUniboardAPI.cpp
+++ b/Sankore-3.1/src/api/UBWidgetUniboardAPI.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBWidgetUniboardAPI.h"
#include <QWebView>
@@ -217,7 +218,7 @@ void UBWidgetUniboardAPI::addObject(QString pUrl, int width, int height, int x,
void UBWidgetUniboardAPI::setBackground(bool pIsDark, bool pIsCrossed)
{
if (mScene)
- mScene->setBackground(pIsDark, pIsCrossed);
+ mScene->setBackground(pIsDark, pIsCrossed);
}
@@ -239,8 +240,8 @@ void UBWidgetUniboardAPI::drawLineTo(const qreal x, const qreal y, const qreal p
return;
if (mScene)
- mScene->drawLineTo(QPointF(x, y), pWidth,
- UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Line);
+ mScene->drawLineTo(QPointF(x, y), pWidth,
+ UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Line);
}
diff --git a/Sankore-3.1/src/api/UBWidgetUniboardAPI.h b/Sankore-3.1/src/api/UBWidgetUniboardAPI.h
index 6b3825b..76758fa 100644
--- a/Sankore-3.1/src/api/UBWidgetUniboardAPI.h
+++ b/Sankore-3.1/src/api/UBWidgetUniboardAPI.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWIDGETAPI_H
#define UBWIDGETAPI_H
diff --git a/Sankore-3.1/src/board/UBBoardController.cpp b/Sankore-3.1/src/board/UBBoardController.cpp
index d84864b..8447176 100644
--- a/Sankore-3.1/src/board/UBBoardController.cpp
+++ b/Sankore-3.1/src/board/UBBoardController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,2504 +18,2598 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBBoardController.h"
-
-#include <QtGui>
-#include <QtWebKit>
-
-#include "frameworks/UBFileSystemUtils.h"
-#include "frameworks/UBPlatformUtils.h"
-
-#include "core/UBApplication.h"
-#include "core/UBSettings.h"
-#include "core/UBSetting.h"
-#include "core/UBPersistenceManager.h"
-#include "core/UBApplicationController.h"
-#include "core/UBDocumentManager.h"
-#include "core/UBMimeData.h"
-#include "core/UBDownloadManager.h"
-
-#include "network/UBHttpGet.h"
-
-#include "gui/UBMessageWindow.h"
-#include "gui/UBResources.h"
-#include "gui/UBToolbarButtonGroup.h"
-#include "gui/UBMainWindow.h"
-#include "gui/UBToolWidget.h"
-#include "gui/UBKeyboardPalette.h"
-#include "gui/UBMagnifer.h"
-#include "gui/UBDockPaletteWidget.h"
-#include "gui/UBDockTeacherGuideWidget.h"
-#include "gui/UBTeacherGuideWidget.h"
-
-#include "domain/UBGraphicsPixmapItem.h"
-#include "domain/UBGraphicsItemUndoCommand.h"
-#include "domain/UBGraphicsProxyWidget.h"
-#include "domain/UBGraphicsSvgItem.h"
-#include "domain/UBGraphicsWidgetItem.h"
-#include "domain/UBGraphicsMediaItem.h"
-#include "domain/UBGraphicsPDFItem.h"
-#include "domain/UBGraphicsTextItem.h"
-#include "domain/UBPageSizeUndoCommand.h"
-#include "domain/UBGraphicsGroupContainerItem.h"
-#include "domain/UBItem.h"
-#include "board/UBFeaturesController.h"
-#include "domain/UBGraphicsStrokesGroup.h"
-
-#include "gui/UBFeaturesWidget.h"
-
-#include "tools/UBToolsManager.h"
-
-#include "document/UBDocumentProxy.h"
-#include "document/UBDocumentController.h"
-
-#include "board/UBDrawingController.h"
-#include "board/UBBoardView.h"
-
-#include "podcast/UBPodcastController.h"
-
-#include "adaptors/UBMetadataDcSubsetAdaptor.h"
-#include "adaptors/UBSvgSubsetAdaptor.h"
-
-#include "UBBoardPaletteManager.h"
-
-#include "core/UBSettings.h"
-
-#include "core/memcheck.h"
-
-UBBoardController::UBBoardController(UBMainWindow* mainWindow)
- : UBDocumentContainer(mainWindow->centralWidget())
- , mMainWindow(mainWindow)
- , mActiveScene(0)
- , mActiveSceneIndex(-1)
- , mPaletteManager(0)
- , mSoftwareUpdateDialog(0)
- , mMessageWindow(0)
- , mControlView(0)
- , mDisplayView(0)
- , mControlContainer(0)
- , mControlLayout(0)
- , mZoomFactor(1.0)
- , mIsClosing(false)
- , mSystemScaleFactor(1.0)
- , mCleanupDone(false)
- , mCacheWidgetIsEnabled(false)
- , mDeletingSceneIndex(-1)
- , mMovingSceneIndex(-1)
- , mActionGroupText(tr("Group"))
- , mActionUngroupText(tr("Ungroup"))
-{
- mZoomFactor = UBSettings::settings()->boardZoomFactor->get().toDouble();
-
- int penColorIndex = UBSettings::settings()->penColorIndex();
- int markerColorIndex = UBSettings::settings()->markerColorIndex();
-
- mPenColorOnDarkBackground = UBSettings::settings()->penColors(true).at(penColorIndex);
- mPenColorOnLightBackground = UBSettings::settings()->penColors(false).at(penColorIndex);
- mMarkerColorOnDarkBackground = UBSettings::settings()->markerColors(true).at(markerColorIndex);
- mMarkerColorOnLightBackground = UBSettings::settings()->markerColors(false).at(markerColorIndex);
-
- QDesktopWidget* desktop = UBApplication::desktop();
- int dpiCommon = (desktop->physicalDpiX() + desktop->physicalDpiY()) / 2;
- int sPixelsPerMillimeter = qRound(dpiCommon / UBGeometryUtils::inchSize);
- UBSettings::settings()->crossSize = 10*sPixelsPerMillimeter;
-}
-
-
-void UBBoardController::init()
-{
- setupViews();
- setupToolbar();
-
- connect(UBApplication::undoStack, SIGNAL(canUndoChanged(bool))
- , this, SLOT(undoRedoStateChange(bool)));
-
- connect(UBApplication::undoStack, SIGNAL(canRedoChanged (bool))
- , this, SLOT(undoRedoStateChange(bool)));
-
- connect(UBDrawingController::drawingController(), SIGNAL(stylusToolChanged(int))
- , this, SLOT(setToolCursor(int)));
-
- connect(UBDrawingController::drawingController(), SIGNAL(stylusToolChanged(int))
- , this, SLOT(stylusToolChanged(int)));
-
- connect(UBApplication::app(), SIGNAL(lastWindowClosed())
- , this, SLOT(lastWindowClosed()));
-
- connect(UBDownloadManager::downloadManager(), SIGNAL(downloadModalFinished()), this, SLOT(onDownloadModalFinished()));
- connect(UBDownloadManager::downloadManager(), SIGNAL(addDownloadedFileToBoard(bool,QUrl,QUrl,QString,QByteArray,QPointF,QSize,bool)), this, SLOT(downloadFinished(bool,QUrl,QUrl,QString,QByteArray,QPointF,QSize,bool)));
-
- UBDocumentProxy* doc = UBPersistenceManager::persistenceManager()->createDocument();
-
- setActiveDocumentScene(doc);
-
- connect(UBApplication::mainWindow->actionGroupItems, SIGNAL(triggered()), this, SLOT(groupButtonClicked()));
-
- undoRedoStateChange(true);
-}
-
-
-UBBoardController::~UBBoardController()
-{
- delete mDisplayView;
-}
-
-
-int UBBoardController::currentPage()
-{
- if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
- return mActiveSceneIndex;
- return mActiveSceneIndex + 1;
-}
-
-void UBBoardController::setupViews()
-{
- mControlContainer = new QWidget(mMainWindow->centralWidget());
-
- mControlLayout = new QHBoxLayout(mControlContainer);
- mControlLayout->setContentsMargins(0, 0, 0, 0);
-
- mControlView = new UBBoardView(this, mControlContainer, true, false);
- mControlView->setInteractive(true);
- mControlView->setMouseTracking(true);
-
- mControlView->grabGesture(Qt::SwipeGesture);
-
- mControlView->setTransformationAnchor(QGraphicsView::NoAnchor);
-
- mControlLayout->addWidget(mControlView);
- mControlContainer->setObjectName("ubBoardControlContainer");
- mMainWindow->addBoardWidget(mControlContainer);
-
- connect(mControlView, SIGNAL(resized(QResizeEvent*)), this, SLOT(boardViewResized(QResizeEvent*)));
-
- // TODO UB 4.x Optimization do we have to create the display view even if their is
- // only 1 screen
- //
- mDisplayView = new UBBoardView(this, UBItemLayerType::FixedBackground, UBItemLayerType::Tool, 0);
- mDisplayView->setInteractive(false);
- mDisplayView->setTransformationAnchor(QGraphicsView::NoAnchor);
-
- mMessageWindow = new UBMessageWindow(mControlView);
- mMessageWindow->hide();
-
- mPaletteManager = new UBBoardPaletteManager(mControlContainer, this);
- connect(this, SIGNAL(activeSceneChanged()), mPaletteManager, SLOT(activeSceneChanged()));
-
-}
-
-
-void UBBoardController::setupLayout()
-{
- if(mPaletteManager)
- mPaletteManager->setupLayout();
-}
-
-
-void UBBoardController::setBoxing(QRect displayRect)
-{
- if (displayRect.isNull())
- {
- mControlLayout->setContentsMargins(0, 0, 0, 0);
- return;
- }
-
- qreal controlWidth = (qreal)mMainWindow->centralWidget()->width();
- qreal controlHeight = (qreal)mMainWindow->centralWidget()->height();
- qreal displayWidth = (qreal)displayRect.width();
- qreal displayHeight = (qreal)displayRect.height();
-
- qreal displayRatio = displayWidth / displayHeight;
- qreal controlRatio = controlWidth / controlHeight;
-
- if (displayRatio < controlRatio)
- {
- // Pillarboxing
- int boxWidth = (controlWidth - (displayWidth * (controlHeight / displayHeight))) / 2;
- mControlLayout->setContentsMargins(boxWidth, 0, boxWidth, 0);
- }
- else if (displayRatio > controlRatio)
- {
- // Letterboxing
- int boxHeight = (controlHeight - (displayHeight * (controlWidth / displayWidth))) / 2;
- mControlLayout->setContentsMargins(0, boxHeight, 0, boxHeight);
- }
- else
- {
- // No boxing
- mControlLayout->setContentsMargins(0, 0, 0, 0);
- }
-}
-
-
-QSize UBBoardController::displayViewport()
-{
- return mDisplayView->geometry().size();
-}
-
-
-QSize UBBoardController::controlViewport()
-{
- return mControlView->geometry().size();
-}
-
-
-QRectF UBBoardController::controlGeometry()
-{
- return mControlView->geometry();
-}
-
-
-void UBBoardController::setupToolbar()
-{
- UBSettings *settings = UBSettings::settings();
-
- // Setup color choice widget
- QList<QAction *> colorActions;
- colorActions.append(mMainWindow->actionColor0);
- colorActions.append(mMainWindow->actionColor1);
- colorActions.append(mMainWindow->actionColor2);
- colorActions.append(mMainWindow->actionColor3);
-
- UBToolbarButtonGroup *colorChoice =
- new UBToolbarButtonGroup(mMainWindow->boardToolBar, colorActions);
-
- mMainWindow->boardToolBar->insertWidget(mMainWindow->actionBackgrounds, colorChoice);
-
- connect(settings->appToolBarDisplayText, SIGNAL(changed(QVariant)), colorChoice, SLOT(displayText(QVariant)));
- connect(colorChoice, SIGNAL(activated(int)), this, SLOT(setColorIndex(int)));
- connect(UBDrawingController::drawingController(), SIGNAL(colorIndexChanged(int)), colorChoice, SLOT(setCurrentIndex(int)));
- connect(UBDrawingController::drawingController(), SIGNAL(colorPaletteChanged()), colorChoice, SLOT(colorPaletteChanged()));
- connect(UBDrawingController::drawingController(), SIGNAL(colorPaletteChanged()), this, SLOT(colorPaletteChanged()));
-
- colorChoice->displayText(QVariant(settings->appToolBarDisplayText->get().toBool()));
- colorChoice->colorPaletteChanged();
-
- // Setup line width choice widget
- QList<QAction *> lineWidthActions;
- lineWidthActions.append(mMainWindow->actionLineSmall);
- lineWidthActions.append(mMainWindow->actionLineMedium);
- lineWidthActions.append(mMainWindow->actionLineLarge);
-
- UBToolbarButtonGroup *lineWidthChoice =
- new UBToolbarButtonGroup(mMainWindow->boardToolBar, lineWidthActions);
-
- connect(settings->appToolBarDisplayText, SIGNAL(changed(QVariant)), lineWidthChoice, SLOT(displayText(QVariant)));
-
- connect(lineWidthChoice, SIGNAL(activated(int))
- , UBDrawingController::drawingController(), SLOT(setLineWidthIndex(int)));
-
- connect(UBDrawingController::drawingController(), SIGNAL(lineWidthIndexChanged(int))
- , lineWidthChoice, SLOT(setCurrentIndex(int)));
-
- lineWidthChoice->displayText(QVariant(settings->appToolBarDisplayText->get().toBool()));
-
- mMainWindow->boardToolBar->insertWidget(mMainWindow->actionBackgrounds, lineWidthChoice);
-
- //-----------------------------------------------------------//
- // Setup eraser width choice widget
-
- QList<QAction *> eraserWidthActions;
- eraserWidthActions.append(mMainWindow->actionEraserSmall);
- eraserWidthActions.append(mMainWindow->actionEraserMedium);
- eraserWidthActions.append(mMainWindow->actionEraserLarge);
-
- UBToolbarButtonGroup *eraserWidthChoice =
- new UBToolbarButtonGroup(mMainWindow->boardToolBar, eraserWidthActions);
-
- mMainWindow->boardToolBar->insertWidget(mMainWindow->actionBackgrounds, eraserWidthChoice);
-
- connect(settings->appToolBarDisplayText, SIGNAL(changed(QVariant)), eraserWidthChoice, SLOT(displayText(QVariant)));
- connect(eraserWidthChoice, SIGNAL(activated(int)), UBDrawingController::drawingController(), SLOT(setEraserWidthIndex(int)));
-
- eraserWidthChoice->displayText(QVariant(settings->appToolBarDisplayText->get().toBool()));
- eraserWidthChoice->setCurrentIndex(settings->eraserWidthIndex());
-
- mMainWindow->boardToolBar->insertSeparator(mMainWindow->actionBackgrounds);
-
- //-----------------------------------------------------------//
-
- UBApplication::app()->insertSpaceToToolbarBeforeAction(mMainWindow->boardToolBar, mMainWindow->actionBoard);
- UBApplication::app()->insertSpaceToToolbarBeforeAction(mMainWindow->tutorialToolBar, mMainWindow->actionBoard);
-
- UBApplication::app()->decorateActionMenu(mMainWindow->actionMenu);
-
- mMainWindow->actionBoard->setVisible(false);
-
- mMainWindow->webToolBar->hide();
- mMainWindow->documentToolBar->hide();
- mMainWindow->tutorialToolBar->hide();
-
- connectToolbar();
- initToolbarTexts();
-}
-
-
-void UBBoardController::setToolCursor(int tool)
-{
- if (mActiveScene)
- {
- mActiveScene->setToolCursor(tool);
- }
-
- mControlView->setToolCursor(tool);
-}
-
-
-void UBBoardController::connectToolbar()
-{
- connect(mMainWindow->actionAdd, SIGNAL(triggered()), this, SLOT(addItem()));
- connect(mMainWindow->actionNewPage, SIGNAL(triggered()), this, SLOT(addScene()));
- connect(mMainWindow->actionDuplicatePage, SIGNAL(triggered()), this, SLOT(duplicateScene()));
-
- connect(mMainWindow->actionClearPage, SIGNAL(triggered()), this, SLOT(clearScene()));
- connect(mMainWindow->actionEraseItems, SIGNAL(triggered()), this, SLOT(clearSceneItems()));
- connect(mMainWindow->actionEraseAnnotations, SIGNAL(triggered()), this, SLOT(clearSceneAnnotation()));
- connect(mMainWindow->actionEraseBackground,SIGNAL(triggered()),this,SLOT(clearSceneBackground()));
-
- connect(mMainWindow->actionUndo, SIGNAL(triggered()), UBApplication::undoStack, SLOT(undo()));
- connect(mMainWindow->actionRedo, SIGNAL(triggered()), UBApplication::undoStack, SLOT(redo()));
- connect(mMainWindow->actionRedo, SIGNAL(triggered()), this, SLOT(startScript()));
- connect(mMainWindow->actionBack, SIGNAL( triggered()), this, SLOT(previousScene()));
- connect(mMainWindow->actionForward, SIGNAL(triggered()), this, SLOT(nextScene()));
- connect(mMainWindow->actionSleep, SIGNAL(triggered()), this, SLOT(stopScript()));
- connect(mMainWindow->actionSleep, SIGNAL(triggered()), this, SLOT(blackout()));
- connect(mMainWindow->actionVirtualKeyboard, SIGNAL(triggered(bool)), this, SLOT(showKeyboard(bool)));
- connect(mMainWindow->actionImportPage, SIGNAL(triggered()), this, SLOT(importPage()));
-}
-
-void UBBoardController::startScript()
-{
- freezeW3CWidgets(false);
-}
-
-void UBBoardController::stopScript()
-{
- freezeW3CWidgets(true);
-}
-
-void UBBoardController::initToolbarTexts()
-{
- QList<QAction*> allToolbarActions;
-
- allToolbarActions << mMainWindow->boardToolBar->actions();
- allToolbarActions << mMainWindow->webToolBar->actions();
- allToolbarActions << mMainWindow->documentToolBar->actions();
-
- foreach(QAction* action, allToolbarActions)
- {
- QString nominalText = action->text();
- QString shortText = truncate(nominalText, 48);
- QPair<QString, QString> texts(nominalText, shortText);
-
- mActionTexts.insert(action, texts);
- }
-}
-
-
-void UBBoardController::setToolbarTexts()
-{
- bool highResolution = mMainWindow->width() > 1024;
- QSize iconSize;
-
- if (highResolution)
- iconSize = QSize(48, 32);
- else
- iconSize = QSize(32, 32);
-
- mMainWindow->boardToolBar->setIconSize(iconSize);
- mMainWindow->webToolBar->setIconSize(iconSize);
- mMainWindow->documentToolBar->setIconSize(iconSize);
-
- foreach(QAction* action, mActionTexts.keys())
- {
- QPair<QString, QString> texts = mActionTexts.value(action);
-
- if (highResolution)
- action->setText(texts.first);
- else
- {
- action->setText(texts.second);
- }
-
- action->setToolTip(texts.first);
- }
-}
-
-
-QString UBBoardController::truncate(QString text, int maxWidth)
-{
- QFontMetricsF fontMetrics(mMainWindow->font());
- return fontMetrics.elidedText(text, Qt::ElideRight, maxWidth);
-}
-
-
-void UBBoardController::stylusToolDoubleClicked(int tool)
-{
- if (tool == UBStylusTool::ZoomIn || tool == UBStylusTool::ZoomOut)
- {
- zoomRestore();
- }
- else if (tool == UBStylusTool::Hand)
- {
- centerRestore();
- }
-}
-
-
-
-void UBBoardController::addScene()
-{
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- persistCurrentScene();
-
- UBDocumentContainer::addPage(mActiveSceneIndex + 1);
-
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
-
- setActiveDocumentScene(mActiveSceneIndex + 1);
- QApplication::restoreOverrideCursor();
-}
-
-void UBBoardController::addScene(UBGraphicsScene* scene, bool replaceActiveIfEmpty)
-{
- if (scene)
- {
- UBGraphicsScene* clone = scene->sceneDeepCopy();
-
- if (scene->document() && (scene->document() != selectedDocument()))
- {
- foreach(QUrl relativeFile, scene->relativeDependencies())
- {
- QString source = scene->document()->persistencePath() + "/" + relativeFile.toString();
- QString target = selectedDocument()->persistencePath() + "/" + relativeFile.toString();
-
- QFileInfo fi(target);
- QDir d = fi.dir();
-
- d.mkpath(d.absolutePath());
- QFile::copy(source, target);
- }
- }
-
- if (replaceActiveIfEmpty && mActiveScene->isEmpty())
- {
- setActiveDocumentScene(mActiveSceneIndex);
- }
- else
- {
- persistCurrentScene();
- UBPersistenceManager::persistenceManager()->insertDocumentSceneAt(selectedDocument(), clone, mActiveSceneIndex + 1);
- setActiveDocumentScene(mActiveSceneIndex + 1);
- }
-
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- }
-}
-
-
-void UBBoardController::addScene(UBDocumentProxy* proxy, int sceneIndex, bool replaceActiveIfEmpty)
-{
- UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->loadDocumentScene(proxy, sceneIndex);
-
- if (scene)
- {
- addScene(scene, replaceActiveIfEmpty);
- }
-}
-
-void UBBoardController::duplicateScene(int nIndex)
-{
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- persistCurrentScene();
-
- QList<int> scIndexes;
- scIndexes << nIndex;
- duplicatePages(scIndexes);
- insertThumbPage(nIndex);
- emit documentThumbnailsUpdated(this);
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
-
- setActiveDocumentScene(nIndex + 1);
- QApplication::restoreOverrideCursor();
-
- emit pageChanged();
-}
-
-void UBBoardController::duplicateScene()
-{
- if (UBApplication::applicationController->displayMode() != UBApplicationController::Board)
- return;
- duplicateScene(mActiveSceneIndex);
-}
-
-UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item, bool bAsync)
-{
- if (!item)
- return NULL;
-
- UBGraphicsItem *retItem = NULL;
-
- mLastCreatedItem = NULL;
-
- QUrl sourceUrl;
- QByteArray pData;
-
- //common parameters for any item
- QPointF itemPos;
- QSizeF itemSize;
-
- QGraphicsItem *commonItem = dynamic_cast<QGraphicsItem*>(item);
- if (commonItem)
- {
- qreal shifting = UBSettings::settings()->objectFrameWidth;
- itemPos = commonItem->pos() + QPointF(shifting,shifting);
- itemSize = commonItem->boundingRect().size();
- commonItem->setSelected(false);
- }
-
- UBMimeType::Enum itemMimeType;
-
- QString srcFile = item->sourceUrl().toLocalFile();
- if (srcFile.isEmpty())
- srcFile = item->sourceUrl().toString();
-
- QString contentTypeHeader;
- if (!srcFile.isEmpty())
- contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(srcFile);
-
- if(NULL != qgraphicsitem_cast<UBGraphicsGroupContainerItem*>(commonItem))
- itemMimeType = UBMimeType::Group;
- else
- itemMimeType = UBFileSystemUtils::mimeTypeFromString(contentTypeHeader);
-
- switch(static_cast<int>(itemMimeType))
- {
- case UBMimeType::AppleWidget:
- case UBMimeType::W3CWidget:
- {
- UBGraphicsWidgetItem *witem = dynamic_cast<UBGraphicsWidgetItem*>(item);
- if (witem)
- {
- sourceUrl = witem->getOwnFolder();
- }
- }break;
-
- case UBMimeType::Video:
- case UBMimeType::Audio:
- {
- UBGraphicsMediaItem *mitem = dynamic_cast<UBGraphicsMediaItem*>(item);
- if (mitem)
- {
- sourceUrl = mitem->mediaFileUrl();
- if (bAsync)
- {
- downloadURL(sourceUrl, srcFile, itemPos, QSize(itemSize.width(), itemSize.height()), false, false);
- return NULL; // async operation
- }
- }
- }break;
-
- case UBMimeType::VectorImage:
- {
- UBGraphicsSvgItem *viitem = dynamic_cast<UBGraphicsSvgItem*>(item);
- if (viitem)
- {
- pData = viitem->fileData();
- sourceUrl = item->sourceUrl();
- }
- }break;
-
- case UBMimeType::RasterImage:
- {
- UBGraphicsPixmapItem *pixitem = dynamic_cast<UBGraphicsPixmapItem*>(item);
- if (pixitem)
- {
- QBuffer buffer(&pData);
- buffer.open(QIODevice::WriteOnly);
- QString format = UBFileSystemUtils::extension(item->sourceUrl().toLocalFile());
- pixitem->pixmap().save(&buffer, format.toLatin1());
- }
- }break;
-
- case UBMimeType::Group:
- {
- UBGraphicsGroupContainerItem* groupItem = dynamic_cast<UBGraphicsGroupContainerItem*>(item);
- UBGraphicsGroupContainerItem* duplicatedGroup = NULL;
-
- QList<QGraphicsItem*> duplicatedItems;
- QList<QGraphicsItem*> children = groupItem->childItems();
-
- mActiveScene->setURStackEnable(false);
- foreach(QGraphicsItem* pIt, children){
- UBItem* pItem = dynamic_cast<UBItem*>(pIt);
- if(pItem){ // we diong sync duplication of all childs.
- QGraphicsItem * itemToGroup = dynamic_cast<QGraphicsItem *>(duplicateItem(pItem, false));
- if (itemToGroup)
- duplicatedItems.append(itemToGroup);
- }
- }
- duplicatedGroup = mActiveScene->createGroup(duplicatedItems);
- duplicatedGroup->setTransform(groupItem->transform());
- groupItem->setSelected(false);
-
- retItem = dynamic_cast<UBGraphicsItem *>(duplicatedGroup);
-
- QGraphicsItem * itemToAdd = dynamic_cast<QGraphicsItem *>(retItem);
- if (itemToAdd)
- {
- mActiveScene->addItem(itemToAdd);
- itemToAdd->setSelected(true);
- }
- mActiveScene->setURStackEnable(true);
- }break;
-
- case UBMimeType::UNKNOWN:
- {
- QGraphicsItem *gitem = dynamic_cast<QGraphicsItem*>(item->deepCopy());
- if (gitem)
- {
- mActiveScene->addItem(gitem);
- gitem->setPos(itemPos);
- mLastCreatedItem = gitem;
- gitem->setSelected(true);
- }
- retItem = dynamic_cast<UBGraphicsItem *>(gitem);
- }break;
- }
-
- if (retItem)
- {
- QGraphicsItem *graphicsRetItem = dynamic_cast<QGraphicsItem *>(retItem);
- if (mActiveScene->isURStackIsEnabled()) { //should be deleted after scene own undo stack implemented
- UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(mActiveScene, 0, graphicsRetItem);
- UBApplication::undoStack->push(uc);
- }
- return retItem;
- }
-
- UBItem *createdItem = downloadFinished(true, sourceUrl, srcFile, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false);
- if (createdItem)
- {
- createdItem->setSourceUrl(item->sourceUrl());
- item->copyItemParameters(createdItem);
-
- QGraphicsItem *createdGitem = dynamic_cast<QGraphicsItem*>(createdItem);
- if (createdGitem)
- createdGitem->setPos(itemPos);
- mLastCreatedItem = dynamic_cast<QGraphicsItem*>(createdItem);
- mLastCreatedItem->setSelected(true);
-
- retItem = dynamic_cast<UBGraphicsItem *>(createdItem);
- }
-
- return retItem;
-}
-
-void UBBoardController::deleteScene(int nIndex)
-{
- if (selectedDocument()->pageCount()>=2)
- {
- mDeletingSceneIndex = nIndex;
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- persistCurrentScene();
- showMessage(tr("Delete page %1 from document").arg(nIndex), true);
-
- QList<int> scIndexes;
- scIndexes << nIndex;
- deletePages(scIndexes);
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
-
- if (nIndex >= pageCount())
- nIndex = pageCount()-1;
- setActiveDocumentScene(nIndex);
- showMessage(tr("Page %1 deleted").arg(nIndex));
- QApplication::restoreOverrideCursor();
- mDeletingSceneIndex = -1;
- }
-}
-
-
-void UBBoardController::clearScene()
-{
- if (mActiveScene)
- {
- freezeW3CWidgets(true);
- mActiveScene->clearContent(UBGraphicsScene::clearItemsAndAnnotations);
- updateActionStates();
- }
-}
-
-
-void UBBoardController::clearSceneItems()
-{
- if (mActiveScene)
- {
- freezeW3CWidgets(true);
- mActiveScene->clearContent(UBGraphicsScene::clearItems);
- updateActionStates();
- }
-}
-
-
-void UBBoardController::clearSceneAnnotation()
-{
- if (mActiveScene)
- {
- mActiveScene->clearContent(UBGraphicsScene::clearAnnotations);
- updateActionStates();
- }
-}
-
-void UBBoardController::clearSceneBackground()
-{
- if (mActiveScene)
- {
- mActiveScene->clearContent(UBGraphicsScene::clearBackground);
- updateActionStates();
- }
-}
-
-void UBBoardController::showDocumentsDialog()
-{
- if (selectedDocument())
- persistCurrentScene();
-
- UBApplication::mainWindow->actionLibrary->setChecked(false);
-
-}
-
-void UBBoardController::libraryDialogClosed(int ret)
-{
- Q_UNUSED(ret);
-
- mMainWindow->actionLibrary->setChecked(false);
-}
-
-
-void UBBoardController::blackout()
-{
- UBApplication::applicationController->blackout();
-}
-
-
-void UBBoardController::showKeyboard(bool show)
-{
- if(show)
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- mPaletteManager->showVirtualKeyboard(show);
-}
-
-
-void UBBoardController::zoomIn(QPointF scenePoint)
-{
- if (mControlView->transform().m11() > UB_MAX_ZOOM)
- {
- qApp->beep();
- return;
- }
- zoom(mZoomFactor, scenePoint);
-}
-
-
-void UBBoardController::zoomOut(QPointF scenePoint)
-{
- if ((mControlView->horizontalScrollBar()->maximum() == 0) && (mControlView->verticalScrollBar()->maximum() == 0))
- {
- // Do not zoom out if we reached the maximum
- qApp->beep();
- return;
- }
-
- qreal newZoomFactor = 1 / mZoomFactor;
-
- zoom(newZoomFactor, scenePoint);
-}
-
-
-void UBBoardController::zoomRestore()
-{
- QTransform tr;
-
- tr.scale(mSystemScaleFactor, mSystemScaleFactor);
- mControlView->setTransform(tr);
-
- centerRestore();
-
- foreach(QGraphicsItem *gi, mActiveScene->selectedItems ())
- {
- //force item to redraw the frame (for the anti scale calculation)
- gi->setSelected(false);
- gi->setSelected(true);
- }
-
- emit zoomChanged(1.0);
-}
-
-
-void UBBoardController::centerRestore()
-{
- centerOn(QPointF(0,0));
-}
-
-
-void UBBoardController::centerOn(QPointF scenePoint)
-{
- mControlView->centerOn(scenePoint);
- UBApplication::applicationController->adjustDisplayView();
-}
-
-
-void UBBoardController::zoom(const qreal ratio, QPointF scenePoint)
-{
-
- QPointF viewCenter = mControlView->mapToScene(QRect(0, 0, mControlView->width(), mControlView->height()).center());
- QPointF offset = scenePoint - viewCenter;
- QPointF scalledOffset = offset / ratio;
-
- qreal currentZoom = ratio * mControlView->viewportTransform().m11() / mSystemScaleFactor;
-
- qreal usedRatio = ratio;
- if (currentZoom > UB_MAX_ZOOM)
- {
- currentZoom = UB_MAX_ZOOM;
- usedRatio = currentZoom * mSystemScaleFactor / mControlView->viewportTransform().m11();
- }
-
- mControlView->scale(usedRatio, usedRatio);
-
- QPointF newCenter = scenePoint - scalledOffset;
-
- mControlView->centerOn(newCenter);
-
- emit zoomChanged(currentZoom);
- UBApplication::applicationController->adjustDisplayView();
-
- emit controlViewportChanged();
- mActiveScene->setBackgroundZoomFactor(mControlView->transform().m11());
-}
-
-
-void UBBoardController::handScroll(qreal dx, qreal dy)
-{
- mControlView->translate(dx, dy);
-
- UBApplication::applicationController->adjustDisplayView();
-
- emit controlViewportChanged();
-}
-
-
-void UBBoardController::previousScene()
-{
- if (mActiveSceneIndex > 0)
- {
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- persistCurrentScene();
- setActiveDocumentScene(mActiveSceneIndex - 1);
- QApplication::restoreOverrideCursor();
- }
-
- updateActionStates();
- emit pageChanged();
-}
-
-
-void UBBoardController::nextScene()
-{
- if (mActiveSceneIndex < selectedDocument()->pageCount() - 1)
- {
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- persistCurrentScene();
- setActiveDocumentScene(mActiveSceneIndex + 1);
- QApplication::restoreOverrideCursor();
- }
-
- updateActionStates();
- emit pageChanged();
-}
-
-
-void UBBoardController::firstScene()
-{
- if (mActiveSceneIndex > 0)
- {
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- persistCurrentScene();
- setActiveDocumentScene(0);
- QApplication::restoreOverrideCursor();
- }
-
- updateActionStates();
- emit pageChanged();
-}
-
-
-void UBBoardController::lastScene()
-{
- if (mActiveSceneIndex < selectedDocument()->pageCount() - 1)
- {
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- persistCurrentScene();
- setActiveDocumentScene(selectedDocument()->pageCount() - 1);
- QApplication::restoreOverrideCursor();
- }
-
- updateActionStates();
- emit pageChanged();
-}
-
-void UBBoardController::groupButtonClicked()
-{
- QAction *groupAction = UBApplication::mainWindow->actionGroupItems;
- QList<QGraphicsItem*> selItems = activeScene()->selectedItems();
- if (!selItems.count()) {
- qDebug() << "Got grouping request when there is no any selected item on the scene";
- return;
- }
-
- if (groupAction->text() == mActionGroupText) { //The only way to get information from item, considering using smth else
- UBGraphicsGroupContainerItem *groupItem = activeScene()->createGroup(selItems);
- groupItem->setSelected(true);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
-
- }
- else if (groupAction->text() == mActionUngroupText) {
- //Considering one selected item and it's a group
- if (selItems.count() > 1)
- {
- qDebug() << "can't make sense of ungrouping more then one item. Grouping action should be performed for that purpose";
- return;
- }
- UBGraphicsGroupContainerItem *currentGroup = dynamic_cast<UBGraphicsGroupContainerItem*>(selItems.first());
- if (currentGroup) {
- currentGroup->destroy();
- }
- }
-}
-
-void UBBoardController::downloadURL(const QUrl& url, QString contentSourceUrl, const QPointF& pPos, const QSize& pSize, bool isBackground, bool internalData)
-{
- qDebug() << "something has been dropped on the board! Url is: " << url.toString();
- QString sUrl = url.toString();
-
- QGraphicsItem *oldBackgroundObject = NULL;
- if (isBackground)
- oldBackgroundObject = mActiveScene->backgroundObject();
-
- if(sUrl.startsWith("uniboardTool://"))
- {
- downloadFinished(true, url, QUrl(), "application/vnd.mnemis-uniboard-tool", QByteArray(), pPos, pSize, isBackground);
- }
- else if (sUrl.startsWith("file://") || sUrl.startsWith("/"))
- {
- QUrl formedUrl = sUrl.startsWith("file://") ? url : QUrl::fromLocalFile(sUrl);
- QString fileName = formedUrl.toLocalFile();
- QString contentType = UBFileSystemUtils::mimeTypeFromFileName(fileName);
-
- bool shouldLoadFileData =
- contentType.startsWith("image")
- || contentType.startsWith("application/widget")
- || contentType.startsWith("application/vnd.apple-widget");
-
- if (shouldLoadFileData)
- {
- QFile file(fileName);
- file.open(QIODevice::ReadOnly);
- downloadFinished(true, formedUrl, QUrl(), contentType, file.readAll(), pPos, pSize, isBackground, internalData);
- file.close();
- }
- else
- {
- // media items should be copyed in separate thread
-
- sDownloadFileDesc desc;
- desc.modal = false;
- desc.srcUrl = sUrl;
- desc.originalSrcUrl = contentSourceUrl;
- desc.currentSize = 0;
- desc.name = QFileInfo(url.toString()).fileName();
- desc.totalSize = 0; // The total size will be retrieved during the download
- desc.pos = pPos;
- desc.size = pSize;
- desc.isBackground = isBackground;
-
- UBDownloadManager::downloadManager()->addFileToDownload(desc);
- }
- }
- else
- {
- QString urlString = url.toString();
- int parametersStringPosition = urlString.indexOf("?");
- if(parametersStringPosition != -1)
- urlString = urlString.left(parametersStringPosition);
-
- // When we fall there, it means that we are dropping something from the web to the board
- sDownloadFileDesc desc;
- desc.modal = true;
- desc.srcUrl = urlString;
- desc.currentSize = 0;
- desc.name = QFileInfo(urlString).fileName();
- desc.totalSize = 0; // The total size will be retrieved during the download
- desc.pos = pPos;
- desc.size = pSize;
- desc.isBackground = isBackground;
-
- UBDownloadManager::downloadManager()->addFileToDownload(desc);
- }
-
- if (isBackground && oldBackgroundObject != mActiveScene->backgroundObject())
- {
- if (mActiveScene->isURStackIsEnabled()) { //should be deleted after scene own undo stack implemented
- UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(mActiveScene, oldBackgroundObject, mActiveScene->backgroundObject());
- UBApplication::undoStack->push(uc);
- }
- }
-
-
-}
-
-
-UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pContentTypeHeader,
- QByteArray pData, QPointF pPos, QSize pSize,
- bool isBackground, bool internalData)
-{
- QString mimeType = pContentTypeHeader;
-
- // In some cases "image/jpeg;charset=" is retourned by the drag-n-drop. That is
- // why we will check if an ; exists and take the first part (the standard allows this kind of mimetype)
- if(mimeType.isEmpty())
- mimeType = UBFileSystemUtils::mimeTypeFromFileName(sourceUrl.toString());
-
- int position=mimeType.indexOf(";");
- if(position != -1)
- mimeType=mimeType.left(position);
-
- UBMimeType::Enum itemMimeType = UBFileSystemUtils::mimeTypeFromString(mimeType);
-
- if (!pSuccess)
- {
- showMessage(tr("Downloading content %1 failed").arg(sourceUrl.toString()));
- return NULL;
- }
-
-
- mActiveScene->deselectAllItems();
-
- if (!sourceUrl.toString().startsWith("file://") && !sourceUrl.toString().startsWith("uniboardTool://"))
- showMessage(tr("Download finished"));
-
- if (UBMimeType::RasterImage == itemMimeType)
- {
-
- qDebug() << "accepting mime type" << mimeType << "as raster image";
-
-
- QPixmap pix;
- if(pData.length() == 0){
- pix.load(sourceUrl.toLocalFile());
- }
- else{
- QImage img;
- img.loadFromData(pData);
- pix = QPixmap::fromImage(img);
- }
-
- UBGraphicsPixmapItem* pixItem = mActiveScene->addPixmap(pix, NULL, pPos, 1.);
- pixItem->setSourceUrl(sourceUrl);
-
- if (isBackground)
- {
- mActiveScene->setAsBackgroundObject(pixItem, true);
- }
- else
- {
- mActiveScene->scaleToFitDocumentSize(pixItem, true, UBSettings::objectInControlViewMargin);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- pixItem->setSelected(true);
- }
-
- return pixItem;
- }
- else if (UBMimeType::VectorImage == itemMimeType)
- {
- qDebug() << "accepting mime type" << mimeType << "as vecto image";
-
- UBGraphicsSvgItem* svgItem = mActiveScene->addSvg(sourceUrl, pPos, pData);
- svgItem->setSourceUrl(sourceUrl);
-
- if (isBackground)
- {
- mActiveScene->setAsBackgroundObject(svgItem);
- }
- else
- {
- mActiveScene->scaleToFitDocumentSize(svgItem, true, UBSettings::objectInControlViewMargin);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- svgItem->setSelected(true);
- }
-
- return svgItem;
- }
- else if (UBMimeType::AppleWidget == itemMimeType) //mime type invented by us :-(
- {
- qDebug() << "accepting mime type" << mimeType << "as Apple widget";
-
- QUrl widgetUrl = sourceUrl;
-
- if (pData.length() > 0)
- {
- widgetUrl = expandWidgetToTempDir(pData, "wdgt");
- }
-
- UBGraphicsWidgetItem* appleWidgetItem = mActiveScene->addAppleWidget(widgetUrl, pPos);
-
- appleWidgetItem->setSourceUrl(sourceUrl);
-
- if (isBackground)
- {
- mActiveScene->setAsBackgroundObject(appleWidgetItem);
- }
- else
- {
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
-
- return appleWidgetItem;
- }
- else if (UBMimeType::W3CWidget == itemMimeType)
- {
- qDebug() << "accepting mime type" << mimeType << "as W3C widget";
- QUrl widgetUrl = sourceUrl;
-
- if (pData.length() > 0)
- {
- widgetUrl = expandWidgetToTempDir(pData);
- }
-
- UBGraphicsWidgetItem *w3cWidgetItem = addW3cWidget(widgetUrl, pPos);
-
- if (isBackground)
- {
- mActiveScene->setAsBackgroundObject(w3cWidgetItem);
- }
- else
- {
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
-
- return w3cWidgetItem;
- }
- else if (UBMimeType::Video == itemMimeType)
- {
- qDebug() << "accepting mime type" << mimeType << "as video";
-
- UBGraphicsMediaItem *mediaVideoItem = 0;
- QUuid uuid = QUuid::createUuid();
- if (pData.length() > 0)
- {
- QString destFile;
- bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(),
- sourceUrl.toString(),
- UBPersistenceManager::videoDirectory,
- uuid,
- destFile,
- &pData);
- if (!b)
- {
- showMessage(tr("Add file operation failed: file copying error"));
- return NULL;
- }
-
- QUrl url = QUrl::fromLocalFile(destFile);
-
- mediaVideoItem = mActiveScene->addMedia(url, false, pPos);
- }
- else
- {
- qDebug() << sourceUrl.toString();
- mediaVideoItem = addVideo(sourceUrl, false, pPos, true);
- }
-
- if(mediaVideoItem){
- if (contentUrl.isEmpty())
- mediaVideoItem->setSourceUrl(sourceUrl);
- else
- mediaVideoItem->setSourceUrl(contentUrl);
- mediaVideoItem->setUuid(uuid);
- connect(this, SIGNAL(activeSceneChanged()), mediaVideoItem, SLOT(activeSceneChanged()));
- }
-
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
-
- return mediaVideoItem;
- }
- else if (UBMimeType::Audio == itemMimeType)
- {
- qDebug() << "accepting mime type" << mimeType << "as audio";
-
- UBGraphicsMediaItem *audioMediaItem = 0;
-
- QUuid uuid = QUuid::createUuid();
- if (pData.length() > 0)
- {
- QString destFile;
- bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(),
- sourceUrl.toString(),
- UBPersistenceManager::audioDirectory,
- uuid,
- destFile,
- &pData);
- if (!b)
- {
- showMessage(tr("Add file operation failed: file copying error"));
- return NULL;
- }
-
- QUrl url = QUrl::fromLocalFile(destFile);
-
- audioMediaItem = mActiveScene->addMedia(url, false, pPos);
- }
- else
- {
- audioMediaItem = addAudio(sourceUrl, false, pPos, true);
- }
-
- if(audioMediaItem){
- if (contentUrl.isEmpty())
- audioMediaItem->setSourceUrl(sourceUrl);
- else
- audioMediaItem->setSourceUrl(contentUrl);
- audioMediaItem->setUuid(uuid);
- connect(this, SIGNAL(activeSceneChanged()), audioMediaItem, SLOT(activeSceneChanged()));
- }
-
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
-
- return audioMediaItem;
- }
-
- else if (UBMimeType::Flash == itemMimeType)
- {
-
- qDebug() << "accepting mime type" << mimeType << "as flash";
-
- QString sUrl = sourceUrl.toString();
-
- if (sUrl.startsWith("file://") || sUrl.startsWith("/"))
- {
- sUrl = sourceUrl.toLocalFile();
- }
-
- QTemporaryFile* eduMediaFile = 0;
-
- if (sUrl.toLower().contains("edumedia-sciences.com"))
- {
- eduMediaFile = new QTemporaryFile("XXXXXX.swf");
- if (eduMediaFile->open())
- {
- eduMediaFile->write(pData);
- QFileInfo fi(*eduMediaFile);
- sUrl = fi.absoluteFilePath();
- }
- }
-
- QSize size;
-
- if (pSize.height() > 0 && pSize.width() > 0)
- size = pSize;
- else
- size = mActiveScene->nominalSize() * .8;
-
- Q_UNUSED(internalData)
-
- QString widgetUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapper(sUrl, mimeType, size);
- emit npapiWidgetCreated(widgetUrl);
-
- if (widgetUrl.length() > 0)
- {
- UBGraphicsWidgetItem *widgetItem = mActiveScene->addW3CWidget(QUrl::fromLocalFile(widgetUrl), pPos);
- widgetItem->setUuid(QUuid::createUuid());
- widgetItem->setSourceUrl(QUrl::fromLocalFile(widgetUrl));
-
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
-
- return widgetItem;
- }
-
- if (eduMediaFile)
- delete eduMediaFile;
-
- }
- else if (UBMimeType::PDF == itemMimeType)
- {
- qDebug() << "accepting mime type" << mimeType << "as PDF";
- qDebug() << "pdf data length: " << pData.size();
- qDebug() << "sourceurl : " + sourceUrl.toString();
- int result = 0;
- if(!sourceUrl.isEmpty()){
- QStringList fileNames;
- fileNames << sourceUrl.toLocalFile();
- result = UBDocumentManager::documentManager()->addFilesToDocument(selectedDocument(), fileNames);
- }
- else if(pData.size()){
- QTemporaryFile pdfFile("XXXXXX.pdf");
- if (pdfFile.open())
- {
- pdfFile.write(pData);
- QStringList fileNames;
- fileNames << pdfFile.fileName();
- result = UBDocumentManager::documentManager()->addFilesToDocument(selectedDocument(), fileNames);
- pdfFile.close();
- }
- }
-
- if (result){
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- }
- }
- else if (UBMimeType::UniboardTool == itemMimeType)
- {
- qDebug() << "accepting mime type" << mimeType << "as Uniboard Tool";
-
- if (sourceUrl.toString() == UBToolsManager::manager()->compass.id)
- {
- mActiveScene->addCompass(pPos);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
- else if (sourceUrl.toString() == UBToolsManager::manager()->ruler.id)
- {
- mActiveScene->addRuler(pPos);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
- else if (sourceUrl.toString() == UBToolsManager::manager()->protractor.id)
- {
- mActiveScene->addProtractor(pPos);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
- else if (sourceUrl.toString() == UBToolsManager::manager()->triangle.id)
- {
- mActiveScene->addTriangle(pPos);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
- else if (sourceUrl.toString() == UBToolsManager::manager()->cache.id)
- {
- mActiveScene->addCache();
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
- else if (sourceUrl.toString() == UBToolsManager::manager()->magnifier.id)
- {
- UBMagnifierParams params;
- params.x = controlContainer()->geometry().width() / 2;
- params.y = controlContainer()->geometry().height() / 2;
- params.zoom = 2;
- params.sizePercentFromScene = 20;
- mActiveScene->addMagnifier(params);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
- else if (sourceUrl.toString() == UBToolsManager::manager()->mask.id)
- {
- mActiveScene->addMask(pPos);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
- else if (sourceUrl.toString() == UBToolsManager::manager()->aristo.id)
- {
- mActiveScene->addAristo(pPos);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
- else
- {
- showMessage(tr("Unknown tool type %1").arg(sourceUrl.toString()));
- }
- }
- else if (sourceUrl.toString().contains("edumedia-sciences.com"))
- {
- qDebug() << "accepting url " << sourceUrl.toString() << "as eduMedia content";
-
- QTemporaryFile eduMediaZipFile("XXXXXX.edumedia");
- if (eduMediaZipFile.open())
- {
- eduMediaZipFile.write(pData);
- eduMediaZipFile.close();
-
- QString tempDir = UBFileSystemUtils::createTempDir("uniboard-edumedia");
-
- UBFileSystemUtils::expandZipToDir(eduMediaZipFile, tempDir);
-
- QDir appDir(tempDir);
-
- foreach(QString subDirName, appDir.entryList(QDir::AllDirs))
- {
- QDir subDir(tempDir + "/" + subDirName + "/contents");
-
- foreach(QString fileName, subDir.entryList(QDir::Files))
- {
- if (fileName.toLower().endsWith(".swf"))
- {
- QString swfFile = tempDir + "/" + subDirName + "/contents/" + fileName;
-
- QSize size;
-
- if (pSize.height() > 0 && pSize.width() > 0)
- size = pSize;
- else
- size = mActiveScene->nominalSize() * .8;
-
- QString widgetUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapper(swfFile, "application/x-shockwave-flash", size);
-
- if (widgetUrl.length() > 0)
- {
- UBGraphicsWidgetItem *widgetItem = mActiveScene->addW3CWidget(QUrl::fromLocalFile(widgetUrl), pPos);
-
- widgetItem->setSourceUrl(sourceUrl);
-
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
-
- return widgetItem;
- }
- }
- }
- }
- }
- }
- else
- {
- showMessage(tr("Unknown content type %1").arg(pContentTypeHeader));
- qWarning() << "ignoring mime type" << pContentTypeHeader ;
- }
-
- return NULL;
-}
-
-void UBBoardController::setActiveDocumentScene(int pSceneIndex)
-{
- setActiveDocumentScene(selectedDocument(), pSceneIndex);
-}
-
-void UBBoardController::setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, const int pSceneIndex, bool forceReload)
-{
- saveViewState();
-
- bool documentChange = selectedDocument() != pDocumentProxy;
-
- int index = pSceneIndex;
- int sceneCount = pDocumentProxy->pageCount();
- if (index >= sceneCount && sceneCount > 0)
- index = sceneCount - 1;
-
- UBGraphicsScene* targetScene = UBPersistenceManager::persistenceManager()->loadDocumentScene(pDocumentProxy, index);
-
- bool sceneChange = targetScene != mActiveScene;
-
- if (targetScene)
- {
- freezeW3CWidgets(true);
-
- persistCurrentScene();
-
- ClearUndoStack();
-
- mActiveScene = targetScene;
- mActiveSceneIndex = index;
- setDocument(pDocumentProxy, forceReload);
-
- updateSystemScaleFactor();
-
- mControlView->setScene(mActiveScene);
- mDisplayView->setScene(mActiveScene);
- mActiveScene->setBackgroundZoomFactor(mControlView->transform().m11());
- pDocumentProxy->setDefaultDocumentSize(mActiveScene->nominalSize());
- updatePageSizeState();
-
- adjustDisplayViews();
-
- UBSettings::settings()->setDarkBackground(mActiveScene->isDarkBackground());
- UBSettings::settings()->setCrossedBackground(mActiveScene->isCrossedBackground());
-
- freezeW3CWidgets(false);
- }
-
- selectionChanged();
-
- updateBackgroundActionsState(mActiveScene->isDarkBackground(), mActiveScene->isCrossedBackground());
- updateBackgroundState();
-
- if(documentChange)
- {
- UBGraphicsTextItem::lastUsedTextColor = QColor();
- }
-
-
- if (sceneChange)
- {
- emit activeSceneChanged();
- emit pageChanged();
- }
-}
-
-
-void UBBoardController::moveSceneToIndex(int source, int target)
-{
- if (selectedDocument())
- {
-
- persistCurrentScene();
-
- UBDocumentContainer::movePageToIndex(source, target);
-
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- UBMetadataDcSubsetAdaptor::persist(selectedDocument());
- mMovingSceneIndex = source;
- setActiveDocumentScene(target);
- mMovingSceneIndex = -1;
-
- }
-}
-
-void UBBoardController::ClearUndoStack()
-{
-// The code has been removed because it leads to a strange error and because the final goal has never been
-// reached on tests and sound a little bit strange.
-// Strange error: item->scene() crashes the application because item doesn't implement scene() method. I'm
-// not able to give all the steps to reproduce this error sistematically but is quite frequent (~ twice per utilisation hours)
-// strange goal: if item is on the undocommand, the item->scene() is null and the item is not on the deleted scene item list then
-// then it's deleted.
-
- // QSet<QGraphicsItem*> uniqueItems;
-// // go through all stack command
-// for(int i = 0; i < UBApplication::undoStack->count(); i++)
-// {
-
-// UBAbstractUndoCommand *abstractCmd = (UBAbstractUndoCommand*)UBApplication::undoStack->command(i);
-// if(abstractCmd->getType() != UBAbstractUndoCommand::undotype_GRAPHICITEM)
-// continue;
-
-// UBGraphicsItemUndoCommand *cmd = (UBGraphicsItemUndoCommand*)UBApplication::undoStack->command(i);
-
-// // go through all added and removed objects, for create list of unique objects
-// // grouped items will be deleted by groups, so we don't need do delete that items.
-// QSetIterator<QGraphicsItem*> itAdded(cmd->GetAddedList());
-// while (itAdded.hasNext())
-// {
-// QGraphicsItem* item = itAdded.next();
-// if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type()))
-// uniqueItems.insert(item);
-// }
-
-// QSetIterator<QGraphicsItem*> itRemoved(cmd->GetRemovedList());
-// while (itRemoved.hasNext())
-// {
-// QGraphicsItem* item = itRemoved.next();
-// if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type()))
-// uniqueItems.insert(item);
-// }
-// }
-
-// // go through all unique items, and check, ot on scene, or not.
-// // if not on scene, than item can be deleted
-
-// QSetIterator<QGraphicsItem*> itUniq(uniqueItems);
-// while (itUniq.hasNext())
-// {
-// QGraphicsItem* item = itUniq.next();
-// UBGraphicsScene *scene = NULL;
-// if (item->scene()) {
-// scene = dynamic_cast<UBGraphicsScene*>(item->scene());
-// }
-// if(!scene)
-// {
-// if (!mActiveScene->deleteItem(item))
-// delete item;
-// }
-// }
-
- // clear stack, and command list
- UBApplication::undoStack->clear();
-
-}
-
-void UBBoardController::adjustDisplayViews()
-{
- if (UBApplication::applicationController)
- {
- UBApplication::applicationController->adjustDisplayView();
- UBApplication::applicationController->adjustPreviousViews(mActiveSceneIndex, selectedDocument());
- }
-}
-
-
-void UBBoardController::changeBackground(bool isDark, bool isCrossed)
-{
- bool currentIsDark = mActiveScene->isDarkBackground();
- bool currentIsCrossed = mActiveScene->isCrossedBackground();
-
- if ((isDark != currentIsDark) || (currentIsCrossed != isCrossed))
- {
- UBSettings::settings()->setDarkBackground(isDark);
- UBSettings::settings()->setCrossedBackground(isCrossed);
-
- mActiveScene->setBackground(isDark, isCrossed);
-
- updateBackgroundState();
-
- emit backgroundChanged();
- }
-}
-
-void UBBoardController::boardViewResized(QResizeEvent* event)
-{
- Q_UNUSED(event);
-
- int innerMargin = UBSettings::boardMargin;
- int userHeight = mControlContainer->height() - (2 * innerMargin);
-
- mMessageWindow->move(innerMargin, innerMargin + userHeight - mMessageWindow->height());
- mMessageWindow->adjustSizeAndPosition();
-
- UBApplication::applicationController->initViewState(
- mControlView->horizontalScrollBar()->value(),
- mControlView->verticalScrollBar()->value());
-
- updateSystemScaleFactor();
-
- mControlView->centerOn(0,0);
-
- if (mDisplayView)
- mDisplayView->centerOn(0,0);
-
- mPaletteManager->containerResized();
-
- UBApplication::boardController->controlView()->scene()->moveMagnifier();
-
-}
-
-
-void UBBoardController::documentWillBeDeleted(UBDocumentProxy* pProxy)
-{
- if (selectedDocument() == pProxy)
- {
- if (!mIsClosing)
- setActiveDocumentScene(UBPersistenceManager::persistenceManager()->createDocument());
- }
-}
-
-
-void UBBoardController::showMessage(const QString& message, bool showSpinningWheel)
-{
- mMessageWindow->showMessage(message, showSpinningWheel);
-}
-
-
-void UBBoardController::hideMessage()
-{
- mMessageWindow->hideMessage();
-}
-
-
-void UBBoardController::setDisabled(bool disable)
-{
- mMainWindow->boardToolBar->setDisabled(disable);
- mControlView->setDisabled(disable);
-}
-
-
-void UBBoardController::selectionChanged()
-{
- updateActionStates();
- emit pageSelectionChanged(activeSceneIndex());
-}
-
-
-void UBBoardController::undoRedoStateChange(bool canUndo)
-{
- Q_UNUSED(canUndo);
-
- mMainWindow->actionUndo->setEnabled(UBApplication::undoStack->canUndo());
- mMainWindow->actionRedo->setEnabled(UBApplication::undoStack->canRedo());
-
- updateActionStates();
-}
-
-
-void UBBoardController::updateActionStates()
-{
- mMainWindow->actionBack->setEnabled(selectedDocument() && (mActiveSceneIndex > 0));
- mMainWindow->actionForward->setEnabled(selectedDocument() && (mActiveSceneIndex < selectedDocument()->pageCount() - 1));
- mMainWindow->actionErase->setEnabled(mActiveScene && !mActiveScene->isEmpty());
-}
-
-
-UBGraphicsScene* UBBoardController::activeScene() const
-{
- return mActiveScene;
-}
-
-
-int UBBoardController::activeSceneIndex() const
-{
- return mActiveSceneIndex;
-}
-
-
-void UBBoardController::documentSceneChanged(UBDocumentProxy* pDocumentProxy, int pIndex)
-{
- Q_UNUSED(pIndex);
-
- if(selectedDocument() == pDocumentProxy)
- {
- setActiveDocumentScene(mActiveSceneIndex);
- }
-}
-
-void UBBoardController::closing()
-{
- mIsClosing = true;
- ClearUndoStack();
- lastWindowClosed();
-}
-
-void UBBoardController::lastWindowClosed()
-{
- if (!mCleanupDone)
- {
- bool teacherGuideModified = false;
- if(UBApplication::boardController->paletteManager()->teacherGuideDockWidget())
- teacherGuideModified = UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified();
- if (selectedDocument()->pageCount() == 1 && (!mActiveScene || mActiveScene->isEmpty()) && !teacherGuideModified)
- {
- UBPersistenceManager::persistenceManager()->deleteDocument(selectedDocument());
- }
- else
- {
- persistCurrentScene();
- }
-
- UBPersistenceManager::persistenceManager()->purgeEmptyDocuments();
-
- mCleanupDone = true;
- }
-}
-
-
-
-void UBBoardController::setColorIndex(int pColorIndex)
-{
- UBDrawingController::drawingController()->setColorIndex(pColorIndex);
-
- if (UBDrawingController::drawingController()->stylusTool() != UBStylusTool::Marker &&
- UBDrawingController::drawingController()->stylusTool() != UBStylusTool::Line &&
- UBDrawingController::drawingController()->stylusTool() != UBStylusTool::Text &&
- UBDrawingController::drawingController()->stylusTool() != UBStylusTool::Selector)
- {
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Pen);
- }
-
- if (UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Pen ||
- UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Line ||
- UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Text ||
- UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Selector)
- {
- mPenColorOnDarkBackground = UBSettings::settings()->penColors(true).at(pColorIndex);
- mPenColorOnLightBackground = UBSettings::settings()->penColors(false).at(pColorIndex);
-
- if (UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Selector)
- {
- // If we are in mode board, then do that
- if(UBApplication::applicationController->displayMode() == UBApplicationController::Board)
- {
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Pen);
- mMainWindow->actionPen->setChecked(true);
- }
- }
-
- emit penColorChanged();
- }
- else if (UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Marker)
- {
- mMarkerColorOnDarkBackground = UBSettings::settings()->markerColors(true).at(pColorIndex);
- mMarkerColorOnLightBackground = UBSettings::settings()->markerColors(false).at(pColorIndex);
- }
-}
-
-void UBBoardController::colorPaletteChanged()
-{
- mPenColorOnDarkBackground = UBSettings::settings()->penColor(true);
- mPenColorOnLightBackground = UBSettings::settings()->penColor(false);
- mMarkerColorOnDarkBackground = UBSettings::settings()->markerColor(true);
- mMarkerColorOnLightBackground = UBSettings::settings()->markerColor(false);
-}
-
-
-qreal UBBoardController::currentZoom()
-{
- if (mControlView)
- return mControlView->viewportTransform().m11() / mSystemScaleFactor;
- else
- return 1.0;
-}
-
-void UBBoardController::removeTool(UBToolWidget* toolWidget)
-{
- toolWidget->hide();
-
- delete toolWidget;
-}
-
-void UBBoardController::hide()
-{
- UBApplication::mainWindow->actionLibrary->setChecked(false);
-}
-
-void UBBoardController::show()
-{
- UBApplication::mainWindow->actionLibrary->setChecked(false);
-}
-
-void UBBoardController::persistCurrentScene()
-{
- if(UBPersistenceManager::persistenceManager()
- && selectedDocument() && mActiveScene && mActiveSceneIndex != mDeletingSceneIndex
- && (mActiveSceneIndex >= 0) && mActiveSceneIndex != mMovingSceneIndex
- && (mActiveScene->isModified() || (UBApplication::boardController->paletteManager()->teacherGuideDockWidget() && UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified())))
- {
- UBPersistenceManager::persistenceManager()->persistDocumentScene(selectedDocument(), mActiveScene, mActiveSceneIndex);
- updatePage(mActiveSceneIndex);
- }
-}
-
-void UBBoardController::updateSystemScaleFactor()
-{
- qreal newScaleFactor = 1.0;
-
- if (mActiveScene)
- {
- QSize pageNominalSize = mActiveScene->nominalSize();
- //we're going to keep scale factor untouched if the size is custom
- QMap<DocumentSizeRatio::Enum, QSize> sizesMap = UBSettings::settings()->documentSizes;
- if(pageNominalSize == sizesMap.value(DocumentSizeRatio::Ratio16_9) || pageNominalSize == sizesMap.value(DocumentSizeRatio::Ratio4_3))
- {
- QSize controlSize = controlViewport();
-
- qreal hFactor = ((qreal)controlSize.width()) / ((qreal)pageNominalSize.width());
- qreal vFactor = ((qreal)controlSize.height()) / ((qreal)pageNominalSize.height());
-
- newScaleFactor = qMin(hFactor, vFactor);
- }
- }
-
- if (mSystemScaleFactor != newScaleFactor)
- {
- mSystemScaleFactor = newScaleFactor;
- emit systemScaleFactorChanged(newScaleFactor);
- }
-
- UBGraphicsScene::SceneViewState viewState = mActiveScene->viewState();
-
- QTransform scalingTransform;
-
- qreal scaleFactor = viewState.zoomFactor * mSystemScaleFactor;
- scalingTransform.scale(scaleFactor, scaleFactor);
-
- mControlView->setTransform(scalingTransform);
- mControlView->horizontalScrollBar()->setValue(viewState.horizontalPosition);
- mControlView->verticalScrollBar()->setValue(viewState.verticalPostition);
- mActiveScene->setBackgroundZoomFactor(mControlView->transform().m11());}
-
-
-void UBBoardController::setWidePageSize(bool checked)
-{
- Q_UNUSED(checked);
- QSize newSize = UBSettings::settings()->documentSizes.value(DocumentSizeRatio::Ratio16_9);
-
- if (mActiveScene->nominalSize() != newSize)
- {
- UBPageSizeUndoCommand* uc = new UBPageSizeUndoCommand(mActiveScene, mActiveScene->nominalSize(), newSize);
- UBApplication::undoStack->push(uc);
-
- setPageSize(newSize);
- }
-}
-
-
-void UBBoardController::setRegularPageSize(bool checked)
-{
- Q_UNUSED(checked);
- QSize newSize = UBSettings::settings()->documentSizes.value(DocumentSizeRatio::Ratio4_3);
-
- if (mActiveScene->nominalSize() != newSize)
- {
- UBPageSizeUndoCommand* uc = new UBPageSizeUndoCommand(mActiveScene, mActiveScene->nominalSize(), newSize);
- UBApplication::undoStack->push(uc);
-
- setPageSize(newSize);
- }
-}
-
-
-void UBBoardController::setPageSize(QSize newSize)
-{
- if (mActiveScene->nominalSize() != newSize)
- {
- mActiveScene->setNominalSize(newSize);
-
- saveViewState();
-
- updateSystemScaleFactor();
- updatePageSizeState();
- adjustDisplayViews();
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
-
- UBSettings::settings()->pageSize->set(newSize);
- }
-}
-
-void UBBoardController::notifyCache(bool visible)
-{
- if(visible)
- {
- emit cacheEnabled();
- }
- else
- {
- emit cacheDisabled();
- }
- mCacheWidgetIsEnabled = visible;
-}
-
-void UBBoardController::updatePageSizeState()
-{
- if (mActiveScene->nominalSize() == UBSettings::settings()->documentSizes.value(DocumentSizeRatio::Ratio16_9))
- {
- mMainWindow->actionWidePageSize->setChecked(true);
- }
- else if(mActiveScene->nominalSize() == UBSettings::settings()->documentSizes.value(DocumentSizeRatio::Ratio4_3))
- {
- mMainWindow->actionRegularPageSize->setChecked(true);
- }
- else
- {
- mMainWindow->actionCustomPageSize->setChecked(true);
- }
-}
-
-
-void UBBoardController::saveViewState()
-{
- if (mActiveScene)
- {
- mActiveScene->setViewState(UBGraphicsScene::SceneViewState(currentZoom(),
- mControlView->horizontalScrollBar()->value(),
- mControlView->verticalScrollBar()->value()));
- }
-}
-
-
-void UBBoardController::updateBackgroundState()
-{
- //adjust background style
- QString newBackgroundStyle;
-
- if (mActiveScene && mActiveScene->isDarkBackground())
- {
- newBackgroundStyle ="QWidget {background-color: #0E0E0E}";
- }
- else
- {
- newBackgroundStyle ="QWidget {background-color: #F1F1F1}";
- }
-}
-
-void UBBoardController::stylusToolChanged(int tool)
-{
- if (UBPlatformUtils::hasVirtualKeyboard() && mPaletteManager->mKeyboardPalette)
- {
- UBStylusTool::Enum eTool = (UBStylusTool::Enum)tool;
- if(eTool != UBStylusTool::Selector && eTool != UBStylusTool::Text)
- {
- if(mPaletteManager->mKeyboardPalette->m_isVisible)
- UBApplication::mainWindow->actionVirtualKeyboard->activate(QAction::Trigger);
- }
- }
-
- updateBackgroundState();
-}
-
-
-QUrl UBBoardController::expandWidgetToTempDir(const QByteArray& pZipedData, const QString& ext)
-{
- QUrl widgetUrl;
- QTemporaryFile tmp;
-
- if (tmp.open())
- {
- tmp.write(pZipedData);
- tmp.flush();
- tmp.close();
-
- QString tmpDir = UBFileSystemUtils::createTempDir() + "." + ext;
-
- if (UBFileSystemUtils::expandZipToDir(tmp, tmpDir))
- {
- widgetUrl = QUrl::fromLocalFile(tmpDir);
- }
- }
-
- return widgetUrl;
-}
-
-
-void UBBoardController::grabScene(const QRectF& pSceneRect)
-{
- if (mActiveScene)
- {
- QImage image(pSceneRect.width(), pSceneRect.height(), QImage::Format_ARGB32);
- image.fill(Qt::transparent);
-
- QRectF targetRect(0, 0, pSceneRect.width(), pSceneRect.height());
- QPainter painter(&image);
- painter.setRenderHint(QPainter::SmoothPixmapTransform);
- painter.setRenderHint(QPainter::Antialiasing);
-
- mActiveScene->setRenderingContext(UBGraphicsScene::NonScreen);
- mActiveScene->setRenderingQuality(UBItem::RenderingQualityHigh);
-
- mActiveScene->render(&painter, targetRect, pSceneRect);
-
- mActiveScene->setRenderingContext(UBGraphicsScene::Screen);
- mActiveScene->setRenderingQuality(UBItem::RenderingQualityNormal);
-
- mPaletteManager->addItem(QPixmap::fromImage(image));
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- }
-}
-
-UBGraphicsMediaItem* UBBoardController::addVideo(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos, bool bUseSource)
-{
- QUuid uuid = QUuid::createUuid();
- QUrl concreteUrl = pSourceUrl;
-
- // media file is not in document folder yet
- if (!bUseSource)
- {
- QString destFile;
- bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(),
- pSourceUrl.toLocalFile(),
- UBPersistenceManager::videoDirectory,
- uuid,
- destFile);
- if (!b)
- {
- showMessage(tr("Add file operation failed: file copying error"));
- return NULL;
- }
- concreteUrl = QUrl::fromLocalFile(destFile);
- }// else we just use source Url.
-
-
- UBGraphicsMediaItem* vi = mActiveScene->addMedia(concreteUrl, startPlay, pos);
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
-
- if (vi) {
- vi->setUuid(uuid);
- vi->setSourceUrl(pSourceUrl);
- }
-
- return vi;
-
-}
-
-UBGraphicsMediaItem* UBBoardController::addAudio(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos, bool bUseSource)
-{
- QUuid uuid = QUuid::createUuid();
- QUrl concreteUrl = pSourceUrl;
-
- // media file is not in document folder yet
- if (!bUseSource)
- {
- QString destFile;
- bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(),
- pSourceUrl.toLocalFile(),
- UBPersistenceManager::audioDirectory,
- uuid,
- destFile);
- if (!b)
- {
- showMessage(tr("Add file operation failed: file copying error"));
- return NULL;
- }
- concreteUrl = QUrl::fromLocalFile(destFile);
- }// else we just use source Url.
-
- UBGraphicsMediaItem* ai = mActiveScene->addMedia(concreteUrl, startPlay, pos);
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
-
- if (ai){
- ai->setUuid(uuid);
- ai->setSourceUrl(pSourceUrl);
- }
-
- return ai;
-
-}
-
-UBGraphicsWidgetItem *UBBoardController::addW3cWidget(const QUrl &pUrl, const QPointF &pos)
-{
- UBGraphicsWidgetItem* w3cWidgetItem = 0;
-
- QUuid uuid = QUuid::createUuid();
-
- QString destPath;
- if (!UBPersistenceManager::persistenceManager()->addGraphicsWidgteToDocument(selectedDocument(), pUrl.toLocalFile(), uuid, destPath))
- return NULL;
- QUrl newUrl = QUrl::fromLocalFile(destPath);
-
- w3cWidgetItem = mActiveScene->addW3CWidget(newUrl, pos);
-
- if (w3cWidgetItem) {
- w3cWidgetItem->setUuid(uuid);
- w3cWidgetItem->setOwnFolder(newUrl);
- w3cWidgetItem->setSourceUrl(pUrl);
-
- QString struuid = UBStringUtils::toCanonicalUuid(uuid);
- QString snapshotPath = selectedDocument()->persistencePath() + "/" + UBPersistenceManager::widgetDirectory + "/" + struuid + ".png";
- w3cWidgetItem->setSnapshotPath(QUrl::fromLocalFile(snapshotPath));
- UBGraphicsWidgetItem *tmpItem = dynamic_cast<UBGraphicsWidgetItem*>(w3cWidgetItem);
- if (tmpItem && tmpItem->scene())
- tmpItem->takeSnapshot().save(snapshotPath, "PNG");
-
- }
-
- return w3cWidgetItem;
-}
-
-void UBBoardController::cut()
-{
- //---------------------------------------------------------//
-
- QList<QGraphicsItem*> selectedItems;
- foreach(QGraphicsItem* gi, mActiveScene->selectedItems())
- selectedItems << gi;
-
- //---------------------------------------------------------//
-
- QList<UBItem*> selected;
- foreach(QGraphicsItem* gi, selectedItems)
- {
- gi->setSelected(false);
-
- UBItem* ubItem = dynamic_cast<UBItem*>(gi);
- UBGraphicsItem *ubGi = dynamic_cast<UBGraphicsItem*>(gi);
-
- if (ubItem && ubGi && !mActiveScene->tools().contains(gi))
- {
- selected << ubItem->deepCopy();
- ubGi->remove();
- }
- }
-
- //---------------------------------------------------------//
-
- if (selected.size() > 0)
- {
- QClipboard *clipboard = QApplication::clipboard();
-
- UBMimeDataGraphicsItem* mimeGi = new UBMimeDataGraphicsItem(selected);
-
- mimeGi->setData(UBApplication::mimeTypeUniboardPageItem, QByteArray());
- clipboard->setMimeData(mimeGi);
-
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- }
-
- //---------------------------------------------------------//
-}
-
-
-void UBBoardController::copy()
-{
- QList<UBItem*> selected;
-
- foreach(QGraphicsItem* gi, mActiveScene->selectedItems())
- {
- UBItem* ubItem = dynamic_cast<UBItem*>(gi);
-
- if (ubItem && !mActiveScene->tools().contains(gi))
- {
- UBItem *itemCopy = ubItem->deepCopy();
- if (itemCopy)
- selected << itemCopy;
- }
- }
-
- if (selected.size() > 0)
- {
- QClipboard *clipboard = QApplication::clipboard();
-
- UBMimeDataGraphicsItem* mimeGi = new UBMimeDataGraphicsItem(selected);
-
- mimeGi->setData(UBApplication::mimeTypeUniboardPageItem, QByteArray());
- clipboard->setMimeData(mimeGi);
-
- }
-}
-
-
-void UBBoardController::paste()
-{
- QClipboard *clipboard = QApplication::clipboard();
- QPointF pos(0, 0);
- processMimeData(clipboard->mimeData(), pos);
-
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
-}
-
-
-void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPointF& pPos)
-{
- if (pMimeData->hasFormat(UBApplication::mimeTypeUniboardPage))
- {
- const UBMimeData* mimeData = qobject_cast <const UBMimeData*>(pMimeData);
-
- if (mimeData)
- {
- int previousActiveSceneIndex = activeSceneIndex();
- int previousPageCount = selectedDocument()->pageCount();
-
- foreach (UBMimeDataItem sourceItem, mimeData->items())
- addScene(sourceItem.documentProxy(), sourceItem.sceneIndex(), true);
-
- if (selectedDocument()->pageCount() < previousPageCount + mimeData->items().count())
- setActiveDocumentScene(previousActiveSceneIndex);
- else
- setActiveDocumentScene(previousActiveSceneIndex + 1);
-
- return;
- }
- }
-
- if (pMimeData->hasFormat(UBApplication::mimeTypeUniboardPageItem))
- {
- const UBMimeDataGraphicsItem* mimeData = qobject_cast <const UBMimeDataGraphicsItem*>(pMimeData);
-
- if (mimeData)
- {
- foreach(UBItem* item, mimeData->items())
- {
- QGraphicsItem* pItem = dynamic_cast<QGraphicsItem*>(item);
- if(NULL != pItem){
- duplicateItem(item);
- }
- }
-
- return;
- }
- }
-
- if(pMimeData->hasHtml())
- {
- QString qsHtml = pMimeData->html();
- QString url = UBApplication::urlFromHtml(qsHtml);
-
- if("" != url)
- {
- downloadURL(url, QString(), pPos);
- return;
- }
- }
-
- if (pMimeData->hasUrls())
- {
- QList<QUrl> urls = pMimeData->urls();
-
- int index = 0;
-
- const UBFeaturesMimeData *internalMimeData = qobject_cast<const UBFeaturesMimeData*>(pMimeData);
- bool internalData = false;
- if (internalMimeData) {
- internalData = true;
- }
-
- foreach(const QUrl url, urls){
- QPointF pos(pPos + QPointF(index * 15, index * 15));
-
- downloadURL(url, QString(), pos, QSize(), false, internalData);
- index++;
- }
-
- return;
- }
-
- if (pMimeData->hasImage())
- {
- QImage img = qvariant_cast<QImage> (pMimeData->imageData());
- QPixmap pix = QPixmap::fromImage(img);
-
- // validate that the image is really an image, webkit does not fill properly the image mime data
- if (pix.width() != 0 && pix.height() != 0)
- {
- mActiveScene->addPixmap(pix, NULL, pPos, 1.);
- return;
- }
- }
-
- if (pMimeData->hasText())
- {
- if("" != pMimeData->text()){
- // Sometimes, it is possible to have an URL as text. we check here if it is the case
- QString qsTmp = pMimeData->text().remove(QRegExp("[\\0]"));
- if(qsTmp.startsWith("http")){
- downloadURL(QUrl(qsTmp), QString(), pPos);
- }
- else{
- mActiveScene->addTextHtml(pMimeData->html(), pPos);
- }
- }
- else{
-#ifdef Q_WS_MACX
- // With Safari, in 95% of the drops, the mime datas are hidden in Apple Web Archive pasteboard type.
- // This is due to the way Safari is working so we have to dig into the pasteboard in order to retrieve
- // the data.
- QString qsUrl = UBPlatformUtils::urlFromClipboard();
- if("" != qsUrl){
- // We finally got the url of the dropped ressource! Let's import it!
- downloadURL(qsUrl, qsUrl, pPos);
- return;
- }
-#endif
- }
- }
-}
-
-
-void UBBoardController::togglePodcast(bool checked)
-{
- if (UBPodcastController::instance())
- UBPodcastController::instance()->toggleRecordingPalette(checked);
-}
-
-void UBBoardController::moveGraphicsWidgetToControlView(UBGraphicsWidgetItem* graphicsWidget)
-{
- mActiveScene->setURStackEnable(false);
- UBGraphicsItem *toolW3C = duplicateItem(dynamic_cast<UBItem *>(graphicsWidget));
- UBGraphicsWidgetItem *copyedGraphicsWidget = NULL;
-
- if (UBGraphicsWidgetItem::Type == toolW3C->type())
- copyedGraphicsWidget = static_cast<UBGraphicsWidgetItem *>(toolW3C);
-
- UBToolWidget *toolWidget = new UBToolWidget(copyedGraphicsWidget, mControlView);
-
- graphicsWidget->remove(false);
- mActiveScene->addItemToDeletion(graphicsWidget);
-
- mActiveScene->setURStackEnable(true);
-
- QPoint controlViewPos = mControlView->mapFromScene(graphicsWidget->sceneBoundingRect().center());
- toolWidget->centerOn(mControlView->mapTo(mControlContainer, controlViewPos));
- toolWidget->show();
-}
-
-
-void UBBoardController::moveToolWidgetToScene(UBToolWidget* toolWidget)
-{
- UBGraphicsWidgetItem *widgetToScene = toolWidget->toolWidget();
-
- widgetToScene->resetTransform();
-
- QPoint mainWindowCenter = toolWidget->mapTo(mMainWindow, QPoint(toolWidget->width(), toolWidget->height()) / 2);
- QPoint controlViewCenter = mControlView->mapFrom(mMainWindow, mainWindowCenter);
- QPointF scenePos = mControlView->mapToScene(controlViewCenter);
-
- mActiveScene->addGraphicsWidget(widgetToScene, scenePos);
-
- toolWidget->remove();
-}
-
-
-void UBBoardController::updateBackgroundActionsState(bool isDark, bool isCrossed)
-{
- if (isDark && !isCrossed)
- mMainWindow->actionPlainDarkBackground->setChecked(true);
- else if (isDark && isCrossed)
- mMainWindow->actionCrossedDarkBackground->setChecked(true);
- else if (!isDark && isCrossed)
- mMainWindow->actionCrossedLightBackground->setChecked(true);
- else
- mMainWindow->actionPlainLightBackground->setChecked(true);
-}
-
-
-void UBBoardController::addItem()
-{
- QString defaultPath = UBSettings::settings()->lastImportToLibraryPath->get().toString();
-
- QString extensions;
- foreach(QString ext, UBSettings::imageFileExtensions)
- {
- extensions += " *.";
- extensions += ext;
- }
-
- QString filename = QFileDialog::getOpenFileName(mControlContainer, tr("Add Item"),
- defaultPath,
- tr("All Supported (%1)").arg(extensions), NULL, QFileDialog::DontUseNativeDialog);
-
- if (filename.length() > 0)
- {
- mPaletteManager->addItem(QUrl::fromLocalFile(filename));
- QFileInfo source(filename);
- UBSettings::settings()->lastImportToLibraryPath->set(QVariant(source.absolutePath()));
- }
-}
-
-void UBBoardController::importPage()
-{
- int pageCount = selectedDocument()->pageCount();
- if (UBApplication::documentController->addFileToDocument(selectedDocument()))
- {
- setActiveDocumentScene(selectedDocument(), pageCount, true);
- }
-}
-
-void UBBoardController::notifyPageChanged()
-{
- emit pageChanged();
-}
-
-void UBBoardController::onDownloadModalFinished()
-{
-
-}
-
-void UBBoardController::displayMetaData(QMap<QString, QString> metadatas)
-{
- emit displayMetadata(metadatas);
-}
-
-void UBBoardController::freezeW3CWidgets(bool freeze)
-{
- if (mActiveSceneIndex >= 0)
- {
- QList<QGraphicsItem *> list = UBApplication::boardController->activeScene()->getFastAccessItems();
- foreach(QGraphicsItem *item, list)
- {
- freezeW3CWidget(item, freeze);
- }
- }
-}
-
-void UBBoardController::freezeW3CWidget(QGraphicsItem *item, bool freeze)
-{
- if(item->type() == UBGraphicsW3CWidgetItem::Type)
- {
- UBGraphicsW3CWidgetItem* item_casted = dynamic_cast<UBGraphicsW3CWidgetItem*>(item);
- if (0 == item_casted)
- return;
-
- if (freeze) {
- item_casted->load(QUrl(UBGraphicsW3CWidgetItem::freezedWidgetFilePath()));
- } else
- item_casted->loadMainHtml();
- }
-}
+
+
+
+#include "UBBoardController.h"
+
+#include <QtGui>
+#include <QtWebKit>
+#include <QDir>
+
+#include "frameworks/UBFileSystemUtils.h"
+#include "frameworks/UBPlatformUtils.h"
+
+#include "core/UBApplication.h"
+#include "core/UBSettings.h"
+#include "core/UBSetting.h"
+#include "core/UBPersistenceManager.h"
+#include "core/UBApplicationController.h"
+#include "core/UBDocumentManager.h"
+#include "core/UBMimeData.h"
+#include "core/UBDownloadManager.h"
+#include "core/UBDisplayManager.h"
+
+#include "network/UBHttpGet.h"
+
+#include "gui/UBMessageWindow.h"
+#include "gui/UBResources.h"
+#include "gui/UBToolbarButtonGroup.h"
+#include "gui/UBMainWindow.h"
+#include "gui/UBToolWidget.h"
+#include "gui/UBKeyboardPalette.h"
+#include "gui/UBMagnifer.h"
+#include "gui/UBDockPaletteWidget.h"
+#include "gui/UBDockTeacherGuideWidget.h"
+#include "gui/UBTeacherGuideWidget.h"
+
+#include "domain/UBGraphicsPixmapItem.h"
+#include "domain/UBGraphicsItemUndoCommand.h"
+#include "domain/UBGraphicsProxyWidget.h"
+#include "domain/UBGraphicsSvgItem.h"
+#include "domain/UBGraphicsWidgetItem.h"
+#include "domain/UBGraphicsMediaItem.h"
+#include "domain/UBGraphicsPDFItem.h"
+#include "domain/UBGraphicsTextItem.h"
+#include "domain/UBPageSizeUndoCommand.h"
+#include "domain/UBGraphicsGroupContainerItem.h"
+#include "domain/UBItem.h"
+#include "board/UBFeaturesController.h"
+#include "domain/UBGraphicsStrokesGroup.h"
+
+#include "gui/UBFeaturesWidget.h"
+
+#include "tools/UBToolsManager.h"
+
+#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
+
+#include "board/UBDrawingController.h"
+#include "board/UBBoardView.h"
+
+#include "podcast/UBPodcastController.h"
+
+#include "adaptors/UBMetadataDcSubsetAdaptor.h"
+#include "adaptors/UBSvgSubsetAdaptor.h"
+
+#include "UBBoardPaletteManager.h"
+
+#include "core/UBSettings.h"
+
+#include "core/memcheck.h"
+
+#include "web/UBWebController.h"
+
+UBBoardController::UBBoardController(UBMainWindow* mainWindow)
+ : UBDocumentContainer(mainWindow->centralWidget())
+ , mMainWindow(mainWindow)
+ , mActiveScene(0)
+ , mActiveSceneIndex(-1)
+ , mPaletteManager(0)
+ , mSoftwareUpdateDialog(0)
+ , mMessageWindow(0)
+ , mControlView(0)
+ , mDisplayView(0)
+ , mControlContainer(0)
+ , mControlLayout(0)
+ , mZoomFactor(1.0)
+ , mIsClosing(false)
+ , mSystemScaleFactor(1.0)
+ , mCleanupDone(false)
+ , mCacheWidgetIsEnabled(false)
+ , mDeletingSceneIndex(-1)
+ , mMovingSceneIndex(-1)
+ , mActionGroupText(tr("Group"))
+ , mActionUngroupText(tr("Ungroup"))
+{
+ mZoomFactor = UBSettings::settings()->boardZoomFactor->get().toDouble();
+
+ int penColorIndex = UBSettings::settings()->penColorIndex();
+ int markerColorIndex = UBSettings::settings()->markerColorIndex();
+
+ mPenColorOnDarkBackground = UBSettings::settings()->penColors(true).at(penColorIndex);
+ mPenColorOnLightBackground = UBSettings::settings()->penColors(false).at(penColorIndex);
+ mMarkerColorOnDarkBackground = UBSettings::settings()->markerColors(true).at(markerColorIndex);
+ mMarkerColorOnLightBackground = UBSettings::settings()->markerColors(false).at(markerColorIndex);
+
+ QDesktopWidget* desktop = UBApplication::desktop();
+ int dpiCommon = (desktop->physicalDpiX() + desktop->physicalDpiY()) / 2;
+ int sPixelsPerMillimeter = qRound(dpiCommon / UBGeometryUtils::inchSize);
+ UBSettings::settings()->crossSize = 10*sPixelsPerMillimeter;
+}
+
+
+void UBBoardController::init()
+{
+ setupViews();
+ setupToolbar();
+
+ connect(UBApplication::undoStack, SIGNAL(canUndoChanged(bool))
+ , this, SLOT(undoRedoStateChange(bool)));
+
+ connect(UBApplication::undoStack, SIGNAL(canRedoChanged (bool))
+ , this, SLOT(undoRedoStateChange(bool)));
+
+ connect(UBDrawingController::drawingController(), SIGNAL(stylusToolChanged(int))
+ , this, SLOT(setToolCursor(int)));
+
+ connect(UBDrawingController::drawingController(), SIGNAL(stylusToolChanged(int))
+ , this, SLOT(stylusToolChanged(int)));
+
+ connect(UBApplication::app(), SIGNAL(lastWindowClosed())
+ , this, SLOT(lastWindowClosed()));
+
+ connect(UBDownloadManager::downloadManager(), SIGNAL(downloadModalFinished()), this, SLOT(onDownloadModalFinished()));
+ connect(UBDownloadManager::downloadManager(), SIGNAL(addDownloadedFileToBoard(bool,QUrl,QUrl,QString,QByteArray,QPointF,QSize,bool,bool)), this, SLOT(downloadFinished(bool,QUrl,QUrl,QString,QByteArray,QPointF,QSize,bool,bool)));
+
+ UBDocumentProxy* doc = UBPersistenceManager::persistenceManager()->createNewDocument();
+
+ setActiveDocumentScene(doc);
+
+ connect(UBApplication::mainWindow->actionGroupItems, SIGNAL(triggered()), this, SLOT(groupButtonClicked()));
+
+ undoRedoStateChange(true);
+}
+
+
+UBBoardController::~UBBoardController()
+{
+ delete mDisplayView;
+}
+
+
+int UBBoardController::currentPage()
+{
+ if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
+ return mActiveSceneIndex;
+ return mActiveSceneIndex + 1;
+}
+
+void UBBoardController::setupViews()
+{
+ mControlContainer = new QWidget(mMainWindow->centralWidget());
+
+ mControlLayout = new QHBoxLayout(mControlContainer);
+ mControlLayout->setContentsMargins(0, 0, 0, 0);
+
+ mControlView = new UBBoardView(this, mControlContainer, true, false);
+ mControlView->setInteractive(true);
+ mControlView->setMouseTracking(true);
+
+ mControlView->grabGesture(Qt::SwipeGesture);
+
+ mControlView->setTransformationAnchor(QGraphicsView::NoAnchor);
+
+ mControlLayout->addWidget(mControlView);
+ mControlContainer->setObjectName("ubBoardControlContainer");
+ mMainWindow->addBoardWidget(mControlContainer);
+
+ connect(mControlView, SIGNAL(resized(QResizeEvent*)), this, SLOT(boardViewResized(QResizeEvent*)));
+
+ // TODO UB 4.x Optimization do we have to create the display view even if their is
+ // only 1 screen
+ //
+ mDisplayView = new UBBoardView(this, UBItemLayerType::FixedBackground, UBItemLayerType::Tool, 0);
+ mDisplayView->setInteractive(false);
+ mDisplayView->setTransformationAnchor(QGraphicsView::NoAnchor);
+
+ mMessageWindow = new UBMessageWindow(mControlView);
+ mMessageWindow->hide();
+
+ mPaletteManager = new UBBoardPaletteManager(mControlContainer, this);
+ connect(this, SIGNAL(activeSceneChanged()), mPaletteManager, SLOT(activeSceneChanged()));
+
+}
+
+
+void UBBoardController::setupLayout()
+{
+ if(mPaletteManager)
+ mPaletteManager->setupLayout();
+}
+
+
+void UBBoardController::setBoxing(QRect displayRect)
+{
+ if (displayRect.isNull())
+ {
+ mControlLayout->setContentsMargins(0, 0, 0, 0);
+ return;
+ }
+
+ qreal controlWidth = (qreal)mMainWindow->centralWidget()->width();
+ qreal controlHeight = (qreal)mMainWindow->centralWidget()->height();
+ qreal displayWidth = (qreal)displayRect.width();
+ qreal displayHeight = (qreal)displayRect.height();
+
+ qreal displayRatio = displayWidth / displayHeight;
+ qreal controlRatio = controlWidth / controlHeight;
+
+ if (displayRatio < controlRatio)
+ {
+ // Pillarboxing
+ int boxWidth = (controlWidth - (displayWidth * (controlHeight / displayHeight))) / 2;
+ mControlLayout->setContentsMargins(boxWidth, 0, boxWidth, 0);
+ }
+ else if (displayRatio > controlRatio)
+ {
+ // Letterboxing
+ int boxHeight = (controlHeight - (displayHeight * (controlWidth / displayWidth))) / 2;
+ mControlLayout->setContentsMargins(0, boxHeight, 0, boxHeight);
+ }
+ else
+ {
+ // No boxing
+ mControlLayout->setContentsMargins(0, 0, 0, 0);
+ }
+}
+
+
+QSize UBBoardController::displayViewport()
+{
+ return mDisplayView->geometry().size();
+}
+
+
+QSize UBBoardController::controlViewport()
+{
+ return mControlView->geometry().size();
+}
+
+
+QRectF UBBoardController::controlGeometry()
+{
+ return mControlView->geometry();
+}
+
+
+void UBBoardController::setupToolbar()
+{
+ UBSettings *settings = UBSettings::settings();
+
+ // Setup color choice widget
+ QList<QAction *> colorActions;
+ colorActions.append(mMainWindow->actionColor0);
+ colorActions.append(mMainWindow->actionColor1);
+ colorActions.append(mMainWindow->actionColor2);
+ colorActions.append(mMainWindow->actionColor3);
+
+ UBToolbarButtonGroup *colorChoice =
+ new UBToolbarButtonGroup(mMainWindow->boardToolBar, colorActions);
+
+ mMainWindow->boardToolBar->insertWidget(mMainWindow->actionBackgrounds, colorChoice);
+
+ connect(settings->appToolBarDisplayText, SIGNAL(changed(QVariant)), colorChoice, SLOT(displayText(QVariant)));
+ connect(colorChoice, SIGNAL(activated(int)), this, SLOT(setColorIndex(int)));
+ connect(UBDrawingController::drawingController(), SIGNAL(colorIndexChanged(int)), colorChoice, SLOT(setCurrentIndex(int)));
+ connect(UBDrawingController::drawingController(), SIGNAL(colorPaletteChanged()), colorChoice, SLOT(colorPaletteChanged()));
+ connect(UBDrawingController::drawingController(), SIGNAL(colorPaletteChanged()), this, SLOT(colorPaletteChanged()));
+
+ colorChoice->displayText(QVariant(settings->appToolBarDisplayText->get().toBool()));
+ colorChoice->colorPaletteChanged();
+
+ // Setup line width choice widget
+ QList<QAction *> lineWidthActions;
+ lineWidthActions.append(mMainWindow->actionLineSmall);
+ lineWidthActions.append(mMainWindow->actionLineMedium);
+ lineWidthActions.append(mMainWindow->actionLineLarge);
+
+ UBToolbarButtonGroup *lineWidthChoice =
+ new UBToolbarButtonGroup(mMainWindow->boardToolBar, lineWidthActions);
+
+ connect(settings->appToolBarDisplayText, SIGNAL(changed(QVariant)), lineWidthChoice, SLOT(displayText(QVariant)));
+
+ connect(lineWidthChoice, SIGNAL(activated(int))
+ , UBDrawingController::drawingController(), SLOT(setLineWidthIndex(int)));
+
+ connect(UBDrawingController::drawingController(), SIGNAL(lineWidthIndexChanged(int))
+ , lineWidthChoice, SLOT(setCurrentIndex(int)));
+
+ lineWidthChoice->displayText(QVariant(settings->appToolBarDisplayText->get().toBool()));
+
+ mMainWindow->boardToolBar->insertWidget(mMainWindow->actionBackgrounds, lineWidthChoice);
+
+ //-----------------------------------------------------------//
+ // Setup eraser width choice widget
+
+ QList<QAction *> eraserWidthActions;
+ eraserWidthActions.append(mMainWindow->actionEraserSmall);
+ eraserWidthActions.append(mMainWindow->actionEraserMedium);
+ eraserWidthActions.append(mMainWindow->actionEraserLarge);
+
+ UBToolbarButtonGroup *eraserWidthChoice =
+ new UBToolbarButtonGroup(mMainWindow->boardToolBar, eraserWidthActions);
+
+ mMainWindow->boardToolBar->insertWidget(mMainWindow->actionBackgrounds, eraserWidthChoice);
+
+ connect(settings->appToolBarDisplayText, SIGNAL(changed(QVariant)), eraserWidthChoice, SLOT(displayText(QVariant)));
+ connect(eraserWidthChoice, SIGNAL(activated(int)), UBDrawingController::drawingController(), SLOT(setEraserWidthIndex(int)));
+
+ eraserWidthChoice->displayText(QVariant(settings->appToolBarDisplayText->get().toBool()));
+ eraserWidthChoice->setCurrentIndex(settings->eraserWidthIndex());
+
+ mMainWindow->boardToolBar->insertSeparator(mMainWindow->actionBackgrounds);
+
+ //-----------------------------------------------------------//
+
+ UBApplication::app()->insertSpaceToToolbarBeforeAction(mMainWindow->boardToolBar, mMainWindow->actionBoard);
+ UBApplication::app()->insertSpaceToToolbarBeforeAction(mMainWindow->tutorialToolBar, mMainWindow->actionBoard);
+
+ UBApplication::app()->decorateActionMenu(mMainWindow->actionMenu);
+
+ mMainWindow->actionBoard->setVisible(false);
+
+ mMainWindow->webToolBar->hide();
+ mMainWindow->documentToolBar->hide();
+ mMainWindow->tutorialToolBar->hide();
+
+ connectToolbar();
+ initToolbarTexts();
+}
+
+
+void UBBoardController::setToolCursor(int tool)
+{
+ if (mActiveScene)
+ {
+ mActiveScene->setToolCursor(tool);
+ }
+
+ mControlView->setToolCursor(tool);
+}
+
+
+void UBBoardController::connectToolbar()
+{
+ connect(mMainWindow->actionAdd, SIGNAL(triggered()), this, SLOT(addItem()));
+ connect(mMainWindow->actionNewPage, SIGNAL(triggered()), this, SLOT(addScene()));
+ connect(mMainWindow->actionDuplicatePage, SIGNAL(triggered()), this, SLOT(duplicateScene()));
+
+ connect(mMainWindow->actionClearPage, SIGNAL(triggered()), this, SLOT(clearScene()));
+ connect(mMainWindow->actionEraseItems, SIGNAL(triggered()), this, SLOT(clearSceneItems()));
+ connect(mMainWindow->actionEraseAnnotations, SIGNAL(triggered()), this, SLOT(clearSceneAnnotation()));
+ connect(mMainWindow->actionEraseBackground,SIGNAL(triggered()),this,SLOT(clearSceneBackground()));
+
+ connect(mMainWindow->actionUndo, SIGNAL(triggered()), UBApplication::undoStack, SLOT(undo()));
+ connect(mMainWindow->actionRedo, SIGNAL(triggered()), UBApplication::undoStack, SLOT(redo()));
+ connect(mMainWindow->actionRedo, SIGNAL(triggered()), this, SLOT(startScript()));
+ connect(mMainWindow->actionBack, SIGNAL( triggered()), this, SLOT(previousScene()));
+ connect(mMainWindow->actionForward, SIGNAL(triggered()), this, SLOT(nextScene()));
+ connect(mMainWindow->actionSleep, SIGNAL(triggered()), this, SLOT(stopScript()));
+ connect(mMainWindow->actionSleep, SIGNAL(triggered()), this, SLOT(blackout()));
+ connect(mMainWindow->actionVirtualKeyboard, SIGNAL(triggered(bool)), this, SLOT(showKeyboard(bool)));
+ connect(mMainWindow->actionImportPage, SIGNAL(triggered()), this, SLOT(importPage()));
+}
+
+void UBBoardController::startScript()
+{
+ freezeW3CWidgets(false);
+}
+
+void UBBoardController::stopScript()
+{
+ freezeW3CWidgets(true);
+}
+
+void UBBoardController::initToolbarTexts()
+{
+ QList<QAction*> allToolbarActions;
+
+ allToolbarActions << mMainWindow->boardToolBar->actions();
+ allToolbarActions << mMainWindow->webToolBar->actions();
+ allToolbarActions << mMainWindow->documentToolBar->actions();
+
+ foreach(QAction* action, allToolbarActions)
+ {
+ QString nominalText = action->text();
+ QString shortText = truncate(nominalText, 48);
+ QPair<QString, QString> texts(nominalText, shortText);
+
+ mActionTexts.insert(action, texts);
+ }
+}
+
+
+void UBBoardController::setToolbarTexts()
+{
+ bool highResolution = mMainWindow->width() > 1024;
+ QSize iconSize;
+
+ if (highResolution)
+ iconSize = QSize(48, 32);
+ else
+ iconSize = QSize(32, 32);
+
+ mMainWindow->boardToolBar->setIconSize(iconSize);
+ mMainWindow->webToolBar->setIconSize(iconSize);
+ mMainWindow->documentToolBar->setIconSize(iconSize);
+
+ foreach(QAction* action, mActionTexts.keys())
+ {
+ QPair<QString, QString> texts = mActionTexts.value(action);
+
+ if (highResolution)
+ action->setText(texts.first);
+ else
+ {
+ action->setText(texts.second);
+ }
+
+ action->setToolTip(texts.first);
+ }
+}
+
+
+QString UBBoardController::truncate(QString text, int maxWidth)
+{
+ QFontMetricsF fontMetrics(mMainWindow->font());
+ return fontMetrics.elidedText(text, Qt::ElideRight, maxWidth);
+}
+
+
+void UBBoardController::stylusToolDoubleClicked(int tool)
+{
+ if (tool == UBStylusTool::ZoomIn || tool == UBStylusTool::ZoomOut)
+ {
+ zoomRestore();
+ }
+ else if (tool == UBStylusTool::Hand)
+ {
+ centerRestore();
+ }
+}
+
+void UBBoardController::addScene()
+{
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ persistCurrentScene();
+
+ UBDocumentContainer::addPage(mActiveSceneIndex + 1);
+
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+
+ setActiveDocumentScene(mActiveSceneIndex + 1);
+ QApplication::restoreOverrideCursor();
+}
+
+void UBBoardController::addScene(UBGraphicsScene* scene, bool replaceActiveIfEmpty)
+{
+ if (scene)
+ {
+ if (scene->document() && (scene->document() != selectedDocument()))
+ {
+ foreach(QUrl relativeFile, scene->relativeDependencies())
+ {
+ QString source = scene->document()->persistencePath() + "/" + relativeFile.toString();
+ QString target = selectedDocument()->persistencePath() + "/" + relativeFile.toString();
+
+ QFileInfo fi(target);
+ QDir d = fi.dir();
+
+ d.mkpath(d.absolutePath());
+ QFile::copy(source, target);
+ }
+ }
+
+ if (replaceActiveIfEmpty && mActiveScene->isEmpty())
+ {
+ setActiveDocumentScene(mActiveSceneIndex);
+ }
+ else
+ {
+ persistCurrentScene();
+ UBPersistenceManager::persistenceManager()->insertDocumentSceneAt(selectedDocument(), scene, mActiveSceneIndex + 1);
+ setActiveDocumentScene(mActiveSceneIndex + 1);
+ }
+
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ }
+}
+
+
+void UBBoardController::addScene(UBDocumentProxy* proxy, int sceneIndex, bool replaceActiveIfEmpty)
+{
+ UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->loadDocumentScene(proxy, sceneIndex);
+
+ if (scene)
+ {
+ addScene(scene, replaceActiveIfEmpty);
+ }
+}
+
+void UBBoardController::duplicateScene(int nIndex)
+{
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ persistCurrentScene();
+
+ QList<int> scIndexes;
+ scIndexes << nIndex;
+ duplicatePages(scIndexes);
+ insertThumbPage(nIndex);
+ emit documentThumbnailsUpdated(this);
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+
+ setActiveDocumentScene(nIndex + 1);
+ QApplication::restoreOverrideCursor();
+
+ emit pageChanged();
+}
+
+void UBBoardController::duplicateScene()
+{
+ if (UBApplication::applicationController->displayMode() != UBApplicationController::Board)
+ return;
+ duplicateScene(mActiveSceneIndex);
+}
+
+UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item, bool bAsync)
+{
+ if (!item)
+ return NULL;
+
+ UBGraphicsItem *retItem = NULL;
+
+ mLastCreatedItem = NULL;
+
+ QUrl sourceUrl;
+ QByteArray pData;
+
+ //common parameters for any item
+ QPointF itemPos;
+ QSizeF itemSize;
+
+ QGraphicsItem *commonItem = dynamic_cast<QGraphicsItem*>(item);
+ if (commonItem)
+ {
+ qreal shifting = UBSettings::settings()->objectFrameWidth;
+ itemPos = commonItem->pos() + QPointF(shifting,shifting);
+ itemSize = commonItem->boundingRect().size();
+ commonItem->setSelected(false);
+ }
+
+ UBMimeType::Enum itemMimeType;
+
+ QString srcFile = item->sourceUrl().toLocalFile();
+ if (srcFile.isEmpty())
+ srcFile = item->sourceUrl().toString();
+
+ QString contentTypeHeader;
+ if (!srcFile.isEmpty())
+ contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(srcFile);
+
+ if(NULL != qgraphicsitem_cast<UBGraphicsGroupContainerItem*>(commonItem))
+ itemMimeType = UBMimeType::Group;
+ else
+ itemMimeType = UBFileSystemUtils::mimeTypeFromString(contentTypeHeader);
+
+ switch(static_cast<int>(itemMimeType))
+ {
+ case UBMimeType::AppleWidget:
+ case UBMimeType::W3CWidget:
+ {
+ UBGraphicsWidgetItem *witem = dynamic_cast<UBGraphicsWidgetItem*>(item);
+ if (witem)
+ {
+ sourceUrl = witem->getOwnFolder();
+ }
+ }break;
+
+ case UBMimeType::Video:
+ case UBMimeType::Audio:
+ {
+ UBGraphicsMediaItem *mitem = dynamic_cast<UBGraphicsMediaItem*>(item);
+ if (mitem)
+ {
+ sourceUrl = mitem->mediaFileUrl();
+ if (bAsync)
+ {
+ downloadURL(sourceUrl, srcFile, itemPos, QSize(itemSize.width(), itemSize.height()), false, false);
+ return NULL; // async operation
+ }
+ }
+ }break;
+
+ case UBMimeType::VectorImage:
+ {
+ UBGraphicsSvgItem *viitem = dynamic_cast<UBGraphicsSvgItem*>(item);
+ if (viitem)
+ {
+ pData = viitem->fileData();
+ sourceUrl = item->sourceUrl();
+ }
+ }break;
+
+ case UBMimeType::RasterImage:
+ {
+ UBGraphicsPixmapItem *pixitem = dynamic_cast<UBGraphicsPixmapItem*>(item);
+ if (pixitem)
+ {
+ QBuffer buffer(&pData);
+ buffer.open(QIODevice::WriteOnly);
+ QString format = UBFileSystemUtils::extension(item->sourceUrl().toLocalFile());
+ pixitem->pixmap().save(&buffer, format.toLatin1());
+ }
+ }break;
+
+ case UBMimeType::Group:
+ {
+ UBGraphicsGroupContainerItem* groupItem = dynamic_cast<UBGraphicsGroupContainerItem*>(item);
+ UBGraphicsGroupContainerItem* duplicatedGroup = NULL;
+
+ QList<QGraphicsItem*> duplicatedItems;
+ QList<QGraphicsItem*> children = groupItem->childItems();
+
+ mActiveScene->setURStackEnable(false);
+ foreach(QGraphicsItem* pIt, children){
+ UBItem* pItem = dynamic_cast<UBItem*>(pIt);
+ if(pItem){ // we diong sync duplication of all childs.
+ QGraphicsItem * itemToGroup = dynamic_cast<QGraphicsItem *>(duplicateItem(pItem, false));
+ if (itemToGroup)
+ duplicatedItems.append(itemToGroup);
+ }
+ }
+ duplicatedGroup = mActiveScene->createGroup(duplicatedItems);
+ duplicatedGroup->setTransform(groupItem->transform());
+ groupItem->setSelected(false);
+
+ retItem = dynamic_cast<UBGraphicsItem *>(duplicatedGroup);
+
+ QGraphicsItem * itemToAdd = dynamic_cast<QGraphicsItem *>(retItem);
+ if (itemToAdd)
+ {
+ mActiveScene->addItem(itemToAdd);
+ itemToAdd->setSelected(true);
+ }
+ mActiveScene->setURStackEnable(true);
+ }break;
+
+ case UBMimeType::UNKNOWN:
+ {
+ QGraphicsItem *gitem = dynamic_cast<QGraphicsItem*>(item->deepCopy());
+ if (gitem)
+ {
+ mActiveScene->addItem(gitem);
+ gitem->setPos(itemPos);
+ mLastCreatedItem = gitem;
+ gitem->setSelected(true);
+ }
+ retItem = dynamic_cast<UBGraphicsItem *>(gitem);
+ }break;
+ }
+
+ if (retItem)
+ {
+ QGraphicsItem *graphicsRetItem = dynamic_cast<QGraphicsItem *>(retItem);
+ if (mActiveScene->isURStackIsEnabled()) { //should be deleted after scene own undo stack implemented
+ UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(mActiveScene, 0, graphicsRetItem);
+ UBApplication::undoStack->push(uc);
+ }
+ return retItem;
+ }
+
+ UBItem *createdItem = downloadFinished(true, sourceUrl, srcFile, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()));
+ if (createdItem)
+ {
+ createdItem->setSourceUrl(item->sourceUrl());
+ item->copyItemParameters(createdItem);
+
+ QGraphicsItem *createdGitem = dynamic_cast<QGraphicsItem*>(createdItem);
+ if (createdGitem)
+ createdGitem->setPos(itemPos);
+ mLastCreatedItem = dynamic_cast<QGraphicsItem*>(createdItem);
+ mLastCreatedItem->setSelected(true);
+
+ retItem = dynamic_cast<UBGraphicsItem *>(createdItem);
+ }
+
+ return retItem;
+}
+
+void UBBoardController::deleteScene(int nIndex)
+{
+ if (selectedDocument()->pageCount()>=2)
+ {
+ mDeletingSceneIndex = nIndex;
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ persistCurrentScene();
+ showMessage(tr("Delete page %1 from document").arg(nIndex+1), true);
+
+ QList<int> scIndexes;
+ scIndexes << nIndex;
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+
+ if (nIndex >= pageCount())
+ nIndex = pageCount()-1;
+ setActiveDocumentScene(nIndex-1);
+ deletePages(scIndexes);
+ showMessage(tr("Page %1 deleted").arg(nIndex));
+ QApplication::restoreOverrideCursor();
+ mDeletingSceneIndex = -1;
+ }
+}
+
+void UBBoardController::regenerateThumbnails()
+{
+ mDocumentNavigator->generateThumbnails(this);
+}
+
+void UBBoardController::clearScene()
+{
+ if (mActiveScene)
+ {
+ freezeW3CWidgets(true);
+ mActiveScene->clearContent(UBGraphicsScene::clearItemsAndAnnotations);
+ updateActionStates();
+ }
+}
+
+
+void UBBoardController::clearSceneItems()
+{
+ if (mActiveScene)
+ {
+ freezeW3CWidgets(true);
+ mActiveScene->clearContent(UBGraphicsScene::clearItems);
+ updateActionStates();
+ }
+}
+
+
+void UBBoardController::clearSceneAnnotation()
+{
+ if (mActiveScene)
+ {
+ mActiveScene->clearContent(UBGraphicsScene::clearAnnotations);
+ updateActionStates();
+ }
+}
+
+void UBBoardController::clearSceneBackground()
+{
+ if (mActiveScene)
+ {
+ mActiveScene->clearContent(UBGraphicsScene::clearBackground);
+ updateActionStates();
+ }
+}
+
+void UBBoardController::showDocumentsDialog()
+{
+ if (selectedDocument())
+ persistCurrentScene();
+
+ UBApplication::mainWindow->actionLibrary->setChecked(false);
+
+}
+
+void UBBoardController::libraryDialogClosed(int ret)
+{
+ Q_UNUSED(ret);
+
+ mMainWindow->actionLibrary->setChecked(false);
+}
+
+
+void UBBoardController::blackout()
+{
+ UBApplication::applicationController->blackout();
+}
+
+
+void UBBoardController::showKeyboard(bool show)
+{
+ if(show)
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ mPaletteManager->showVirtualKeyboard(show);
+}
+
+
+void UBBoardController::zoomIn(QPointF scenePoint)
+{
+ if (mControlView->transform().m11() > UB_MAX_ZOOM)
+ {
+ qApp->beep();
+ return;
+ }
+ zoom(mZoomFactor, scenePoint);
+}
+
+
+void UBBoardController::zoomOut(QPointF scenePoint)
+{
+ if ((mControlView->horizontalScrollBar()->maximum() == 0) && (mControlView->verticalScrollBar()->maximum() == 0))
+ {
+ // Do not zoom out if we reached the maximum
+ qApp->beep();
+ return;
+ }
+
+ qreal newZoomFactor = 1 / mZoomFactor;
+
+ zoom(newZoomFactor, scenePoint);
+}
+
+
+void UBBoardController::zoomRestore()
+{
+ QTransform tr;
+
+ tr.scale(mSystemScaleFactor, mSystemScaleFactor);
+ mControlView->setTransform(tr);
+
+ centerRestore();
+
+ foreach(QGraphicsItem *gi, mActiveScene->selectedItems ())
+ {
+ //force item to redraw the frame (for the anti scale calculation)
+ gi->setSelected(false);
+ gi->setSelected(true);
+ }
+
+ emit zoomChanged(1.0);
+}
+
+
+void UBBoardController::centerRestore()
+{
+ centerOn(QPointF(0,0));
+}
+
+
+void UBBoardController::centerOn(QPointF scenePoint)
+{
+ mControlView->centerOn(scenePoint);
+ UBApplication::applicationController->adjustDisplayView();
+}
+
+
+void UBBoardController::zoom(const qreal ratio, QPointF scenePoint)
+{
+
+ QPointF viewCenter = mControlView->mapToScene(QRect(0, 0, mControlView->width(), mControlView->height()).center());
+ QPointF offset = scenePoint - viewCenter;
+ QPointF scalledOffset = offset / ratio;
+
+ qreal currentZoom = ratio * mControlView->viewportTransform().m11() / mSystemScaleFactor;
+
+ qreal usedRatio = ratio;
+ if (currentZoom > UB_MAX_ZOOM)
+ {
+ currentZoom = UB_MAX_ZOOM;
+ usedRatio = currentZoom * mSystemScaleFactor / mControlView->viewportTransform().m11();
+ }
+
+ mControlView->scale(usedRatio, usedRatio);
+
+ QPointF newCenter = scenePoint - scalledOffset;
+
+ mControlView->centerOn(newCenter);
+
+ emit zoomChanged(currentZoom);
+ UBApplication::applicationController->adjustDisplayView();
+
+ emit controlViewportChanged();
+ mActiveScene->setBackgroundZoomFactor(mControlView->transform().m11());
+}
+
+
+void UBBoardController::handScroll(qreal dx, qreal dy)
+{
+ mControlView->translate(dx, dy);
+
+ UBApplication::applicationController->adjustDisplayView();
+
+ emit controlViewportChanged();
+}
+
+
+void UBBoardController::previousScene()
+{
+ if (mActiveSceneIndex > 0)
+ {
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ persistCurrentScene();
+ setActiveDocumentScene(mActiveSceneIndex - 1);
+ QApplication::restoreOverrideCursor();
+ }
+
+ updateActionStates();
+ emit pageChanged();
+}
+
+
+void UBBoardController::nextScene()
+{
+ if (mActiveSceneIndex < selectedDocument()->pageCount() - 1)
+ {
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ persistCurrentScene();
+ setActiveDocumentScene(mActiveSceneIndex + 1);
+ QApplication::restoreOverrideCursor();
+ }
+
+ updateActionStates();
+ emit pageChanged();
+}
+
+
+void UBBoardController::firstScene()
+{
+ if (mActiveSceneIndex > 0)
+ {
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ persistCurrentScene();
+ setActiveDocumentScene(0);
+ QApplication::restoreOverrideCursor();
+ }
+
+ updateActionStates();
+ emit pageChanged();
+}
+
+
+void UBBoardController::lastScene()
+{
+ if (mActiveSceneIndex < selectedDocument()->pageCount() - 1)
+ {
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ persistCurrentScene();
+ setActiveDocumentScene(selectedDocument()->pageCount() - 1);
+ QApplication::restoreOverrideCursor();
+ }
+
+ updateActionStates();
+ emit pageChanged();
+}
+
+void UBBoardController::groupButtonClicked()
+{
+ QAction *groupAction = UBApplication::mainWindow->actionGroupItems;
+ QList<QGraphicsItem*> selItems = activeScene()->selectedItems();
+ if (!selItems.count()) {
+ qDebug() << "Got grouping request when there is no any selected item on the scene";
+ return;
+ }
+
+ if (groupAction->text() == mActionGroupText) { //The only way to get information from item, considering using smth else
+ UBGraphicsGroupContainerItem *groupItem = activeScene()->createGroup(selItems);
+ groupItem->setSelected(true);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+
+ }
+ else if (groupAction->text() == mActionUngroupText) {
+ //Considering one selected item and it's a group
+ if (selItems.count() > 1)
+ {
+ qDebug() << "can't make sense of ungrouping more then one item. Grouping action should be performed for that purpose";
+ return;
+ }
+ UBGraphicsGroupContainerItem *currentGroup = dynamic_cast<UBGraphicsGroupContainerItem*>(selItems.first());
+ if (currentGroup) {
+ currentGroup->Delegate()->setAction(0);
+ currentGroup->destroy();
+ }
+ }
+}
+
+void UBBoardController::downloadURL(const QUrl& url, QString contentSourceUrl, const QPointF& pPos, const QSize& pSize, bool isBackground, bool internalData)
+{
+ qDebug() << "something has been dropped on the board! Url is: " << url.toString();
+ QString sUrl = url.toString();
+
+ QGraphicsItem *oldBackgroundObject = NULL;
+ if (isBackground)
+ oldBackgroundObject = mActiveScene->backgroundObject();
+
+ if(sUrl.startsWith("uniboardTool://"))
+ {
+ downloadFinished(true, url, QUrl(), "application/vnd.mnemis-uniboard-tool", QByteArray(), pPos, pSize, isBackground);
+ }
+ else if (sUrl.startsWith("file://") || sUrl.startsWith("/"))
+ {
+ QUrl formedUrl = sUrl.startsWith("file://") ? url : QUrl::fromLocalFile(sUrl);
+ QString fileName = formedUrl.toLocalFile();
+ QString contentType = UBFileSystemUtils::mimeTypeFromFileName(fileName);
+
+ bool shouldLoadFileData =
+ contentType.startsWith("image")
+ || contentType.startsWith("application/widget")
+ || contentType.startsWith("application/vnd.apple-widget")
+ || contentType.startsWith("internal/link");
+
+ if (isBackground)
+ mActiveScene->setURStackEnable(false);
+
+ if (shouldLoadFileData)
+ {
+ QFile file(fileName);
+ file.open(QIODevice::ReadOnly);
+ downloadFinished(true, formedUrl, QUrl(), contentType, file.readAll(), pPos, pSize, true, isBackground, internalData);
+ file.close();
+ }
+ else
+ {
+ // media items should be copyed in separate thread
+
+ sDownloadFileDesc desc;
+ desc.modal = false;
+ desc.srcUrl = sUrl;
+ desc.originalSrcUrl = contentSourceUrl;
+ desc.currentSize = 0;
+ desc.name = QFileInfo(url.toString()).fileName();
+ desc.totalSize = 0; // The total size will be retrieved during the download
+ desc.pos = pPos;
+ desc.size = pSize;
+ desc.isBackground = isBackground;
+
+ UBDownloadManager::downloadManager()->addFileToDownload(desc);
+ }
+ }
+ else
+ {
+ QString urlString = url.toString();
+ int parametersStringPosition = urlString.indexOf("?");
+ if(parametersStringPosition != -1)
+ urlString = urlString.left(parametersStringPosition);
+
+ // When we fall there, it means that we are dropping something from the web to the board
+ sDownloadFileDesc desc;
+ desc.modal = true;
+ desc.srcUrl = urlString;
+ desc.currentSize = 0;
+ desc.name = QFileInfo(urlString).fileName();
+ desc.totalSize = 0; // The total size will be retrieved during the download
+ desc.pos = pPos;
+ desc.size = pSize;
+ desc.isBackground = isBackground;
+
+ UBDownloadManager::downloadManager()->addFileToDownload(desc);
+ }
+
+ if (isBackground && oldBackgroundObject != mActiveScene->backgroundObject())
+ {
+ mActiveScene->setURStackEnable(true);
+ if (mActiveScene->isURStackIsEnabled()) { //should be deleted after scene own undo stack implemented
+ UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(mActiveScene, oldBackgroundObject, mActiveScene->backgroundObject());
+ UBApplication::undoStack->push(uc);
+ }
+ }
+}
+
+void UBBoardController::addLinkToPage(QString sourceUrl, QSize size, QPointF pos, const QString &embedCode)
+{
+ QString widgetUrl;
+ QString lSourceUrl = sourceUrl.replace("\n","").replace("\r","");
+ UBMimeType::Enum itemMimeType = UBFileSystemUtils::mimeTypeFromUrl(lSourceUrl);
+
+ if(UBMimeType::Flash == itemMimeType){
+ QString tmpDirPath = UBFileSystemUtils::createTempDir();
+ widgetUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapperInDir(sourceUrl, QDir(tmpDirPath),UBFileSystemUtils::mimeTypeFromFileName(lSourceUrl),QSize(300,150),QUuid::createUuid().toString());
+
+ }
+ else{
+ QString html;
+ if (!embedCode.isEmpty())
+ html = embedCode;
+ else if(UBMimeType::Video == itemMimeType)
+ html = " <video src=\"" + lSourceUrl + "\" controls=\"controls\">\n";
+ else if(UBMimeType::Audio == itemMimeType)
+ html = " <audio src=\"" + lSourceUrl + "\" controls=\"controls\">\n";
+ else if(UBMimeType::RasterImage == itemMimeType || UBMimeType::VectorImage == itemMimeType)
+ html = " <img src=\"" + lSourceUrl + "\">\n";
+ else if(QUrl(lSourceUrl).isValid())
+ {
+ html = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\r\n";
+ html += "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n";
+ html += " <head>\r\n";
+ html += " <meta http-equiv=\"refresh\" content=\"0; " + lSourceUrl + "\">\r\n";
+ html += " </head>\r\n";
+ html += " <body>\r\n";
+ html += " Redirect to target...\r\n";
+ html += " </body>\r\n";
+ html += "</html>\r\n";
+ }
+
+ QString tmpDirPath = UBFileSystemUtils::createTempDir();
+ widgetUrl = UBGraphicsW3CWidgetItem::createHtmlWrapperInDir(html, QDir(tmpDirPath), size, QUuid::createUuid().toString());
+ }
+
+ if (widgetUrl.length() > 0)
+ {
+ UBGraphicsWidgetItem *widgetItem = mActiveScene->addW3CWidget(QUrl::fromLocalFile(widgetUrl), pos);
+ widgetItem->setUuid(QUuid::createUuid());
+ widgetItem->setSourceUrl(QUrl::fromLocalFile(widgetUrl));
+
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+}
+
+UBItem *UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isSyncOperation, bool isBackground, bool internalData)
+{
+ Q_ASSERT(pSuccess);
+
+ QString mimeType = pContentTypeHeader;
+
+ // In some cases "image/jpeg;charset=" is retourned by the drag-n-drop. That is
+ // why we will check if an ; exists and take the first part (the standard allows this kind of mimetype)
+ if(mimeType.isEmpty())
+ mimeType = UBFileSystemUtils::mimeTypeFromFileName(sourceUrl.toString());
+
+
+ int position=mimeType.indexOf(";");
+ if(position != -1)
+ mimeType=mimeType.left(position);
+
+ UBMimeType::Enum itemMimeType = UBFileSystemUtils::mimeTypeFromString(mimeType);
+
+ if(itemMimeType == UBMimeType::UNKNOWN)
+ itemMimeType = UBFileSystemUtils::mimeTypeFromString(UBFileSystemUtils::mimeTypeFromFileName(sourceUrl.toString()));
+
+ if (!pSuccess)
+ {
+ showMessage(tr("Downloading content %1 failed").arg(sourceUrl.toString()));
+ return NULL;
+ }
+
+
+ mActiveScene->deselectAllItems();
+
+ if (!sourceUrl.toString().startsWith("file://") && !sourceUrl.toString().startsWith("uniboardTool://"))
+ showMessage(tr("Download finished"));
+
+
+ if (UBMimeType::RasterImage == itemMimeType)
+ {
+ QPixmap pix;
+ if(pData.length() == 0){
+ pix.load(sourceUrl.toLocalFile());
+ }
+ else{
+ QImage img;
+ img.loadFromData(pData);
+ pix = QPixmap::fromImage(img);
+ }
+
+ UBGraphicsPixmapItem* pixItem = mActiveScene->addPixmap(pix, NULL, pPos, 1.);
+ pixItem->setSourceUrl(sourceUrl);
+
+ if (isBackground)
+ {
+ mActiveScene->setAsBackgroundObject(pixItem, true);
+ }
+ else
+ {
+ mActiveScene->scaleToFitDocumentSize(pixItem, true, UBSettings::objectInControlViewMargin);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ pixItem->setSelected(true);
+ }
+
+ return pixItem;
+ }
+ else if (UBMimeType::VectorImage == itemMimeType)
+ {
+ qDebug() << "accepting mime type" << mimeType << "as vecto image";
+
+ UBGraphicsSvgItem* svgItem = mActiveScene->addSvg(sourceUrl, pPos, pData);
+ svgItem->setSourceUrl(sourceUrl);
+
+ if (isBackground)
+ mActiveScene->setAsBackgroundObject(svgItem);
+ else
+ {
+ mActiveScene->scaleToFitDocumentSize(svgItem, true, UBSettings::objectInControlViewMargin);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ svgItem->setSelected(true);
+ }
+
+ return svgItem;
+ }
+ else if (UBMimeType::AppleWidget == itemMimeType) //mime type invented by us :-(
+ {
+ qDebug() << "accepting mime type" << mimeType << "as Apple widget";
+
+ QUrl widgetUrl = sourceUrl;
+
+ if (pData.length() > 0)
+ {
+ widgetUrl = expandWidgetToTempDir(pData, "wdgt");
+ }
+
+ UBGraphicsWidgetItem* appleWidgetItem = mActiveScene->addAppleWidget(widgetUrl, pPos);
+
+ appleWidgetItem->setSourceUrl(sourceUrl);
+
+ if (isBackground)
+ {
+ mActiveScene->setAsBackgroundObject(appleWidgetItem);
+ }
+ else
+ {
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+
+ return appleWidgetItem;
+ }
+ else if (UBMimeType::W3CWidget == itemMimeType)
+ {
+ QUrl widgetUrl = sourceUrl;
+
+ if (pData.length() > 0)
+ widgetUrl = expandWidgetToTempDir(pData);
+
+ UBGraphicsWidgetItem *w3cWidgetItem = addW3cWidget(widgetUrl, pPos);
+
+ if (isBackground)
+ mActiveScene->setAsBackgroundObject(w3cWidgetItem);
+ else
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+
+ return w3cWidgetItem;
+ }
+ else if (UBMimeType::Video == itemMimeType)
+ {
+ qDebug() << "accepting mime type" << mimeType << "as video";
+
+ UBGraphicsMediaItem *mediaVideoItem = 0;
+ QUuid uuid = QUuid::createUuid();
+ if (pData.length() > 0)
+ {
+ QString destFile;
+ bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(),
+ sourceUrl.toString(),
+ UBPersistenceManager::videoDirectory,
+ uuid,
+ destFile,
+ &pData);
+ if (!b)
+ {
+ showMessage(tr("Add file operation failed: file copying error"));
+ return NULL;
+ }
+
+ QUrl url = QUrl::fromLocalFile(destFile);
+
+ mediaVideoItem = mActiveScene->addMedia(url, false, pPos);
+ }
+ else
+ {
+ qDebug() << sourceUrl.toString();
+ mediaVideoItem = addVideo(sourceUrl, false, pPos, isSyncOperation);
+ }
+
+ if(mediaVideoItem){
+ if (contentUrl.isEmpty())
+ mediaVideoItem->setSourceUrl(sourceUrl);
+ else
+ mediaVideoItem->setSourceUrl(contentUrl);
+ mediaVideoItem->setUuid(uuid);
+ connect(this, SIGNAL(activeSceneChanged()), mediaVideoItem, SLOT(activeSceneChanged()));
+ }
+
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+
+ return mediaVideoItem;
+ }
+ else if (UBMimeType::Audio == itemMimeType)
+ {
+ qDebug() << "accepting mime type" << mimeType << "as audio";
+
+ UBGraphicsMediaItem *audioMediaItem = 0;
+
+ QUuid uuid = QUuid::createUuid();
+ if (pData.length() > 0)
+ {
+ QString destFile;
+ bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(),
+ sourceUrl.toString(),
+ UBPersistenceManager::audioDirectory,
+ uuid,
+ destFile,
+ &pData);
+ if (!b)
+ {
+ showMessage(tr("Add file operation failed: file copying error"));
+ return NULL;
+ }
+
+ QUrl url = QUrl::fromLocalFile(destFile);
+
+ audioMediaItem = mActiveScene->addMedia(url, false, pPos);
+ }
+ else
+ {
+ audioMediaItem = addAudio(sourceUrl, false, pPos, isSyncOperation);
+ }
+
+ if(audioMediaItem){
+ if (contentUrl.isEmpty())
+ audioMediaItem->setSourceUrl(sourceUrl);
+ else
+ audioMediaItem->setSourceUrl(contentUrl);
+ audioMediaItem->setUuid(uuid);
+ connect(this, SIGNAL(activeSceneChanged()), audioMediaItem, SLOT(activeSceneChanged()));
+ }
+
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+
+ return audioMediaItem;
+ }
+ else if (UBMimeType::Flash == itemMimeType)
+ {
+
+ qDebug() << "accepting mime type" << mimeType << "as flash";
+
+ QString sUrl = sourceUrl.toString();
+
+ if (sUrl.startsWith("file://") || sUrl.startsWith("/"))
+ {
+ sUrl = sourceUrl.toLocalFile();
+ }
+
+ QTemporaryFile* tempFile = 0;
+
+ if (!pData.isNull())
+ {
+ tempFile = new QTemporaryFile("XXXXXX.swf");
+ if (tempFile->open())
+ {
+ tempFile->write(pData);
+ tempFile->close();
+ QFileInfo fi(*tempFile);
+ sUrl = fi.absoluteFilePath();
+ }
+ }
+
+ QSize size;
+
+ if (pSize.height() > 0 && pSize.width() > 0)
+ size = pSize;
+ else
+ size = mActiveScene->nominalSize() * .8;
+
+ Q_UNUSED(internalData)
+
+ QString widgetUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapper(sUrl, mimeType, size);
+ emit npapiWidgetCreated(widgetUrl);
+
+ if (widgetUrl.length() > 0)
+ {
+ UBGraphicsWidgetItem *widgetItem = mActiveScene->addW3CWidget(QUrl::fromLocalFile(widgetUrl), pPos);
+ widgetItem->setUuid(QUuid::createUuid());
+ widgetItem->setSourceUrl(QUrl::fromLocalFile(widgetUrl));
+ widgetItem->resize(size);
+
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+
+ return widgetItem;
+ }
+
+ if (tempFile)
+ delete tempFile;
+
+ }
+ else if (UBMimeType::PDF == itemMimeType)
+ {
+ qDebug() << "accepting mime type" << mimeType << "as PDF";
+ qDebug() << "pdf data length: " << pData.size();
+ qDebug() << "sourceurl : " + sourceUrl.toString();
+ int result = 0;
+ if(!sourceUrl.isEmpty()){
+ QStringList fileNames;
+ fileNames << sourceUrl.toLocalFile();
+ result = UBDocumentManager::documentManager()->addFilesToDocument(selectedDocument(), fileNames);
+ }
+ else if(pData.size()){
+ QTemporaryFile pdfFile("XXXXXX.pdf");
+ if (pdfFile.open())
+ {
+ pdfFile.write(pData);
+ QStringList fileNames;
+ fileNames << pdfFile.fileName();
+ result = UBDocumentManager::documentManager()->addFilesToDocument(selectedDocument(), fileNames);
+ pdfFile.close();
+ }
+ }
+
+ if (result){
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ }
+ }
+ else if (UBMimeType::UniboardTool == itemMimeType)
+ {
+ qDebug() << "accepting mime type" << mimeType << "as Uniboard Tool";
+
+ if (sourceUrl.toString() == UBToolsManager::manager()->compass.id)
+ {
+ mActiveScene->addCompass(pPos);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+ else if (sourceUrl.toString() == UBToolsManager::manager()->ruler.id)
+ {
+ mActiveScene->addRuler(pPos);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+ else if (sourceUrl.toString() == UBToolsManager::manager()->protractor.id)
+ {
+ mActiveScene->addProtractor(pPos);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+ else if (sourceUrl.toString() == UBToolsManager::manager()->triangle.id)
+ {
+ mActiveScene->addTriangle(pPos);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+ else if (sourceUrl.toString() == UBToolsManager::manager()->cache.id)
+ {
+ mActiveScene->addCache();
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+ else if (sourceUrl.toString() == UBToolsManager::manager()->magnifier.id)
+ {
+ UBMagnifierParams params;
+ params.x = controlContainer()->geometry().width() / 2;
+ params.y = controlContainer()->geometry().height() / 2;
+ params.zoom = 2;
+ params.sizePercentFromScene = 20;
+ mActiveScene->addMagnifier(params);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+ else if (sourceUrl.toString() == UBToolsManager::manager()->mask.id)
+ {
+ mActiveScene->addMask(pPos);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+ else if (sourceUrl.toString() == UBToolsManager::manager()->aristo.id)
+ {
+ mActiveScene->addAristo(pPos);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+ else
+ {
+ showMessage(tr("Unknown tool type %1").arg(sourceUrl.toString()));
+ }
+ }
+ else if (sourceUrl.toString().contains("edumedia-sciences.com"))
+ {
+ qDebug() << "accepting url " << sourceUrl.toString() << "as eduMedia content";
+
+ QTemporaryFile eduMediaZipFile("XXXXXX.edumedia");
+ if (eduMediaZipFile.open())
+ {
+ eduMediaZipFile.write(pData);
+ eduMediaZipFile.close();
+
+ QString tempDir = UBFileSystemUtils::createTempDir("uniboard-edumedia");
+
+ UBFileSystemUtils::expandZipToDir(eduMediaZipFile, tempDir);
+
+ QDir appDir(tempDir);
+
+ foreach(QString subDirName, appDir.entryList(QDir::AllDirs))
+ {
+ QDir subDir(tempDir + "/" + subDirName + "/contents");
+
+ foreach(QString fileName, subDir.entryList(QDir::Files))
+ {
+ if (fileName.toLower().endsWith(".swf"))
+ {
+ QString swfFile = tempDir + "/" + subDirName + "/contents/" + fileName;
+
+ QSize size;
+
+ if (pSize.height() > 0 && pSize.width() > 0)
+ size = pSize;
+ else
+ size = mActiveScene->nominalSize() * .8;
+
+ QString widgetUrl = UBGraphicsW3CWidgetItem::createNPAPIWrapper(swfFile, "application/x-shockwave-flash", size);
+
+ if (widgetUrl.length() > 0)
+ {
+ UBGraphicsWidgetItem *widgetItem = mActiveScene->addW3CWidget(QUrl::fromLocalFile(widgetUrl), pPos);
+
+ widgetItem->setSourceUrl(sourceUrl);
+
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+
+ return widgetItem;
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (UBMimeType::Link == itemMimeType)
+ {
+ QString url;
+ QString embedCode;
+ QSize size;
+
+ QDomDocument linkDoc;
+ linkDoc.setContent(QString(pData));
+
+ QDomElement e = linkDoc.firstChildElement();
+ if ("link" == e.tagName().toLower())
+ e = e.firstChildElement();
+
+ while(!e.isNull())
+ {
+ if ("src" == e.tagName().toLower())
+ url = e.text();
+
+ if ( "html" == e.tagName().toLower())
+ embedCode = e.text();
+
+ if ( "width" == e.tagName().toLower())
+ size.setWidth(e.text().toInt());
+
+ if ( "height" == e.tagName().toLower())
+ size.setHeight(e.text().toInt());
+
+ e = e.nextSiblingElement();
+ }
+
+
+ addLinkToPage(url, size, pPos, embedCode);
+ }
+ else if (UBMimeType::Web == itemMimeType){
+ addLinkToPage(sourceUrl.toString(),pSize,pPos);
+ }
+ else if(UBMimeType::Bookmark){
+ QFile file(sourceUrl.toLocalFile());
+ file.open(QIODevice::ReadOnly);
+ addLinkToPage(QString::fromAscii(file.readAll()),QSize(640,480),pPos);
+ file.close();
+ }
+ else
+ {
+ showMessage(tr("Unknown content type %1").arg(pContentTypeHeader));
+ qWarning() << "ignoring mime type" << pContentTypeHeader ;
+ }
+
+ return NULL;
+}
+
+void UBBoardController::setActiveDocumentScene(int pSceneIndex)
+{
+ setActiveDocumentScene(selectedDocument(), pSceneIndex);
+}
+
+void UBBoardController::setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, const int pSceneIndex, bool forceReload)
+{
+ saveViewState();
+
+ bool documentChange = selectedDocument() != pDocumentProxy;
+
+ int index = pSceneIndex;
+ int sceneCount = pDocumentProxy->pageCount();
+ if (index >= sceneCount && sceneCount > 0)
+ index = sceneCount - 1;
+
+ UBGraphicsScene* targetScene = UBPersistenceManager::persistenceManager()->loadDocumentScene(pDocumentProxy, index);
+
+ bool sceneChange = targetScene != mActiveScene;
+
+ if (targetScene)
+ {
+ if (mActiveScene) {
+ persistCurrentScene();
+ freezeW3CWidgets(true);
+ ClearUndoStack();
+ }
+
+ mActiveScene = targetScene;
+ mActiveSceneIndex = index;
+ setDocument(pDocumentProxy, forceReload);
+
+ updateSystemScaleFactor();
+
+ mControlView->setScene(mActiveScene);
+ mDisplayView->setScene(mActiveScene);
+ mActiveScene->setBackgroundZoomFactor(mControlView->transform().m11());
+ pDocumentProxy->setDefaultDocumentSize(mActiveScene->nominalSize());
+ updatePageSizeState();
+
+ adjustDisplayViews();
+
+ UBSettings::settings()->setDarkBackground(mActiveScene->isDarkBackground());
+ UBSettings::settings()->setCrossedBackground(mActiveScene->isCrossedBackground());
+
+ freezeW3CWidgets(false);
+ }
+
+ selectionChanged();
+
+ updateBackgroundActionsState(mActiveScene->isDarkBackground(), mActiveScene->isCrossedBackground());
+ updateBackgroundState();
+
+ if(documentChange)
+ {
+ UBGraphicsTextItem::lastUsedTextColor = QColor();
+ }
+
+
+ if (sceneChange)
+ {
+ emit activeSceneChanged();
+ emit pageChanged();
+ }
+}
+
+
+void UBBoardController::moveSceneToIndex(int source, int target)
+{
+ if (selectedDocument())
+ {
+
+ persistCurrentScene();
+
+ UBDocumentContainer::movePageToIndex(source, target);
+
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ UBMetadataDcSubsetAdaptor::persist(selectedDocument());
+ mMovingSceneIndex = source;
+ setActiveDocumentScene(target);
+ mMovingSceneIndex = -1;
+
+ }
+}
+
+void UBBoardController::ClearUndoStack()
+{
+// The code has been removed because it leads to a strange error and because the final goal has never been
+// reached on tests and sound a little bit strange.
+// Strange error: item->scene() crashes the application because item doesn't implement scene() method. I'm
+// not able to give all the steps to reproduce this error sistematically but is quite frequent (~ twice per utilisation hours)
+// strange goal: if item is on the undocommand, the item->scene() is null and the item is not on the deleted scene item list then
+// then it's deleted.
+
+ // QSet<QGraphicsItem*> uniqueItems;
+// // go through all stack command
+// for(int i = 0; i < UBApplication::undoStack->count(); i++)
+// {
+
+// UBAbstractUndoCommand *abstractCmd = (UBAbstractUndoCommand*)UBApplication::undoStack->command(i);
+// if(abstractCmd->getType() != UBAbstractUndoCommand::undotype_GRAPHICITEM)
+// continue;
+
+// UBGraphicsItemUndoCommand *cmd = (UBGraphicsItemUndoCommand*)UBApplication::undoStack->command(i);
+
+// // go through all added and removed objects, for create list of unique objects
+// // grouped items will be deleted by groups, so we don't need do delete that items.
+// QSetIterator<QGraphicsItem*> itAdded(cmd->GetAddedList());
+// while (itAdded.hasNext())
+// {
+// QGraphicsItem* item = itAdded.next();
+// if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type()))
+// uniqueItems.insert(item);
+// }
+
+// QSetIterator<QGraphicsItem*> itRemoved(cmd->GetRemovedList());
+// while (itRemoved.hasNext())
+// {
+// QGraphicsItem* item = itRemoved.next();
+// if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type()))
+// uniqueItems.insert(item);
+// }
+// }
+
+// // go through all unique items, and check, ot on scene, or not.
+// // if not on scene, than item can be deleted
+
+// QSetIterator<QGraphicsItem*> itUniq(uniqueItems);
+// while (itUniq.hasNext())
+// {
+// QGraphicsItem* item = itUniq.next();
+// UBGraphicsScene *scene = NULL;
+// if (item->scene()) {
+// scene = dynamic_cast<UBGraphicsScene*>(item->scene());
+// }
+// if(!scene)
+// {
+// if (!mActiveScene->deleteItem(item))
+// delete item;
+// }
+// }
+
+ // clear stack, and command list
+ UBApplication::undoStack->clear();
+
+}
+
+void UBBoardController::adjustDisplayViews()
+{
+ if (UBApplication::applicationController)
+ {
+ UBApplication::applicationController->adjustDisplayView();
+ UBApplication::applicationController->adjustPreviousViews(mActiveSceneIndex, selectedDocument());
+ }
+}
+
+
+void UBBoardController::changeBackground(bool isDark, bool isCrossed)
+{
+ bool currentIsDark = mActiveScene->isDarkBackground();
+ bool currentIsCrossed = mActiveScene->isCrossedBackground();
+
+ if ((isDark != currentIsDark) || (currentIsCrossed != isCrossed))
+ {
+ UBSettings::settings()->setDarkBackground(isDark);
+ UBSettings::settings()->setCrossedBackground(isCrossed);
+
+ mActiveScene->setBackground(isDark, isCrossed);
+
+ updateBackgroundState();
+
+ emit backgroundChanged();
+ }
+}
+
+void UBBoardController::boardViewResized(QResizeEvent* event)
+{
+ Q_UNUSED(event);
+
+ int innerMargin = UBSettings::boardMargin;
+ int userHeight = mControlContainer->height() - (2 * innerMargin);
+
+ mMessageWindow->move(innerMargin, innerMargin + userHeight - mMessageWindow->height());
+ mMessageWindow->adjustSizeAndPosition();
+
+ UBApplication::applicationController->initViewState(
+ mControlView->horizontalScrollBar()->value(),
+ mControlView->verticalScrollBar()->value());
+
+ updateSystemScaleFactor();
+
+ mControlView->centerOn(0,0);
+
+ if (mDisplayView)
+ mDisplayView->centerOn(0,0);
+
+ mPaletteManager->containerResized();
+
+ UBApplication::boardController->controlView()->scene()->moveMagnifier();
+
+}
+
+
+void UBBoardController::documentWillBeDeleted(UBDocumentProxy* pProxy)
+{
+ if (selectedDocument() == pProxy)
+ {
+ if (!mIsClosing) {
+// setActiveDocumentScene(UBPersistenceManager::persistenceManager()->createDocument());
+ mActiveScene = 0;
+ mActiveSceneIndex = -1;
+// mActiveScene->deleteLater();
+ }
+ }
+}
+
+
+void UBBoardController::showMessage(const QString& message, bool showSpinningWheel)
+{
+ mMessageWindow->showMessage(message, showSpinningWheel);
+}
+
+
+void UBBoardController::hideMessage()
+{
+ mMessageWindow->hideMessage();
+}
+
+
+void UBBoardController::setDisabled(bool disable)
+{
+ mMainWindow->boardToolBar->setDisabled(disable);
+ mControlView->setDisabled(disable);
+}
+
+
+void UBBoardController::selectionChanged()
+{
+ updateActionStates();
+ emit pageSelectionChanged(activeSceneIndex());
+}
+
+
+void UBBoardController::undoRedoStateChange(bool canUndo)
+{
+ Q_UNUSED(canUndo);
+
+ mMainWindow->actionUndo->setEnabled(UBApplication::undoStack->canUndo());
+ mMainWindow->actionRedo->setEnabled(UBApplication::undoStack->canRedo());
+
+ updateActionStates();
+}
+
+
+void UBBoardController::updateActionStates()
+{
+ mMainWindow->actionBack->setEnabled(selectedDocument() && (mActiveSceneIndex > 0));
+ mMainWindow->actionForward->setEnabled(selectedDocument() && (mActiveSceneIndex < selectedDocument()->pageCount() - 1));
+ mMainWindow->actionErase->setEnabled(mActiveScene && !mActiveScene->isEmpty());
+}
+
+
+UBGraphicsScene* UBBoardController::activeScene() const
+{
+ return mActiveScene;
+}
+
+
+int UBBoardController::activeSceneIndex() const
+{
+ return mActiveSceneIndex;
+}
+
+
+void UBBoardController::documentSceneChanged(UBDocumentProxy* pDocumentProxy, int pIndex)
+{
+ Q_UNUSED(pIndex);
+
+ if(selectedDocument() == pDocumentProxy)
+ {
+ setActiveDocumentScene(mActiveSceneIndex);
+ }
+}
+
+void UBBoardController::closing()
+{
+ mIsClosing = true;
+ ClearUndoStack();
+ lastWindowClosed();
+}
+
+void UBBoardController::lastWindowClosed()
+{
+ if (!mCleanupDone)
+ {
+ bool teacherGuideModified = false;
+ if(UBApplication::boardController->paletteManager()->teacherGuideDockWidget())
+ teacherGuideModified = UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified();
+ if (selectedDocument()->pageCount() == 1 && (!mActiveScene || mActiveScene->isEmpty()) && !teacherGuideModified)
+ {
+// UBPersistenceManager::persistenceManager()->deleteDocument(selectedDocument());
+ }
+ else
+ {
+ persistCurrentScene();
+ }
+
+ UBPersistenceManager::persistenceManager()->purgeEmptyDocuments();
+
+ mCleanupDone = true;
+ }
+}
+
+
+
+void UBBoardController::setColorIndex(int pColorIndex)
+{
+ UBDrawingController::drawingController()->setColorIndex(pColorIndex);
+
+ if (UBDrawingController::drawingController()->stylusTool() != UBStylusTool::Marker &&
+ UBDrawingController::drawingController()->stylusTool() != UBStylusTool::Line &&
+ UBDrawingController::drawingController()->stylusTool() != UBStylusTool::Text &&
+ UBDrawingController::drawingController()->stylusTool() != UBStylusTool::Selector)
+ {
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Pen);
+ }
+
+ if (UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Pen ||
+ UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Line ||
+ UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Text ||
+ UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Selector)
+ {
+ mPenColorOnDarkBackground = UBSettings::settings()->penColors(true).at(pColorIndex);
+ mPenColorOnLightBackground = UBSettings::settings()->penColors(false).at(pColorIndex);
+
+ if (UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Selector)
+ {
+ // If we are in mode board, then do that
+ if(UBApplication::applicationController->displayMode() == UBApplicationController::Board)
+ {
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Pen);
+ mMainWindow->actionPen->setChecked(true);
+ }
+ }
+
+ emit penColorChanged();
+ }
+ else if (UBDrawingController::drawingController()->stylusTool() == UBStylusTool::Marker)
+ {
+ mMarkerColorOnDarkBackground = UBSettings::settings()->markerColors(true).at(pColorIndex);
+ mMarkerColorOnLightBackground = UBSettings::settings()->markerColors(false).at(pColorIndex);
+ }
+}
+
+void UBBoardController::colorPaletteChanged()
+{
+ mPenColorOnDarkBackground = UBSettings::settings()->penColor(true);
+ mPenColorOnLightBackground = UBSettings::settings()->penColor(false);
+ mMarkerColorOnDarkBackground = UBSettings::settings()->markerColor(true);
+ mMarkerColorOnLightBackground = UBSettings::settings()->markerColor(false);
+}
+
+
+qreal UBBoardController::currentZoom()
+{
+ if (mControlView)
+ return mControlView->viewportTransform().m11() / mSystemScaleFactor;
+ else
+ return 1.0;
+}
+
+void UBBoardController::removeTool(UBToolWidget* toolWidget)
+{
+ toolWidget->hide();
+
+ delete toolWidget;
+}
+
+void UBBoardController::hide()
+{
+ UBApplication::mainWindow->actionLibrary->setChecked(false);
+}
+
+void UBBoardController::show()
+{
+ UBApplication::mainWindow->actionLibrary->setChecked(false);
+}
+
+void UBBoardController::persistCurrentScene(UBDocumentProxy *pProxy)
+{
+ if(UBPersistenceManager::persistenceManager()
+ && selectedDocument() && mActiveScene && mActiveSceneIndex != mDeletingSceneIndex
+ && (mActiveSceneIndex >= 0) && mActiveSceneIndex != mMovingSceneIndex
+ && (mActiveScene->isModified() || (UBApplication::boardController->paletteManager()->teacherGuideDockWidget() && UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified())))
+ {
+ UBPersistenceManager::persistenceManager()->persistDocumentScene(pProxy ? pProxy : selectedDocument(), mActiveScene, mActiveSceneIndex);
+ updatePage(mActiveSceneIndex);
+ }
+}
+
+void UBBoardController::updateSystemScaleFactor()
+{
+ qreal newScaleFactor = 1.0;
+
+ if (mActiveScene)
+ {
+ QSize pageNominalSize = mActiveScene->nominalSize();
+ //we're going to keep scale factor untouched if the size is custom
+ QMap<DocumentSizeRatio::Enum, QSize> sizesMap = UBSettings::settings()->documentSizes;
+ // if(pageNominalSize == sizesMap.value(DocumentSizeRatio::Ratio16_9) || pageNominalSize == sizesMap.value(DocumentSizeRatio::Ratio4_3))
+ {
+ QSize controlSize = controlViewport();
+
+ qreal hFactor = ((qreal)controlSize.width()) / ((qreal)pageNominalSize.width());
+ qreal vFactor = ((qreal)controlSize.height()) / ((qreal)pageNominalSize.height());
+
+ newScaleFactor = qMin(hFactor, vFactor);
+ }
+ }
+
+ if (mSystemScaleFactor != newScaleFactor)
+ {
+ mSystemScaleFactor = newScaleFactor;
+ emit systemScaleFactorChanged(newScaleFactor);
+ }
+
+ UBGraphicsScene::SceneViewState viewState = mActiveScene->viewState();
+
+ QTransform scalingTransform;
+
+ qreal scaleFactor = viewState.zoomFactor * mSystemScaleFactor;
+ scalingTransform.scale(scaleFactor, scaleFactor);
+
+ mControlView->setTransform(scalingTransform);
+ mControlView->horizontalScrollBar()->setValue(viewState.horizontalPosition);
+ mControlView->verticalScrollBar()->setValue(viewState.verticalPostition);
+ mActiveScene->setBackgroundZoomFactor(mControlView->transform().m11());}
+
+
+void UBBoardController::setWidePageSize(bool checked)
+{
+ Q_UNUSED(checked);
+ QSize newSize = UBSettings::settings()->documentSizes.value(DocumentSizeRatio::Ratio16_9);
+
+ if (mActiveScene->nominalSize() != newSize)
+ {
+ UBPageSizeUndoCommand* uc = new UBPageSizeUndoCommand(mActiveScene, mActiveScene->nominalSize(), newSize);
+ UBApplication::undoStack->push(uc);
+
+ setPageSize(newSize);
+ }
+}
+
+
+void UBBoardController::setRegularPageSize(bool checked)
+{
+ Q_UNUSED(checked);
+ QSize newSize = UBSettings::settings()->documentSizes.value(DocumentSizeRatio::Ratio4_3);
+
+ if (mActiveScene->nominalSize() != newSize)
+ {
+ UBPageSizeUndoCommand* uc = new UBPageSizeUndoCommand(mActiveScene, mActiveScene->nominalSize(), newSize);
+ UBApplication::undoStack->push(uc);
+
+ setPageSize(newSize);
+ }
+}
+
+
+void UBBoardController::setPageSize(QSize newSize)
+{
+ if (mActiveScene->nominalSize() != newSize)
+ {
+ mActiveScene->setNominalSize(newSize);
+
+ saveViewState();
+
+ updateSystemScaleFactor();
+ updatePageSizeState();
+ adjustDisplayViews();
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+
+ UBSettings::settings()->pageSize->set(newSize);
+ }
+}
+
+void UBBoardController::notifyCache(bool visible)
+{
+ if(visible)
+ {
+ emit cacheEnabled();
+ }
+ else
+ {
+ emit cacheDisabled();
+ }
+ mCacheWidgetIsEnabled = visible;
+}
+
+void UBBoardController::updatePageSizeState()
+{
+ if (mActiveScene->nominalSize() == UBSettings::settings()->documentSizes.value(DocumentSizeRatio::Ratio16_9))
+ {
+ mMainWindow->actionWidePageSize->setChecked(true);
+ }
+ else if(mActiveScene->nominalSize() == UBSettings::settings()->documentSizes.value(DocumentSizeRatio::Ratio4_3))
+ {
+ mMainWindow->actionRegularPageSize->setChecked(true);
+ }
+ else
+ {
+ mMainWindow->actionCustomPageSize->setChecked(true);
+ }
+}
+
+
+void UBBoardController::saveViewState()
+{
+ if (mActiveScene)
+ {
+ mActiveScene->setViewState(UBGraphicsScene::SceneViewState(currentZoom(),
+ mControlView->horizontalScrollBar()->value(),
+ mControlView->verticalScrollBar()->value()));
+ }
+}
+
+
+void UBBoardController::updateBackgroundState()
+{
+ //adjust background style
+ QString newBackgroundStyle;
+
+ if (mActiveScene && mActiveScene->isDarkBackground())
+ {
+ newBackgroundStyle ="QWidget {background-color: #0E0E0E}";
+ }
+ else
+ {
+ newBackgroundStyle ="QWidget {background-color: #F1F1F1}";
+ }
+}
+
+void UBBoardController::stylusToolChanged(int tool)
+{
+ if (UBPlatformUtils::hasVirtualKeyboard() && mPaletteManager->mKeyboardPalette)
+ {
+ UBStylusTool::Enum eTool = (UBStylusTool::Enum)tool;
+ if(eTool != UBStylusTool::Selector && eTool != UBStylusTool::Text)
+ {
+ if(mPaletteManager->mKeyboardPalette->m_isVisible)
+ UBApplication::mainWindow->actionVirtualKeyboard->activate(QAction::Trigger);
+ }
+ }
+
+ updateBackgroundState();
+}
+
+
+QUrl UBBoardController::expandWidgetToTempDir(const QByteArray& pZipedData, const QString& ext)
+{
+ QUrl widgetUrl;
+ QTemporaryFile tmp;
+
+ if (tmp.open())
+ {
+ tmp.write(pZipedData);
+ tmp.flush();
+ tmp.close();
+
+ QString tmpDir = UBFileSystemUtils::createTempDir() + "." + ext;
+
+ if (UBFileSystemUtils::expandZipToDir(tmp, tmpDir))
+ {
+ //Claudio this is a workaround to know it the zip is the widget itself or a zipped widget
+ QStringList directoryContent = QDir(tmpDir).entryList(QDir::AllDirs | QDir::NoDotAndDotDot);
+ if(directoryContent.count() == 1 && directoryContent.at(0).contains(".wgt"))
+ widgetUrl = QUrl::fromLocalFile(tmpDir + "/" + directoryContent.at(0));
+ else
+ widgetUrl = QUrl::fromLocalFile(tmpDir);
+ }
+ }
+
+ return widgetUrl;
+}
+
+
+void UBBoardController::grabScene(const QRectF& pSceneRect)
+{
+ if (mActiveScene)
+ {
+ QImage image(pSceneRect.width(), pSceneRect.height(), QImage::Format_ARGB32);
+ image.fill(Qt::transparent);
+
+ QRectF targetRect(0, 0, pSceneRect.width(), pSceneRect.height());
+ QPainter painter(&image);
+ painter.setRenderHint(QPainter::SmoothPixmapTransform);
+ painter.setRenderHint(QPainter::Antialiasing);
+
+ mActiveScene->setRenderingQuality(UBItem::RenderingQualityHigh);
+
+ mActiveScene->render(&painter, targetRect, pSceneRect);
+
+ mActiveScene->setRenderingQuality(UBItem::RenderingQualityNormal);
+
+ mPaletteManager->addItem(QPixmap::fromImage(image));
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ }
+}
+
+UBGraphicsMediaItem* UBBoardController::addVideo(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos, bool bUseSource)
+{
+ QUuid uuid = QUuid::createUuid();
+ QUrl concreteUrl = pSourceUrl;
+
+ // media file is not in document folder yet
+ if (bUseSource)
+ {
+ QString destFile;
+ bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(),
+ pSourceUrl.toLocalFile(),
+ UBPersistenceManager::videoDirectory,
+ uuid,
+ destFile);
+ if (!b)
+ {
+ showMessage(tr("Add file operation failed: file copying error"));
+ return NULL;
+ }
+ concreteUrl = QUrl::fromLocalFile(destFile);
+ }// else we just use source Url.
+
+
+ UBGraphicsMediaItem* vi = mActiveScene->addMedia(concreteUrl, startPlay, pos);
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+
+ if (vi) {
+ vi->setUuid(uuid);
+ vi->setSourceUrl(pSourceUrl);
+ }
+
+ return vi;
+
+}
+
+UBGraphicsMediaItem* UBBoardController::addAudio(const QUrl& pSourceUrl, bool startPlay, const QPointF& pos, bool bUseSource)
+{
+ QUuid uuid = QUuid::createUuid();
+ QUrl concreteUrl = pSourceUrl;
+
+ // media file is not in document folder yet
+ if (bUseSource)
+ {
+ QString destFile;
+ bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(selectedDocument(),
+ pSourceUrl.toLocalFile(),
+ UBPersistenceManager::audioDirectory,
+ uuid,
+ destFile);
+ if (!b)
+ {
+ showMessage(tr("Add file operation failed: file copying error"));
+ return NULL;
+ }
+ concreteUrl = QUrl::fromLocalFile(destFile);
+ }// else we just use source Url.
+
+ UBGraphicsMediaItem* ai = mActiveScene->addMedia(concreteUrl, startPlay, pos);
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+
+ if (ai){
+ ai->setUuid(uuid);
+ ai->setSourceUrl(pSourceUrl);
+ }
+
+ return ai;
+
+}
+
+UBGraphicsWidgetItem *UBBoardController::addW3cWidget(const QUrl &pUrl, const QPointF &pos)
+{
+ UBGraphicsWidgetItem* w3cWidgetItem = 0;
+
+ QUuid uuid = QUuid::createUuid();
+
+ QString destPath;
+ if (!UBPersistenceManager::persistenceManager()->addGraphicsWidgetToDocument(selectedDocument(), pUrl.toLocalFile(), uuid, destPath))
+ return NULL;
+ QUrl newUrl = QUrl::fromLocalFile(destPath);
+
+ w3cWidgetItem = mActiveScene->addW3CWidget(newUrl, pos);
+
+ if (w3cWidgetItem) {
+ w3cWidgetItem->setUuid(uuid);
+ w3cWidgetItem->setOwnFolder(newUrl);
+ w3cWidgetItem->setSourceUrl(pUrl);
+
+ QString struuid = UBStringUtils::toCanonicalUuid(uuid);
+ QString snapshotPath = selectedDocument()->persistencePath() + "/" + UBPersistenceManager::widgetDirectory + "/" + struuid + ".png";
+ w3cWidgetItem->setSnapshotPath(QUrl::fromLocalFile(snapshotPath));
+/* UBGraphicsWidgetItem *tmpItem = dynamic_cast<UBGraphicsWidgetItem*>(w3cWidgetItem);
+ if (tmpItem && tmpItem->scene())
+ tmpItem->takeSnapshot().save(snapshotPath, "PNG");
+*/
+ }
+
+ return w3cWidgetItem;
+}
+
+void UBBoardController::cut()
+{
+ //---------------------------------------------------------//
+
+ QList<QGraphicsItem*> selectedItems;
+ foreach(QGraphicsItem* gi, mActiveScene->selectedItems())
+ selectedItems << gi;
+
+ //---------------------------------------------------------//
+
+ QList<UBItem*> selected;
+ foreach(QGraphicsItem* gi, selectedItems)
+ {
+ gi->setSelected(false);
+
+ UBItem* ubItem = dynamic_cast<UBItem*>(gi);
+ UBGraphicsItem *ubGi = dynamic_cast<UBGraphicsItem*>(gi);
+
+ if (ubItem && ubGi && !mActiveScene->tools().contains(gi))
+ {
+ selected << ubItem->deepCopy();
+ ubGi->remove();
+ }
+ }
+
+ //---------------------------------------------------------//
+
+ if (selected.size() > 0)
+ {
+ QClipboard *clipboard = QApplication::clipboard();
+
+ UBMimeDataGraphicsItem* mimeGi = new UBMimeDataGraphicsItem(selected);
+
+ mimeGi->setData(UBApplication::mimeTypeUniboardPageItem, QByteArray());
+ clipboard->setMimeData(mimeGi);
+
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ }
+
+ //---------------------------------------------------------//
+}
+
+
+void UBBoardController::copy()
+{
+ QList<UBItem*> selected;
+
+ foreach(QGraphicsItem* gi, mActiveScene->selectedItems())
+ {
+ UBItem* ubItem = dynamic_cast<UBItem*>(gi);
+
+ if (ubItem && !mActiveScene->tools().contains(gi))
+ selected << ubItem;
+ }
+
+ if (selected.size() > 0)
+ {
+ QClipboard *clipboard = QApplication::clipboard();
+
+ UBMimeDataGraphicsItem* mimeGi = new UBMimeDataGraphicsItem(selected);
+
+ mimeGi->setData(UBApplication::mimeTypeUniboardPageItem, QByteArray());
+ clipboard->setMimeData(mimeGi);
+
+ }
+}
+
+
+void UBBoardController::paste()
+{
+ QClipboard *clipboard = QApplication::clipboard();
+ QPointF pos(0, 0);
+ processMimeData(clipboard->mimeData(), pos);
+
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+}
+
+
+void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPointF& pPos)
+{
+ if (pMimeData->hasFormat(UBApplication::mimeTypeUniboardPage))
+ {
+ const UBMimeData* mimeData = qobject_cast <const UBMimeData*>(pMimeData);
+
+ if (mimeData)
+ {
+ int previousActiveSceneIndex = activeSceneIndex();
+ int previousPageCount = selectedDocument()->pageCount();
+
+ foreach (UBMimeDataItem sourceItem, mimeData->items())
+ addScene(sourceItem.documentProxy(), sourceItem.sceneIndex(), true);
+
+ if (selectedDocument()->pageCount() < previousPageCount + mimeData->items().count())
+ setActiveDocumentScene(previousActiveSceneIndex);
+ else
+ setActiveDocumentScene(previousActiveSceneIndex + 1);
+
+ return;
+ }
+ }
+
+ if (pMimeData->hasFormat(UBApplication::mimeTypeUniboardPageItem))
+ {
+ const UBMimeDataGraphicsItem* mimeData = qobject_cast <const UBMimeDataGraphicsItem*>(pMimeData);
+
+ if (mimeData)
+ {
+ foreach(UBItem* item, mimeData->items())
+ {
+ QGraphicsItem* pItem = dynamic_cast<QGraphicsItem*>(item);
+ if(NULL != pItem){
+ duplicateItem(item);
+ }
+ }
+
+ return;
+ }
+ }
+
+ if(pMimeData->hasHtml())
+ {
+ QString qsHtml = pMimeData->html();
+ QString url = UBApplication::urlFromHtml(qsHtml);
+
+ if("" != url)
+ {
+ downloadURL(url, QString(), pPos);
+ return;
+ }
+ }
+
+ if (pMimeData->hasUrls())
+ {
+ QList<QUrl> urls = pMimeData->urls();
+
+ int index = 0;
+
+ const UBFeaturesMimeData *internalMimeData = qobject_cast<const UBFeaturesMimeData*>(pMimeData);
+ bool internalData = false;
+ if (internalMimeData) {
+ internalData = true;
+ }
+
+ foreach(const QUrl url, urls){
+ QPointF pos(pPos + QPointF(index * 15, index * 15));
+
+ downloadURL(url, QString(), pos, QSize(), false, internalData);
+ index++;
+ }
+
+ return;
+ }
+
+ if (pMimeData->hasImage())
+ {
+ QImage img = qvariant_cast<QImage> (pMimeData->imageData());
+ QPixmap pix = QPixmap::fromImage(img);
+
+ // validate that the image is really an image, webkit does not fill properly the image mime data
+ if (pix.width() != 0 && pix.height() != 0)
+ {
+ mActiveScene->addPixmap(pix, NULL, pPos, 1.);
+ return;
+ }
+ }
+
+ if (pMimeData->hasText())
+ {
+ if("" != pMimeData->text()){
+ // Sometimes, it is possible to have an URL as text. we check here if it is the case
+ QString qsTmp = pMimeData->text().remove(QRegExp("[\\0]"));
+ if(qsTmp.startsWith("http")){
+ downloadURL(QUrl(qsTmp), QString(), pPos);
+ }
+ else{
+ mActiveScene->addTextHtml(pMimeData->html(), pPos);
+ }
+ }
+ else{
+#ifdef Q_WS_MACX
+ // With Safari, in 95% of the drops, the mime datas are hidden in Apple Web Archive pasteboard type.
+ // This is due to the way Safari is working so we have to dig into the pasteboard in order to retrieve
+ // the data.
+ QString qsUrl = UBPlatformUtils::urlFromClipboard();
+ if("" != qsUrl){
+ // We finally got the url of the dropped ressource! Let's import it!
+ downloadURL(qsUrl, qsUrl, pPos);
+ return;
+ }
+#endif
+ }
+ }
+}
+
+
+void UBBoardController::togglePodcast(bool checked)
+{
+ if (UBPodcastController::instance())
+ UBPodcastController::instance()->toggleRecordingPalette(checked);
+}
+
+void UBBoardController::moveGraphicsWidgetToControlView(UBGraphicsWidgetItem* graphicsWidget)
+{
+ mActiveScene->setURStackEnable(false);
+ UBGraphicsItem *toolW3C = duplicateItem(dynamic_cast<UBItem *>(graphicsWidget));
+ UBGraphicsWidgetItem *copyedGraphicsWidget = NULL;
+
+ if (UBGraphicsWidgetItem::Type == toolW3C->type())
+ copyedGraphicsWidget = static_cast<UBGraphicsWidgetItem *>(toolW3C);
+
+ UBToolWidget *toolWidget = new UBToolWidget(copyedGraphicsWidget, mControlView);
+
+ graphicsWidget->remove(false);
+ mActiveScene->addItemToDeletion(graphicsWidget);
+
+ mActiveScene->setURStackEnable(true);
+
+ QPoint controlViewPos = mControlView->mapFromScene(graphicsWidget->sceneBoundingRect().center());
+ toolWidget->centerOn(mControlView->mapTo(mControlContainer, controlViewPos));
+ toolWidget->show();
+}
+
+
+void UBBoardController::moveToolWidgetToScene(UBToolWidget* toolWidget)
+{
+ UBGraphicsWidgetItem *widgetToScene = toolWidget->toolWidget();
+
+ widgetToScene->resetTransform();
+
+ QPoint mainWindowCenter = toolWidget->mapTo(mMainWindow, QPoint(toolWidget->width(), toolWidget->height()) / 2);
+ QPoint controlViewCenter = mControlView->mapFrom(mMainWindow, mainWindowCenter);
+ QPointF scenePos = mControlView->mapToScene(controlViewCenter);
+
+ mActiveScene->addGraphicsWidget(widgetToScene, scenePos);
+
+ toolWidget->remove();
+}
+
+
+void UBBoardController::updateBackgroundActionsState(bool isDark, bool isCrossed)
+{
+ if (isDark && !isCrossed)
+ mMainWindow->actionPlainDarkBackground->setChecked(true);
+ else if (isDark && isCrossed)
+ mMainWindow->actionCrossedDarkBackground->setChecked(true);
+ else if (!isDark && isCrossed)
+ mMainWindow->actionCrossedLightBackground->setChecked(true);
+ else
+ mMainWindow->actionPlainLightBackground->setChecked(true);
+}
+
+
+void UBBoardController::addItem()
+{
+ QString defaultPath = UBSettings::settings()->lastImportToLibraryPath->get().toString();
+
+ QString extensions;
+ foreach(QString ext, UBSettings::imageFileExtensions)
+ {
+ extensions += " *.";
+ extensions += ext;
+ }
+
+ QString filename = QFileDialog::getOpenFileName(mControlContainer, tr("Add Item"),
+ defaultPath,
+ tr("All Supported (%1)").arg(extensions), NULL, QFileDialog::DontUseNativeDialog);
+
+ if (filename.length() > 0)
+ {
+ mPaletteManager->addItem(QUrl::fromLocalFile(filename));
+ QFileInfo source(filename);
+ UBSettings::settings()->lastImportToLibraryPath->set(QVariant(source.absolutePath()));
+ }
+}
+
+void UBBoardController::importPage()
+{
+ int pageCount = selectedDocument()->pageCount();
+ if (UBApplication::documentController->addFileToDocument(selectedDocument()))
+ {
+ setActiveDocumentScene(selectedDocument(), pageCount, true);
+ }
+}
+
+void UBBoardController::notifyPageChanged()
+{
+ emit pageChanged();
+}
+
+void UBBoardController::onDownloadModalFinished()
+{
+
+}
+
+void UBBoardController::displayMetaData(QMap<QString, QString> metadatas)
+{
+ emit displayMetadata(metadatas);
+}
+
+void UBBoardController::freezeW3CWidgets(bool freeze)
+{
+ if (mActiveSceneIndex >= 0)
+ {
+ QList<QGraphicsItem *> list = UBApplication::boardController->activeScene()->getFastAccessItems();
+ foreach(QGraphicsItem *item, list)
+ {
+ freezeW3CWidget(item, freeze);
+ }
+ }
+}
+
+void UBBoardController::freezeW3CWidget(QGraphicsItem *item, bool freeze)
+{
+ if(item->type() == UBGraphicsW3CWidgetItem::Type)
+ {
+ UBGraphicsW3CWidgetItem* item_casted = dynamic_cast<UBGraphicsW3CWidgetItem*>(item);
+ if (0 == item_casted)
+ return;
+
+ if (freeze) {
+ item_casted->load(QUrl(UBGraphicsW3CWidgetItem::freezedWidgetFilePath()));
+ } else
+ item_casted->loadMainHtml();
+ }
+}
diff --git a/Sankore-3.1/src/board/UBBoardController.h b/Sankore-3.1/src/board/UBBoardController.h
index 152ea39..b52b7ae 100644
--- a/Sankore-3.1/src/board/UBBoardController.h
+++ b/Sankore-3.1/src/board/UBBoardController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,295 +18,303 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBBOARDCONTROLLER_H_
-#define UBBOARDCONTROLLER_H_
-
-#include <QtGui>
-
-#include <QObject>
-#include "document/UBDocumentContainer.h"
-
-class UBMainWindow;
-class UBApplication;
-class UBBoardView;
-
-class UBDocumentController;
-class UBMessageWindow;
-class UBGraphicsScene;
-class UBDocumentProxy;
-class UBBlackoutWidget;
-class UBToolWidget;
-class UBVersion;
-class UBSoftwareUpdate;
-class UBSoftwareUpdateDialog;
-class UBGraphicsMediaItem;
-class UBGraphicsVideoItem;
-class UBGraphicsAudioItem;
-class UBGraphicsWidgetItem;
-class UBBoardPaletteManager;
-class UBItem;
-class UBGraphicsItem;
-
-
-class UBBoardController : public UBDocumentContainer
-{
- Q_OBJECT
-
- public:
- UBBoardController(UBMainWindow *mainWindow);
- virtual ~UBBoardController();
-
- void init();
- void setupLayout();
-
- UBGraphicsScene* activeScene() const;
- int activeSceneIndex() const;
- QSize displayViewport();
- QSize controlViewport();
- QRectF controlGeometry();
- void closing();
-
- int currentPage();
-
- QWidget* controlContainer()
- {
- return mControlContainer;
- }
-
- UBBoardView* controlView()
- {
- return mControlView;
- }
-
- UBBoardView* displayView()
- {
- return mDisplayView;
- }
-
- UBGraphicsScene* activeScene()
- {
- return mActiveScene;
- }
-
- void setPenColorOnDarkBackground(const QColor& pColor)
- {
- if (mPenColorOnDarkBackground == pColor)
- return;
-
- mPenColorOnDarkBackground = pColor;
- emit penColorChanged();
- }
-
- void setPenColorOnLightBackground(const QColor& pColor)
- {
- if (mPenColorOnLightBackground == pColor)
- return;
-
- mPenColorOnLightBackground = pColor;
- emit penColorChanged();
- }
-
- void setMarkerColorOnDarkBackground(const QColor& pColor)
- {
- mMarkerColorOnDarkBackground = pColor;
- }
-
- void setMarkerColorOnLightBackground(const QColor& pColor)
- {
- mMarkerColorOnLightBackground = pColor;
- }
-
- QColor penColorOnDarkBackground()
- {
- return mPenColorOnDarkBackground;
- }
-
- QColor penColorOnLightBackground()
- {
- return mPenColorOnLightBackground;
- }
-
- QColor markerColorOnDarkBackground()
- {
- return mMarkerColorOnDarkBackground;
- }
-
- QColor markerColorOnLightBackground()
- {
- return mMarkerColorOnLightBackground;
- }
-
- qreal systemScaleFactor()
- {
- return mSystemScaleFactor;
- }
- qreal currentZoom();
- void persistCurrentScene();
- void showNewVersionAvailable(bool automatic, const UBVersion &installedVersion, const UBSoftwareUpdate &softwareUpdate);
- void setBoxing(QRect displayRect);
- void setToolbarTexts();
- static QUrl expandWidgetToTempDir(const QByteArray& pZipedData, const QString& pExtension = QString("wgt"));
-// static QRect freeRectInGlobalPos() const {return ;}
- void setPageSize(QSize newSize);
- UBBoardPaletteManager *paletteManager()
- {
- return mPaletteManager;
- }
-
- void notifyCache(bool visible);
- void notifyPageChanged();
- void displayMetaData(QMap<QString, QString> metadatas);
-
- void ClearUndoStack();
-
- void setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, int pSceneIndex = 0, bool forceReload = false);
- void setActiveDocumentScene(int pSceneIndex);
-
- void moveSceneToIndex(int source, int target);
- void duplicateScene(int index);
- UBGraphicsItem *duplicateItem(UBItem *item, bool bAsync = true);
- void deleteScene(int index);
-
- bool cacheIsVisible() {return mCacheWidgetIsEnabled;}
-
- QString actionGroupText(){ return mActionGroupText;}
- QString actionUngroupText(){ return mActionUngroupText;}
-
- public slots:
- void showDocumentsDialog();
- void showKeyboard(bool show);
- void togglePodcast(bool checked);
- void blackout();
- void addScene();
- void addScene(UBDocumentProxy* proxy, int sceneIndex, bool replaceActiveIfEmpty = false);
- void addScene(UBGraphicsScene* scene, bool replaceActiveIfEmpty = false);
- void duplicateScene();
- void importPage();
- void clearScene();
- void clearSceneItems();
- void clearSceneAnnotation();
- void clearSceneBackground();
- void zoomIn(QPointF scenePoint = QPointF(0,0));
- void zoomOut(QPointF scenePoint = QPointF(0,0));
- void zoomRestore();
- void centerRestore();
- void centerOn(QPointF scenePoint = QPointF(0,0));
- void zoom(const qreal ratio, QPointF scenePoint);
- void handScroll(qreal dx, qreal dy);
- void previousScene();
- void nextScene();
- void firstScene();
- void lastScene();
- void groupButtonClicked();
- void downloadURL(const QUrl& url, QString contentSourceUrl = QString(), const QPointF& pPos = QPointF(0.0, 0.0), const QSize& pSize = QSize(), bool isBackground = false, bool internalData = false);
- UBItem *downloadFinished(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pHeader,
- QByteArray pData, QPointF pPos, QSize pSize,
- bool isBackground = false, bool internalData = false);
- void changeBackground(bool isDark, bool isCrossed);
- void setToolCursor(int tool);
- void showMessage(const QString& message, bool showSpinningWheel = false);
- void hideMessage();
- void setDisabled(bool disable);
- void setColorIndex(int pColorIndex);
- void removeTool(UBToolWidget* toolWidget);
- void hide();
- void show();
- void setWidePageSize(bool checked);
- void setRegularPageSize(bool checked);
- void stylusToolChanged(int tool);
- void grabScene(const QRectF& pSceneRect);
- UBGraphicsMediaItem* addVideo(const QUrl& pUrl, bool startPlay, const QPointF& pos, bool bUseSource = false);
- UBGraphicsMediaItem* addAudio(const QUrl& pUrl, bool startPlay, const QPointF& pos, bool bUseSource = false);
- UBGraphicsWidgetItem *addW3cWidget(const QUrl& pUrl, const QPointF& pos);
-
- void cut();
- void copy();
- void paste();
- void processMimeData(const QMimeData* pMimeData, const QPointF& pPos);
- void moveGraphicsWidgetToControlView(UBGraphicsWidgetItem* graphicWidget);
- void moveToolWidgetToScene(UBToolWidget* toolWidget);
- void addItem();
-
- void freezeW3CWidgets(bool freeze);
- void freezeW3CWidget(QGraphicsItem* item, bool freeze);
- void startScript();
- void stopScript();
-
- signals:
- void newPageAdded();
- void activeSceneChanged();
- void zoomChanged(qreal pZoomFactor);
- void systemScaleFactorChanged(qreal pSystemScaleFactor);
- void penColorChanged();
- void controlViewportChanged();
- void backgroundChanged();
- void cacheEnabled();
- void cacheDisabled();
- void pageChanged();
- void documentReorganized(int index);
- void displayMetadata(QMap<QString, QString> metadata);
- void pageSelectionChanged(int index);
- void npapiWidgetCreated(const QString &Url);
-
- protected:
- void setupViews();
- void setupToolbar();
- void connectToolbar();
- void initToolbarTexts();
- void updateActionStates();
- void updateSystemScaleFactor();
- QString truncate(QString text, int maxWidth);
-
- protected slots:
- void selectionChanged();
- void undoRedoStateChange(bool canUndo);
- void documentSceneChanged(UBDocumentProxy* proxy, int pIndex);
-
- private:
- void updatePageSizeState();
- void saveViewState();
- void adjustDisplayViews();
-
- UBMainWindow *mMainWindow;
- UBGraphicsScene* mActiveScene;
- int mActiveSceneIndex;
- UBBoardPaletteManager *mPaletteManager;
- UBSoftwareUpdateDialog *mSoftwareUpdateDialog;
- UBMessageWindow *mMessageWindow;
- UBBoardView *mControlView;
- UBBoardView *mDisplayView;
- QWidget *mControlContainer;
- QHBoxLayout *mControlLayout;
- qreal mZoomFactor;
- bool mIsClosing;
- QColor mPenColorOnDarkBackground;
- QColor mPenColorOnLightBackground;
- QColor mMarkerColorOnDarkBackground;
- QColor mMarkerColorOnLightBackground;
- qreal mSystemScaleFactor;
- bool mCleanupDone;
- QMap<QAction*, QPair<QString, QString> > mActionTexts;
- bool mCacheWidgetIsEnabled;
- QGraphicsItem* mLastCreatedItem;
- int mDeletingSceneIndex;
- int mMovingSceneIndex;
- QString mActionGroupText;
- QString mActionUngroupText;
-
- private slots:
- void stylusToolDoubleClicked(int tool);
- void boardViewResized(QResizeEvent* event);
- void documentWillBeDeleted(UBDocumentProxy* pProxy);
- void updateBackgroundActionsState(bool isDark, bool isCrossed);
- void updateBackgroundState();
- void colorPaletteChanged();
- void libraryDialogClosed(int ret);
- void lastWindowClosed();
- void onDownloadModalFinished();
-
-};
-
-
-#endif /* UBBOARDCONTROLLER_H_ */
+
+
+
+#ifndef UBBOARDCONTROLLER_H_
+#define UBBOARDCONTROLLER_H_
+
+#include <QtGui>
+
+#include <QObject>
+#include "document/UBDocumentContainer.h"
+
+class UBMainWindow;
+class UBApplication;
+class UBBoardView;
+
+class UBDocumentController;
+class UBMessageWindow;
+class UBGraphicsScene;
+class UBDocumentProxy;
+class UBBlackoutWidget;
+class UBToolWidget;
+class UBVersion;
+class UBSoftwareUpdate;
+class UBSoftwareUpdateDialog;
+class UBGraphicsMediaItem;
+class UBGraphicsVideoItem;
+class UBGraphicsAudioItem;
+class UBGraphicsWidgetItem;
+class UBBoardPaletteManager;
+class UBItem;
+class UBGraphicsItem;
+class UBDocumentNavigator;
+
+
+class UBBoardController : public UBDocumentContainer
+{
+ Q_OBJECT
+
+ public:
+ UBBoardController(UBMainWindow *mainWindow);
+ virtual ~UBBoardController();
+
+ void init();
+ void setupLayout();
+
+ UBGraphicsScene* activeScene() const;
+ int activeSceneIndex() const;
+ QSize displayViewport();
+ QSize controlViewport();
+ QRectF controlGeometry();
+ void closing();
+ void addLinkToPage(QString sourceUrl, QSize size = QSize(340,200), QPointF pos = QPointF(0,0), const QString &embedCode = QString());
+
+ int currentPage();
+
+ QWidget* controlContainer()
+ {
+ return mControlContainer;
+ }
+
+ UBBoardView* controlView()
+ {
+ return mControlView;
+ }
+
+ UBBoardView* displayView()
+ {
+ return mDisplayView;
+ }
+
+ UBGraphicsScene* activeScene()
+ {
+ return mActiveScene;
+ }
+
+ void setPenColorOnDarkBackground(const QColor& pColor)
+ {
+ if (mPenColorOnDarkBackground == pColor)
+ return;
+
+ mPenColorOnDarkBackground = pColor;
+ emit penColorChanged();
+ }
+
+ void setPenColorOnLightBackground(const QColor& pColor)
+ {
+ if (mPenColorOnLightBackground == pColor)
+ return;
+
+ mPenColorOnLightBackground = pColor;
+ emit penColorChanged();
+ }
+
+ void setMarkerColorOnDarkBackground(const QColor& pColor)
+ {
+ mMarkerColorOnDarkBackground = pColor;
+ }
+
+ void setMarkerColorOnLightBackground(const QColor& pColor)
+ {
+ mMarkerColorOnLightBackground = pColor;
+ }
+
+ QColor penColorOnDarkBackground()
+ {
+ return mPenColorOnDarkBackground;
+ }
+
+ QColor penColorOnLightBackground()
+ {
+ return mPenColorOnLightBackground;
+ }
+
+ QColor markerColorOnDarkBackground()
+ {
+ return mMarkerColorOnDarkBackground;
+ }
+
+ QColor markerColorOnLightBackground()
+ {
+ return mMarkerColorOnLightBackground;
+ }
+
+ qreal systemScaleFactor()
+ {
+ return mSystemScaleFactor;
+ }
+ qreal currentZoom();
+ void persistCurrentScene(UBDocumentProxy *pProxy = 0);
+ void showNewVersionAvailable(bool automatic, const UBVersion &installedVersion, const UBSoftwareUpdate &softwareUpdate);
+ void setBoxing(QRect displayRect);
+ void setToolbarTexts();
+ static QUrl expandWidgetToTempDir(const QByteArray& pZipedData, const QString& pExtension = QString("wgt"));
+// static QRect freeRectInGlobalPos() const {return ;}
+ void setPageSize(QSize newSize);
+ UBBoardPaletteManager *paletteManager()
+ {
+ return mPaletteManager;
+ }
+
+ void notifyCache(bool visible);
+ void notifyPageChanged();
+ void displayMetaData(QMap<QString, QString> metadatas);
+
+ void ClearUndoStack();
+
+ void setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, int pSceneIndex = 0, bool forceReload = false);
+ void setActiveDocumentScene(int pSceneIndex);
+
+ void moveSceneToIndex(int source, int target);
+ void duplicateScene(int index);
+ UBGraphicsItem *duplicateItem(UBItem *item, bool bAsync = true);
+ void deleteScene(int index);
+ void regenerateThumbnails();
+
+ bool cacheIsVisible() {return mCacheWidgetIsEnabled;}
+
+ QString actionGroupText(){ return mActionGroupText;}
+ QString actionUngroupText(){ return mActionUngroupText;}
+ void setDocumentNavigator(UBDocumentNavigator *navigator){mDocumentNavigator = navigator;}
+ UBDocumentNavigator *documentNavigator() const {return mDocumentNavigator;}
+
+
+ public slots:
+ void showDocumentsDialog();
+ void showKeyboard(bool show);
+ void togglePodcast(bool checked);
+ void blackout();
+ void addScene();
+ void addScene(UBDocumentProxy* proxy, int sceneIndex, bool replaceActiveIfEmpty = false);
+ void addScene(UBGraphicsScene* scene, bool replaceActiveIfEmpty = false);
+ void duplicateScene();
+ void importPage();
+ void clearScene();
+ void clearSceneItems();
+ void clearSceneAnnotation();
+ void clearSceneBackground();
+ void zoomIn(QPointF scenePoint = QPointF(0,0));
+ void zoomOut(QPointF scenePoint = QPointF(0,0));
+ void zoomRestore();
+ void centerRestore();
+ void centerOn(QPointF scenePoint = QPointF(0,0));
+ void zoom(const qreal ratio, QPointF scenePoint);
+ void handScroll(qreal dx, qreal dy);
+ void previousScene();
+ void nextScene();
+ void firstScene();
+ void lastScene();
+ void groupButtonClicked();
+ void downloadURL(const QUrl& url, QString contentSourceUrl = QString(), const QPointF& pPos = QPointF(0.0, 0.0), const QSize& pSize = QSize(), bool isBackground = false, bool internalData = false);
+ UBItem *downloadFinished(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pHeader,
+ QByteArray pData, QPointF pPos, QSize pSize,
+ bool isSyncOperation = true, bool isBackground = false, bool internalData = false);
+ void changeBackground(bool isDark, bool isCrossed);
+ void setToolCursor(int tool);
+ void showMessage(const QString& message, bool showSpinningWheel = false);
+ void hideMessage();
+ void setDisabled(bool disable);
+ void setColorIndex(int pColorIndex);
+ void removeTool(UBToolWidget* toolWidget);
+ void hide();
+ void show();
+ void setWidePageSize(bool checked);
+ void setRegularPageSize(bool checked);
+ void stylusToolChanged(int tool);
+ void grabScene(const QRectF& pSceneRect);
+ UBGraphicsMediaItem* addVideo(const QUrl& pUrl, bool startPlay, const QPointF& pos, bool bUseSource = false);
+ UBGraphicsMediaItem* addAudio(const QUrl& pUrl, bool startPlay, const QPointF& pos, bool bUseSource = false);
+ UBGraphicsWidgetItem *addW3cWidget(const QUrl& pUrl, const QPointF& pos);
+
+ void cut();
+ void copy();
+ void paste();
+ void processMimeData(const QMimeData* pMimeData, const QPointF& pPos);
+ void moveGraphicsWidgetToControlView(UBGraphicsWidgetItem* graphicWidget);
+ void moveToolWidgetToScene(UBToolWidget* toolWidget);
+ void addItem();
+
+ void freezeW3CWidgets(bool freeze);
+ void freezeW3CWidget(QGraphicsItem* item, bool freeze);
+ void startScript();
+ void stopScript();
+
+ signals:
+ void newPageAdded();
+ void activeSceneChanged();
+ void zoomChanged(qreal pZoomFactor);
+ void systemScaleFactorChanged(qreal pSystemScaleFactor);
+ void penColorChanged();
+ void controlViewportChanged();
+ void backgroundChanged();
+ void cacheEnabled();
+ void cacheDisabled();
+ void pageChanged();
+ void documentReorganized(int index);
+ void displayMetadata(QMap<QString, QString> metadata);
+ void pageSelectionChanged(int index);
+ void npapiWidgetCreated(const QString &Url);
+
+ protected:
+ void setupViews();
+ void setupToolbar();
+ void connectToolbar();
+ void initToolbarTexts();
+ void updateActionStates();
+ void updateSystemScaleFactor();
+ QString truncate(QString text, int maxWidth);
+
+ protected slots:
+ void selectionChanged();
+ void undoRedoStateChange(bool canUndo);
+ void documentSceneChanged(UBDocumentProxy* proxy, int pIndex);
+
+ private:
+ void updatePageSizeState();
+ void saveViewState();
+ void adjustDisplayViews();
+
+ UBMainWindow *mMainWindow;
+ UBGraphicsScene* mActiveScene;
+ int mActiveSceneIndex;
+ UBBoardPaletteManager *mPaletteManager;
+ UBSoftwareUpdateDialog *mSoftwareUpdateDialog;
+ UBMessageWindow *mMessageWindow;
+ UBBoardView *mControlView;
+ UBBoardView *mDisplayView;
+ QWidget *mControlContainer;
+ UBDocumentNavigator *mDocumentNavigator;
+ QHBoxLayout *mControlLayout;
+ qreal mZoomFactor;
+ bool mIsClosing;
+ QColor mPenColorOnDarkBackground;
+ QColor mPenColorOnLightBackground;
+ QColor mMarkerColorOnDarkBackground;
+ QColor mMarkerColorOnLightBackground;
+ qreal mSystemScaleFactor;
+ bool mCleanupDone;
+ QMap<QAction*, QPair<QString, QString> > mActionTexts;
+ bool mCacheWidgetIsEnabled;
+ QGraphicsItem* mLastCreatedItem;
+ int mDeletingSceneIndex;
+ int mMovingSceneIndex;
+ QString mActionGroupText;
+ QString mActionUngroupText;
+
+ private slots:
+ void stylusToolDoubleClicked(int tool);
+ void boardViewResized(QResizeEvent* event);
+ void documentWillBeDeleted(UBDocumentProxy* pProxy);
+ void updateBackgroundActionsState(bool isDark, bool isCrossed);
+ void updateBackgroundState();
+ void colorPaletteChanged();
+ void libraryDialogClosed(int ret);
+ void lastWindowClosed();
+ void onDownloadModalFinished();
+
+};
+
+
+#endif /* UBBOARDCONTROLLER_H_ */
diff --git a/Sankore-3.1/src/board/UBBoardPaletteManager.cpp b/Sankore-3.1/src/board/UBBoardPaletteManager.cpp
index 8c9e84a..c460919 100644
--- a/Sankore-3.1/src/board/UBBoardPaletteManager.cpp
+++ b/Sankore-3.1/src/board/UBBoardPaletteManager.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,998 +18,1026 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBBoardPaletteManager.h"
-
-#include "frameworks/UBPlatformUtils.h"
-#include "frameworks/UBFileSystemUtils.h"
-
-#include "core/UBApplication.h"
-#include "core/UBApplicationController.h"
-#include "core/UBSettings.h"
-#include "core/UBSetting.h"
-#include "core/UBDisplayManager.h"
-
-#include "gui/UBMainWindow.h"
-#include "gui/UBStylusPalette.h"
-#include "gui/UBKeyboardPalette.h"
-#include "gui/UBToolWidget.h"
-#include "gui/UBZoomPalette.h"
-#include "gui/UBWebToolsPalette.h"
-#include "gui/UBActionPalette.h"
-#include "gui/UBFavoriteToolPalette.h"
-#include "gui/UBDockTeacherGuideWidget.h"
-
-
-#include "web/UBWebPage.h"
-#include "web/UBWebController.h"
-#include "web/browser/WBBrowserWindow.h"
-#include "web/browser/WBTabWidget.h"
-#include "web/browser/WBWebView.h"
-
-#include "desktop/UBDesktopAnnotationController.h"
-
-
-#include "network/UBNetworkAccessManager.h"
-#include "network/UBServerXMLHttpRequest.h"
-
-#include "domain/UBGraphicsScene.h"
-#include "domain/UBGraphicsPixmapItem.h"
-
-#include "document/UBDocumentProxy.h"
-#include "podcast/UBPodcastController.h"
-#include "board/UBDrawingController.h"
-
-#include "tools/UBToolsManager.h"
-
-#include "UBBoardController.h"
-
-#include "document/UBDocumentController.h"
-
-#include "core/memcheck.h"
-
-UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardController* pBoardController)
- : QObject(container)
- , mKeyboardPalette(0)
- , mWebToolsCurrentPalette(0)
- , mContainer(container)
- , mBoardControler(pBoardController)
- , mStylusPalette(0)
- , mZoomPalette(0)
- , mLeftPalette(NULL)
- , mRightPalette(NULL)
- , mBackgroundsPalette(0)
- , mToolsPalette(0)
- , mAddItemPalette(0)
- , mErasePalette(NULL)
- , mPagePalette(NULL)
- , mPendingPageButtonPressed(false)
- , mPendingZoomButtonPressed(false)
- , mPendingPanButtonPressed(false)
- , mPendingEraseButtonPressed(false)
- , mpPageNavigWidget(NULL)
- , mpCachePropWidget(NULL)
- , mpDownloadWidget(NULL)
- , mpTeacherGuideWidget(NULL)
- , mDownloadInProgress(false)
-{
- setupPalettes();
- connectPalettes();
-}
-
-
-UBBoardPaletteManager::~UBBoardPaletteManager()
-{
-
-// mAddedItemPalette is delete automatically because of is parent
-// that changes depending on the mode
-
-// mMainWindow->centralWidget is the parent of mStylusPalette
-// do not delete this here.
-}
-
-void UBBoardPaletteManager::initPalettesPosAtStartup()
-{
- mStylusPalette->initPosition();
-}
-
-void UBBoardPaletteManager::setupLayout()
-{
-
-}
-
-/**
- * \brief Set up the dock palette widgets
- */
-void UBBoardPaletteManager::setupDockPaletteWidgets()
-{
-
- //------------------------------------------------//
- // Create the widgets for the dock palettes
-
- mpPageNavigWidget = new UBPageNavigationWidget();
-
- mpCachePropWidget = new UBCachePropertiesWidget();
-
- mpDownloadWidget = new UBDockDownloadWidget();
-
- // Add the dock palettes
- mLeftPalette = new UBLeftPalette(mContainer);
-
- // LEFT palette widgets
- mpPageNavigWidget = new UBPageNavigationWidget();
- mLeftPalette->registerWidget(mpPageNavigWidget);
- mLeftPalette->addTab(mpPageNavigWidget);
-
- if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool() || UBSettings::settings()->teacherGuideLessonPagesActivated->get().toBool()){
- mpTeacherGuideWidget = new UBDockTeacherGuideWidget();
- mLeftPalette->registerWidget(mpTeacherGuideWidget);
- mLeftPalette->addTab(mpTeacherGuideWidget);
- }
-
- mLeftPalette->connectSignals();
-
- mRightPalette = new UBRightPalette(mContainer);
- // RIGHT palette widgets
-#ifndef USE_WEB_WIDGET
- mpFeaturesWidget = new UBFeaturesWidget();
- mRightPalette->registerWidget(mpFeaturesWidget);
- mRightPalette->addTab(mpFeaturesWidget);
-#endif
-
- //Do not show deprecated lib widget to prevent collisions. Uncomment to return lib widget
-
-#ifdef USE_WEB_WIDGET
- mRightPalette->registerWidget(mpLibWidget);
- mRightPalette->addTab(mpLibWidget);
-#endif
-
-
- // The cache widget will be visible only if a cache is put on the page
- mRightPalette->registerWidget(mpCachePropWidget);
-
- // The download widget will be part of the right palette but
- // will become visible only when the first download starts
- mRightPalette->registerWidget(mpDownloadWidget);
- mRightPalette->connectSignals();
- changeMode(eUBDockPaletteWidget_BOARD, true);
-
- // Hide the tabs that must be hidden
- mRightPalette->removeTab(mpDownloadWidget);
- mRightPalette->removeTab(mpCachePropWidget);
-
-}
-
-void UBBoardPaletteManager::slot_changeMainMode(UBApplicationController::MainMode mainMode)
-{
-// Board = 0, Internet, Document, Tutorial, ParaschoolEditor, WebDocument
-
- switch( mainMode )
- {
- case UBApplicationController::Board:
- {
- // call changeMode only when switch NOT from desktop mode
- if(!UBApplication::applicationController->isShowingDesktop())
- changeMode(eUBDockPaletteWidget_BOARD);
- }
- break;
-
- case UBApplicationController::Tutorial:
- {
- if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
- mKeyboardPalette->hide();
- }
- break;
-
- case UBApplicationController::Internet:
- changeMode(eUBDockPaletteWidget_WEB);
- break;
-
- case UBApplicationController::Document:
- changeMode(eUBDockPaletteWidget_DOCUMENT);
- break;
-
- default:
- {
- if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
- mKeyboardPalette->hide();
- }
- break;
- }
-}
-
-void UBBoardPaletteManager::slot_changeDesktopMode(bool isDesktop)
-{
- UBApplicationController::MainMode currMode = UBApplication::applicationController->displayMode();
- if(!isDesktop)
- {
- switch( currMode )
- {
- case UBApplicationController::Board:
- changeMode(eUBDockPaletteWidget_BOARD);
- break;
-
- default:
- break;
- }
- }
- else
- changeMode(eUBDockPaletteWidget_DESKTOP);
-}
-
-void UBBoardPaletteManager::setupPalettes()
-{
-
- if (UBPlatformUtils::hasVirtualKeyboard())
- {
- mKeyboardPalette = new UBKeyboardPalette(0);
-#ifndef Q_WS_WIN
- connect(mKeyboardPalette, SIGNAL(closed()), mKeyboardPalette, SLOT(onDeactivated()));
-#endif
- }
-
-
- setupDockPaletteWidgets();
-
-
- // Add the other palettes
- mStylusPalette = new UBStylusPalette(mContainer, UBSettings::settings()->appToolBarOrientationVertical->get().toBool() ? Qt::Vertical : Qt::Horizontal);
- connect(mStylusPalette, SIGNAL(stylusToolDoubleClicked(int)), UBApplication::boardController, SLOT(stylusToolDoubleClicked(int)));
- mStylusPalette->show(); // always show stylus palette at startup
-
- mZoomPalette = new UBZoomPalette(mContainer);
-
- mStylusPalette->stackUnder(mZoomPalette);
-
- QList<QAction*> backgroundsActions;
-
- backgroundsActions << UBApplication::mainWindow->actionPlainLightBackground;
- backgroundsActions << UBApplication::mainWindow->actionCrossedLightBackground;
- backgroundsActions << UBApplication::mainWindow->actionPlainDarkBackground;
- backgroundsActions << UBApplication::mainWindow->actionCrossedDarkBackground;
-
- mBackgroundsPalette = new UBActionPalette(backgroundsActions, Qt::Horizontal , mContainer);
- mBackgroundsPalette->setButtonIconSize(QSize(128, 128));
- mBackgroundsPalette->groupActions();
- mBackgroundsPalette->setClosable(true);
- mBackgroundsPalette->setAutoClose(true);
- mBackgroundsPalette->adjustSizeAndPosition();
- mBackgroundsPalette->hide();
-
- QList<QAction*> addItemActions;
-
- addItemActions << UBApplication::mainWindow->actionAddItemToCurrentPage;
- addItemActions << UBApplication::mainWindow->actionAddItemToNewPage;
- addItemActions << UBApplication::mainWindow->actionAddItemToLibrary;
-
- mAddItemPalette = new UBActionPalette(addItemActions, Qt::Horizontal, mContainer);
- mAddItemPalette->setButtonIconSize(QSize(128, 128));
- mAddItemPalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- mAddItemPalette->groupActions();
- mAddItemPalette->setClosable(true);
- mAddItemPalette->adjustSizeAndPosition();
- mAddItemPalette->hide();
-
- QList<QAction*> eraseActions;
-
- eraseActions << UBApplication::mainWindow->actionEraseAnnotations;
- eraseActions << UBApplication::mainWindow->actionEraseItems;
- eraseActions << UBApplication::mainWindow->actionClearPage;
- eraseActions << UBApplication::mainWindow->actionEraseBackground;
-
- mErasePalette = new UBActionPalette(eraseActions, Qt::Horizontal , mContainer);
- mErasePalette->setButtonIconSize(QSize(128, 128));
- mErasePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- mErasePalette->groupActions();
- mErasePalette->setClosable(true);
- mErasePalette->adjustSizeAndPosition();
- mErasePalette->hide();
-
- QList<QAction*> pageActions;
-
- pageActions << UBApplication::mainWindow->actionNewPage;
- pageActions << UBApplication::mainWindow->actionDuplicatePage;
- pageActions << UBApplication::mainWindow->actionImportPage;
-
- mPagePalette = new UBActionPalette(pageActions, Qt::Horizontal , mContainer);
- mPagePalette->setButtonIconSize(QSize(128, 128));
- mPagePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- mPagePalette->groupActions();
- mPagePalette->setClosable(true);
- mPagePalette->adjustSizeAndPosition();
- mPagePalette->hide();
-
- connect(UBSettings::settings()->appToolBarOrientationVertical, SIGNAL(changed(QVariant)), this, SLOT(changeStylusPaletteOrientation(QVariant)));
-}
-
-void UBBoardPaletteManager::pagePaletteButtonPressed()
-{
- mPageButtonPressedTime = QTime::currentTime();
-
- mPendingPageButtonPressed = true;
- QTimer::singleShot(1000, this, SLOT(pagePaletteButtonReleased()));
-}
-
-
-void UBBoardPaletteManager::pagePaletteButtonReleased()
-{
- if (mPendingPageButtonPressed)
- {
- if( mPageButtonPressedTime.msecsTo(QTime::currentTime()) > 900)
- {
- // The palette is reinstanciated because the duplication depends on the current scene
- delete(mPagePalette);
- mPagePalette = 0;
- QList<QAction*>pageActions;
- pageActions << UBApplication::mainWindow->actionNewPage;
- UBBoardController* boardController = UBApplication::boardController;
- if(UBApplication::documentController->pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(boardController->activeSceneIndex()))){
- pageActions << UBApplication::mainWindow->actionDuplicatePage;
- }
- pageActions << UBApplication::mainWindow->actionImportPage;
-
- mPagePalette = new UBActionPalette(pageActions, Qt::Horizontal , mContainer);
- mPagePalette->setButtonIconSize(QSize(128, 128));
- mPagePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- mPagePalette->groupActions();
- mPagePalette->setClosable(true);
-
- // As we recreate the pagePalette every time, we must reconnect the slots
- connect(UBApplication::mainWindow->actionNewPage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
- connect(UBApplication::mainWindow->actionDuplicatePage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
- connect(UBApplication::mainWindow->actionImportPage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
- connect(mPagePalette, SIGNAL(closed()), this, SLOT(pagePaletteClosed()));
-
- togglePagePalette(true);
- }
- else
- {
- UBApplication::mainWindow->actionNewPage->trigger();
- }
-
- mPendingPageButtonPressed = false;
- }
-}
-
-void UBBoardPaletteManager::erasePaletteButtonPressed()
-{
- mEraseButtonPressedTime = QTime::currentTime();
-
- mPendingEraseButtonPressed = true;
- QTimer::singleShot(1000, this, SLOT(erasePaletteButtonReleased()));
-}
-
-
-void UBBoardPaletteManager::erasePaletteButtonReleased()
-{
- if (mPendingEraseButtonPressed)
- {
- if( mEraseButtonPressedTime.msecsTo(QTime::currentTime()) > 900)
- {
- toggleErasePalette(true);
- }
- else
- {
- UBApplication::mainWindow->actionClearPage->trigger();
- }
-
- mPendingEraseButtonPressed = false;
- }
-}
-
-
-
-void UBBoardPaletteManager::linkClicked(const QUrl& url)
-{
- UBApplication::applicationController->showInternet();
- UBApplication::webController->loadUrl(url);
-}
-
-
-void UBBoardPaletteManager::purchaseLinkActivated(const QString& link)
-{
- UBApplication::applicationController->showInternet();
- UBApplication::webController->loadUrl(QUrl(link));
-}
-
-void UBBoardPaletteManager::connectPalettes()
-{
- connect(UBApplication::mainWindow->actionStylus, SIGNAL(toggled(bool)), this, SLOT(toggleStylusPalette(bool)));
-
- foreach(QWidget *widget, UBApplication::mainWindow->actionZoomIn->associatedWidgets())
- {
- QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
- if (button)
- {
- connect(button, SIGNAL(pressed()), this, SLOT(zoomButtonPressed()));
- connect(button, SIGNAL(released()), this, SLOT(zoomButtonReleased()));
- }
- }
-
- foreach(QWidget *widget, UBApplication::mainWindow->actionZoomOut->associatedWidgets())
- {
- QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
- if (button)
- {
- connect(button, SIGNAL(pressed()), this, SLOT(zoomButtonPressed()));
- connect(button, SIGNAL(released()), this, SLOT(zoomButtonReleased()));
- }
- }
-
- foreach(QWidget *widget, UBApplication::mainWindow->actionHand->associatedWidgets())
- {
- QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
- if (button)
- {
- connect(button, SIGNAL(pressed()), this, SLOT(panButtonPressed()));
- connect(button, SIGNAL(released()), this, SLOT(panButtonReleased()));
- }
- }
-
- connect(UBApplication::mainWindow->actionBackgrounds, SIGNAL(toggled(bool)), this, SLOT(toggleBackgroundPalette(bool)));
- connect(mBackgroundsPalette, SIGNAL(closed()), this, SLOT(backgroundPaletteClosed()));
-
- connect(UBApplication::mainWindow->actionPlainLightBackground, SIGNAL(triggered()), this, SLOT(changeBackground()));
- connect(UBApplication::mainWindow->actionCrossedLightBackground, SIGNAL(triggered()), this, SLOT(changeBackground()));
- connect(UBApplication::mainWindow->actionPlainDarkBackground, SIGNAL(triggered()), this, SLOT(changeBackground()));
- connect(UBApplication::mainWindow->actionCrossedDarkBackground, SIGNAL(triggered()), this, SLOT(changeBackground()));
- connect(UBApplication::mainWindow->actionPodcast, SIGNAL(triggered(bool)), this, SLOT(tooglePodcastPalette(bool)));
-
- connect(UBApplication::mainWindow->actionAddItemToCurrentPage, SIGNAL(triggered()), this, SLOT(addItemToCurrentPage()));
- connect(UBApplication::mainWindow->actionAddItemToNewPage, SIGNAL(triggered()), this, SLOT(addItemToNewPage()));
- connect(UBApplication::mainWindow->actionAddItemToLibrary, SIGNAL(triggered()), this, SLOT(addItemToLibrary()));
-
- connect(UBApplication::mainWindow->actionEraseItems, SIGNAL(triggered()), mErasePalette, SLOT(close()));
- connect(UBApplication::mainWindow->actionEraseAnnotations, SIGNAL(triggered()), mErasePalette, SLOT(close()));
- connect(UBApplication::mainWindow->actionClearPage, SIGNAL(triggered()), mErasePalette, SLOT(close()));
- connect(UBApplication::mainWindow->actionEraseBackground,SIGNAL(triggered()),mErasePalette,SLOT(close()));
- connect(mErasePalette, SIGNAL(closed()), this, SLOT(erasePaletteClosed()));
-
- foreach(QWidget *widget, UBApplication::mainWindow->actionErase->associatedWidgets())
- {
- QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
- if (button)
- {
- connect(button, SIGNAL(pressed()), this, SLOT(erasePaletteButtonPressed()));
- connect(button, SIGNAL(released()), this, SLOT(erasePaletteButtonReleased()));
- }
- }
-
- connect(UBApplication::mainWindow->actionNewPage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
- connect(UBApplication::mainWindow->actionDuplicatePage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
- connect(UBApplication::mainWindow->actionImportPage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
- connect(mPagePalette, SIGNAL(closed()), this, SLOT(pagePaletteClosed()));
-
- foreach(QWidget *widget, UBApplication::mainWindow->actionPages->associatedWidgets())
- {
- QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
- if (button)
- {
- connect(button, SIGNAL(pressed()), this, SLOT(pagePaletteButtonPressed()));
- connect(button, SIGNAL(released()), this, SLOT(pagePaletteButtonReleased()));
- }
- }
-
-}
-
-
-bool isFirstResized = true;
-void UBBoardPaletteManager::containerResized()
-{
- int innerMargin = UBSettings::boardMargin;
-
- int userLeft = innerMargin;
- int userWidth = mContainer->width() - (2 * innerMargin);
- int userTop = innerMargin;
- int userHeight = mContainer->height() - (2 * innerMargin);
-
- if(mStylusPalette)
- {
- mStylusPalette->move(userLeft, userTop);
- mStylusPalette->adjustSizeAndPosition();
- mStylusPalette->initPosition();
- }
-
- if(mZoomPalette)
- {
- mZoomPalette->move(userLeft + userWidth - mZoomPalette->width()
- , userTop + userHeight /*- mPageNumberPalette->height()*/ - innerMargin - mZoomPalette->height());
- mZoomPalette->adjustSizeAndPosition();
- }
-
- if (isFirstResized && mKeyboardPalette && mKeyboardPalette->parent() == UBApplication::boardController->controlContainer())
- {
- isFirstResized = false;
- mKeyboardPalette->move(userLeft + (userWidth - mKeyboardPalette->width())/2,
- userTop + (userHeight - mKeyboardPalette->height())/2);
- mKeyboardPalette->adjustSizeAndPosition();
- }
-
- if(mLeftPalette)
- {
- mLeftPalette->resize(mLeftPalette->width()-1, mContainer->height());
- mLeftPalette->resize(mLeftPalette->width(), mContainer->height());
- }
-
- if(mRightPalette)
- {
- mRightPalette->resize(mRightPalette->width()-1, mContainer->height());
- mRightPalette->resize(mRightPalette->width(), mContainer->height());
- }
-}
-
-
-void UBBoardPaletteManager::changeBackground()
-{
- if (UBApplication::mainWindow->actionCrossedLightBackground->isChecked())
- UBApplication::boardController->changeBackground(false, true);
- else if (UBApplication::mainWindow->actionPlainDarkBackground->isChecked())
- UBApplication::boardController->changeBackground(true, false);
- else if (UBApplication::mainWindow->actionCrossedDarkBackground->isChecked())
- UBApplication::boardController->changeBackground(true, true);
- else
- UBApplication::boardController->changeBackground(false, false);
-
- UBApplication::mainWindow->actionBackgrounds->setChecked(false);
-}
-
-
-void UBBoardPaletteManager::activeSceneChanged()
-{
- UBGraphicsScene *activeScene = UBApplication::boardController->activeScene();
- int pageIndex = UBApplication::boardController->activeSceneIndex();
-
- if (mStylusPalette)
- connect(mStylusPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser()));
-
- if (mpPageNavigWidget)
- {
- mpPageNavigWidget->setPageNumber(UBDocumentContainer::pageFromSceneIndex(pageIndex), activeScene->document()->pageCount());
- }
-
- if (mZoomPalette)
- connect(mZoomPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser()));
-
- if (mBackgroundsPalette)
- connect(mBackgroundsPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser()));
-}
-
-
-void UBBoardPaletteManager::toggleBackgroundPalette(bool checked)
-{
- mBackgroundsPalette->setVisible(checked);
-
- if (checked)
- {
- UBApplication::mainWindow->actionErase->setChecked(false);
- UBApplication::mainWindow->actionNewPage->setChecked(false);
-
- mBackgroundsPalette->adjustSizeAndPosition();
- mBackgroundsPalette->move((mContainer->width() - mBackgroundsPalette->width()) / 2,
- (mContainer->height() - mBackgroundsPalette->height()) / 5);
- }
-}
-
-
-void UBBoardPaletteManager::backgroundPaletteClosed()
-{
- UBApplication::mainWindow->actionBackgrounds->setChecked(false);
-}
-
-
-void UBBoardPaletteManager::toggleStylusPalette(bool checked)
-{
- mStylusPalette->setVisible(checked);
-}
-
-
-void UBBoardPaletteManager::toggleErasePalette(bool checked)
-{
- mErasePalette->setVisible(checked);
- if (checked)
- {
- UBApplication::mainWindow->actionBackgrounds->setChecked(false);
- UBApplication::mainWindow->actionNewPage->setChecked(false);
-
- mErasePalette->adjustSizeAndPosition();
- mErasePalette->move((mContainer->width() - mErasePalette->width()) / 2,
- (mContainer->height() - mErasePalette->height()) / 5);
- }
-}
-
-
-void UBBoardPaletteManager::erasePaletteClosed()
-{
- UBApplication::mainWindow->actionErase->setChecked(false);
-}
-
-
-void UBBoardPaletteManager::togglePagePalette(bool checked)
-{
- mPagePalette->setVisible(checked);
- if (checked)
- {
- UBApplication::mainWindow->actionBackgrounds->setChecked(false);
- UBApplication::mainWindow->actionErase->setChecked(false);
-
- mPagePalette->adjustSizeAndPosition();
- mPagePalette->move((mContainer->width() - mPagePalette->width()) / 2,
- (mContainer->height() - mPagePalette->height()) / 5);
- }
-}
-
-
-void UBBoardPaletteManager::pagePaletteClosed()
-{
- UBApplication::mainWindow->actionPages->setChecked(false);
-}
-
-
-void UBBoardPaletteManager::tooglePodcastPalette(bool checked)
-{
- UBPodcastController::instance()->toggleRecordingPalette(checked);
-}
-
-
-void UBBoardPaletteManager::addItem(const QUrl& pUrl)
-{
- mItemUrl = pUrl;
- mPixmap = QPixmap();
- mPos = QPointF(0, 0);
- mScaleFactor = 1.;
-
- mAddItemPalette->show();
- mAddItemPalette->adjustSizeAndPosition();
-
- mAddItemPalette->move((mContainer->width() - mAddItemPalette->width()) / 2,
- (mContainer->height() - mAddItemPalette->height()) / 5);
-}
-
-void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool isInit)
-{
- bool rightPaletteVisible = mRightPalette->switchMode(newMode);
- bool leftPaletteVisible = mLeftPalette->switchMode(newMode);
-
- switch( newMode )
- {
- case eUBDockPaletteWidget_BOARD:
- {
- // On Application start up the mAddItemPalette isn't initialized yet
- if(mAddItemPalette){
- mAddItemPalette->setParent(UBApplication::boardController->controlContainer());
- }
- mLeftPalette->assignParent(mContainer);
- mRightPalette->assignParent(mContainer);
- mRightPalette->stackUnder(mStylusPalette);
- mLeftPalette->stackUnder(mStylusPalette);
- if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
- {
-
- if(mKeyboardPalette->m_isVisible)
- {
- mKeyboardPalette->hide();
- mKeyboardPalette->setParent(UBApplication::boardController->controlContainer());
- mKeyboardPalette->show();
- }
- else
- mKeyboardPalette->setParent(UBApplication::boardController->controlContainer());
- }
-
- mLeftPalette->setVisible(leftPaletteVisible);
- mRightPalette->setVisible(rightPaletteVisible);
-#ifdef Q_WS_WIN
- if (rightPaletteVisible)
- mRightPalette->setAdditionalVOffset(0);
-#endif
-
- if( !isInit )
- containerResized();
- if (mWebToolsCurrentPalette)
- mWebToolsCurrentPalette->hide();
- }
- break;
-
- case eUBDockPaletteWidget_DESKTOP:
- {
- mAddItemPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
- mLeftPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
- mRightPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
- mStylusPalette->raise();
-
- if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
- {
-
- if(mKeyboardPalette->m_isVisible)
- {
- mKeyboardPalette->hide();
-#ifndef Q_WS_X11
- mKeyboardPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
-#else
- mKeyboardPalette->setParent(0);
-#endif
-#ifdef Q_WS_MAC
- mKeyboardPalette->setWindowFlags(Qt::Dialog | Qt::Popup | Qt::FramelessWindowHint);
-#endif
- mKeyboardPalette->show();
- }
- else
-// In linux keyboard in desktop mode have to allways be with null parent
-#ifdef Q_WS_X11
- mKeyboardPalette->setParent(0);
-#else
- mKeyboardPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
-#endif //Q_WS_X11
-#ifdef Q_WS_MAC
- mKeyboardPalette->setWindowFlags(Qt::Dialog | Qt::Popup | Qt::FramelessWindowHint);
-#endif
-
- }
-
- mLeftPalette->setVisible(leftPaletteVisible);
- mRightPalette->setVisible(rightPaletteVisible);
-#ifdef Q_WS_WIN
- if (rightPaletteVisible && UBSettings::settings()->appToolBarPositionedAtTop->get().toBool())
- mRightPalette->setAdditionalVOffset(30);
-#endif
-
- if(!isInit)
- UBApplication::applicationController->uninotesController()->TransparentWidgetResized();
-
- if (mWebToolsCurrentPalette)
- mWebToolsCurrentPalette->hide();
- }
- break;
-
- case eUBDockPaletteWidget_WEB:
- {
- mAddItemPalette->setParent(UBApplication::mainWindow);
- if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
- {
-// tmp variable?
-// WBBrowserWindow* brWnd = UBApplication::webController->GetCurrentWebBrowser();
-
- if(mKeyboardPalette->m_isVisible)
- {
- mKeyboardPalette->hide();
- mKeyboardPalette->setParent(UBApplication::mainWindow);
- mKeyboardPalette->show();
- }
- else
- mKeyboardPalette->setParent(UBApplication::mainWindow);
- }
-
- }
- break;
-
- case eUBDockPaletteWidget_DOCUMENT:
- {
- mLeftPalette->setVisible(leftPaletteVisible);
- mRightPalette->setVisible(rightPaletteVisible);
- mLeftPalette->assignParent(UBApplication::documentController->controlView());
- mRightPalette->assignParent(UBApplication::documentController->controlView());
- if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
- {
-
- if(mKeyboardPalette->m_isVisible)
- {
- mKeyboardPalette->hide();
- mKeyboardPalette->setParent(UBApplication::documentController->controlView());
- mKeyboardPalette->show();
- }
- else
- mKeyboardPalette->setParent(UBApplication::documentController->controlView());
- }
- if (mWebToolsCurrentPalette)
- mWebToolsCurrentPalette->hide();
- }
- break;
-
- default:
- {
- mLeftPalette->setVisible(leftPaletteVisible);
- mRightPalette->setVisible(rightPaletteVisible);
- mLeftPalette->assignParent(0);
- mRightPalette->assignParent(0);
- if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
- {
-
- if(mKeyboardPalette->m_isVisible)
- {
- mKeyboardPalette->hide();
- mKeyboardPalette->setParent(0);
- mKeyboardPalette->show();
- }
- else
- mKeyboardPalette->setParent(0);
- }
- }
- break;
- }
-
- if( !isInit )
- UBApplication::boardController->notifyPageChanged();
-
- emit signal_changeMode(newMode);
-}
-
-void UBBoardPaletteManager::addItem(const QPixmap& pPixmap, const QPointF& pos, qreal scaleFactor, const QUrl& sourceUrl)
-{
- mItemUrl = sourceUrl;
- mPixmap = pPixmap;
- mPos = pos;
- mScaleFactor = scaleFactor;
-
- mAddItemPalette->show();
- mAddItemPalette->adjustSizeAndPosition();
-
- mAddItemPalette->move((mContainer->width() - mAddItemPalette->width()) / 2,
- (mContainer->height() - mAddItemPalette->height()) / 5);
-}
-
-
-void UBBoardPaletteManager::addItemToCurrentPage()
-{
- UBApplication::applicationController->showBoard();
- mAddItemPalette->hide();
- if(mPixmap.isNull())
- UBApplication::boardController->downloadURL(mItemUrl);
- else
- {
- UBGraphicsPixmapItem* item = UBApplication::boardController->activeScene()->addPixmap(mPixmap, NULL, mPos, mScaleFactor);
-
- item->setSourceUrl(mItemUrl);
- item->setSelected(true);
-
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
- }
-}
-
-
-void UBBoardPaletteManager::addItemToNewPage()
-{
- UBApplication::boardController->addScene();
- addItemToCurrentPage();
-}
-
-
-void UBBoardPaletteManager::addItemToLibrary()
-{
- if(mPixmap.isNull())
- {
- mPixmap = QPixmap(mItemUrl.toLocalFile());
- }
-
- if(!mPixmap.isNull())
- {
- if(mScaleFactor != 1.)
- {
- mPixmap = mPixmap.scaled(mScaleFactor * mPixmap.width(), mScaleFactor* mPixmap.height()
- , Qt::KeepAspectRatio, Qt::SmoothTransformation);
- }
- QImage image = mPixmap.toImage();
-
-#ifdef USE_WEB_WIDGET
- mpLibWidget->libNavigator()->libraryWidget()->libraryController()->importImageOnLibrary(image);
-#else
- QDateTime now = QDateTime::currentDateTime();
- QString capturedName = tr("CapturedImage") + "-" + now.toString("dd-MM-yyyy hh-mm-ss") + ".png";
- mpFeaturesWidget->importImage(image, capturedName);
-#endif
-
- }
- else
- {
- UBApplication::showMessage(tr("Error Adding Image to Library"));
- }
-
- mAddItemPalette->hide();
-}
-
-void UBBoardPaletteManager::zoomButtonPressed()
-{
- mZoomButtonPressedTime = QTime::currentTime();
-
- mPendingZoomButtonPressed = true;
- QTimer::singleShot(1000, this, SLOT(zoomButtonReleased()));
-}
-
-
-void UBBoardPaletteManager::zoomButtonReleased()
-{
- if (mPendingZoomButtonPressed)
- {
- if(mZoomButtonPressedTime.msecsTo(QTime::currentTime()) > 900)
- {
- mBoardControler->zoomRestore();
- }
-
- mPendingZoomButtonPressed = false;
- }
-}
-
-void UBBoardPaletteManager::panButtonPressed()
-{
- mPanButtonPressedTime = QTime::currentTime();
-
- mPendingPanButtonPressed = true;
- QTimer::singleShot(1000, this, SLOT(panButtonReleased()));
-}
-
-
-void UBBoardPaletteManager::panButtonReleased()
-{
- if (mPendingPanButtonPressed)
- {
- if(mPanButtonPressedTime.msecsTo(QTime::currentTime()) > 900)
- {
- mBoardControler->centerRestore();
- }
-
- mPendingPanButtonPressed = false;
- }
-}
-
-void UBBoardPaletteManager::showVirtualKeyboard(bool show)
-{
- if (mKeyboardPalette)
- mKeyboardPalette->setVisible(show);
-}
-
-void UBBoardPaletteManager::changeStylusPaletteOrientation(QVariant var)
-{
- bool bVertical = var.toBool();
- bool bVisible = mStylusPalette->isVisible();
-
- // Clean the old palette
- if(NULL != mStylusPalette)
- {
- delete mStylusPalette;
- mStylusPalette = NULL;
- }
-
- // Create the new palette
- if(bVertical)
- {
- mStylusPalette = new UBStylusPalette(mContainer, Qt::Vertical);
- }
- else
- {
- mStylusPalette = new UBStylusPalette(mContainer, Qt::Horizontal);
- }
-
- connect(mStylusPalette, SIGNAL(stylusToolDoubleClicked(int)), UBApplication::boardController, SLOT(stylusToolDoubleClicked(int)));
- mStylusPalette->setVisible(bVisible); // always show stylus palette at startup
-}
-
-
-void UBBoardPaletteManager::connectToDocumentController()
-{
- emit connectToDocController();
-}
-
-void UBBoardPaletteManager::refreshPalettes()
-{
- mRightPalette->update();
- mLeftPalette->update();
-}
-
-void UBBoardPaletteManager::startDownloads()
-{
- if(!mDownloadInProgress)
- {
- mDownloadInProgress = true;
- mpDownloadWidget->setVisibleState(true);
- mRightPalette->addTab(mpDownloadWidget);
- }
-}
-
-void UBBoardPaletteManager::stopDownloads()
-{
- if(mDownloadInProgress)
- {
- mDownloadInProgress = false;
- mpDownloadWidget->setVisibleState(false);
- mRightPalette->removeTab(mpDownloadWidget);
- }
-}
+
+
+
+#include "UBBoardPaletteManager.h"
+
+#include "frameworks/UBPlatformUtils.h"
+#include "frameworks/UBFileSystemUtils.h"
+
+#include "core/UBApplication.h"
+#include "core/UBApplicationController.h"
+#include "core/UBSettings.h"
+#include "core/UBSetting.h"
+#include "core/UBDisplayManager.h"
+
+#include "gui/UBMainWindow.h"
+#include "gui/UBStylusPalette.h"
+#include "gui/UBKeyboardPalette.h"
+#include "gui/UBToolWidget.h"
+#include "gui/UBZoomPalette.h"
+#include "gui/UBWebToolsPalette.h"
+#include "gui/UBActionPalette.h"
+#include "gui/UBFavoriteToolPalette.h"
+#include "gui/UBDockTeacherGuideWidget.h"
+#include "gui/UBStartupHintsPalette.h"
+#include "gui/UBCreateLinkPalette.h"
+
+
+#include "web/UBWebPage.h"
+#include "web/UBWebController.h"
+#include "web/browser/WBBrowserWindow.h"
+#include "web/browser/WBTabWidget.h"
+#include "web/browser/WBWebView.h"
+
+#include "desktop/UBDesktopAnnotationController.h"
+
+
+#include "network/UBNetworkAccessManager.h"
+#include "network/UBServerXMLHttpRequest.h"
+
+#include "domain/UBGraphicsScene.h"
+#include "domain/UBGraphicsPixmapItem.h"
+
+#include "document/UBDocumentProxy.h"
+#include "podcast/UBPodcastController.h"
+#include "board/UBDrawingController.h"
+
+#include "tools/UBToolsManager.h"
+
+#include "UBBoardController.h"
+
+#include "document/UBDocumentController.h"
+
+#include "core/memcheck.h"
+
+UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardController* pBoardController)
+ : QObject(container)
+ , mKeyboardPalette(0)
+ , mWebToolsCurrentPalette(0)
+ , mContainer(container)
+ , mBoardControler(pBoardController)
+ , mStylusPalette(0)
+ , mZoomPalette(0)
+ , mTipPalette(0)
+ , mLinkPalette(0)
+ , mLeftPalette(NULL)
+ , mRightPalette(NULL)
+ , mBackgroundsPalette(0)
+ , mToolsPalette(0)
+ , mAddItemPalette(0)
+ , mErasePalette(NULL)
+ , mPagePalette(NULL)
+ , mPendingPageButtonPressed(false)
+ , mPendingZoomButtonPressed(false)
+ , mPendingPanButtonPressed(false)
+ , mPendingEraseButtonPressed(false)
+ , mpPageNavigWidget(NULL)
+ , mpCachePropWidget(NULL)
+ , mpDownloadWidget(NULL)
+ , mpTeacherGuideWidget(NULL)
+ , mDownloadInProgress(false)
+{
+ setupPalettes();
+ connectPalettes();
+}
+
+
+UBBoardPaletteManager::~UBBoardPaletteManager()
+{
+
+// mAddedItemPalette is delete automatically because of is parent
+// that changes depending on the mode
+
+// mMainWindow->centralWidget is the parent of mStylusPalette
+// do not delete this here.
+}
+
+void UBBoardPaletteManager::initPalettesPosAtStartup()
+{
+ mStylusPalette->initPosition();
+}
+
+void UBBoardPaletteManager::setupLayout()
+{
+
+}
+
+/**
+ * \brief Set up the dock palette widgets
+ */
+void UBBoardPaletteManager::setupDockPaletteWidgets()
+{
+
+ //------------------------------------------------//
+ // Create the widgets for the dock palettes
+
+ mpCachePropWidget = new UBCachePropertiesWidget();
+
+ mpDownloadWidget = new UBDockDownloadWidget();
+
+ // Add the dock palettes
+ mLeftPalette = new UBLeftPalette(mContainer);
+
+ // LEFT palette widgets
+ mpPageNavigWidget = new UBPageNavigationWidget();
+ mLeftPalette->registerWidget(mpPageNavigWidget);
+ mLeftPalette->addTab(mpPageNavigWidget);
+
+ if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool() || UBSettings::settings()->teacherGuideLessonPagesActivated->get().toBool()){
+ mpTeacherGuideWidget = new UBDockTeacherGuideWidget();
+ mLeftPalette->registerWidget(mpTeacherGuideWidget);
+ mLeftPalette->addTab(mpTeacherGuideWidget);
+ }
+
+ mLeftPalette->connectSignals();
+
+ mRightPalette = new UBRightPalette(mContainer);
+ // RIGHT palette widgets
+ mpFeaturesWidget = new UBFeaturesWidget();
+ mRightPalette->registerWidget(mpFeaturesWidget);
+ mRightPalette->addTab(mpFeaturesWidget);
+
+
+ // The cache widget will be visible only if a cache is put on the page
+ mRightPalette->registerWidget(mpCachePropWidget);
+
+ // The download widget will be part of the right palette but
+ // will become visible only when the first download starts
+ mRightPalette->registerWidget(mpDownloadWidget);
+ mRightPalette->connectSignals();
+ changeMode(eUBDockPaletteWidget_BOARD, true);
+
+ // Hide the tabs that must be hidden
+ mRightPalette->removeTab(mpDownloadWidget);
+ mRightPalette->removeTab(mpCachePropWidget);
+
+}
+
+void UBBoardPaletteManager::slot_changeMainMode(UBApplicationController::MainMode mainMode)
+{
+// Board = 0, Internet, Document, Tutorial, ParaschoolEditor, WebDocument
+
+ switch( mainMode )
+ {
+ case UBApplicationController::Board:
+ {
+ // call changeMode only when switch NOT from desktop mode
+ if(!UBApplication::applicationController->isShowingDesktop())
+ changeMode(eUBDockPaletteWidget_BOARD);
+ }
+ break;
+
+ case UBApplicationController::Tutorial:
+ {
+ if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
+ mKeyboardPalette->hide();
+ }
+ break;
+
+ case UBApplicationController::Internet:
+ changeMode(eUBDockPaletteWidget_WEB);
+ break;
+
+ case UBApplicationController::Document:
+ changeMode(eUBDockPaletteWidget_DOCUMENT);
+ break;
+
+ default:
+ {
+ if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
+ mKeyboardPalette->hide();
+ }
+ break;
+ }
+}
+
+void UBBoardPaletteManager::slot_changeDesktopMode(bool isDesktop)
+{
+ UBApplicationController::MainMode currMode = UBApplication::applicationController->displayMode();
+ if(!isDesktop)
+ {
+ switch( currMode )
+ {
+ case UBApplicationController::Board:
+ changeMode(eUBDockPaletteWidget_BOARD);
+ break;
+
+ default:
+ break;
+ }
+ }
+ else
+ changeMode(eUBDockPaletteWidget_DESKTOP);
+}
+
+void UBBoardPaletteManager::setupPalettes()
+{
+
+ if (UBPlatformUtils::hasVirtualKeyboard())
+ {
+ mKeyboardPalette = new UBKeyboardPalette(0);
+#ifndef Q_WS_WIN
+ connect(mKeyboardPalette, SIGNAL(closed()), mKeyboardPalette, SLOT(onDeactivated()));
+#endif
+ }
+
+
+ setupDockPaletteWidgets();
+
+
+ // Add the other palettes
+ mStylusPalette = new UBStylusPalette(mContainer, UBSettings::settings()->appToolBarOrientationVertical->get().toBool() ? Qt::Vertical : Qt::Horizontal);
+ connect(mStylusPalette, SIGNAL(stylusToolDoubleClicked(int)), UBApplication::boardController, SLOT(stylusToolDoubleClicked(int)));
+ mStylusPalette->show(); // always show stylus palette at startup
+
+ mZoomPalette = new UBZoomPalette(mContainer);
+ mStylusPalette->stackUnder(mZoomPalette);
+
+ mTipPalette = new UBStartupHintsPalette(mContainer);
+
+ QList<QAction*> backgroundsActions;
+
+ backgroundsActions << UBApplication::mainWindow->actionPlainLightBackground;
+ backgroundsActions << UBApplication::mainWindow->actionCrossedLightBackground;
+ backgroundsActions << UBApplication::mainWindow->actionPlainDarkBackground;
+ backgroundsActions << UBApplication::mainWindow->actionCrossedDarkBackground;
+
+ mBackgroundsPalette = new UBActionPalette(backgroundsActions, Qt::Horizontal , mContainer);
+ mBackgroundsPalette->setButtonIconSize(QSize(128, 128));
+ mBackgroundsPalette->groupActions();
+ mBackgroundsPalette->setClosable(true);
+ mBackgroundsPalette->setAutoClose(true);
+ mBackgroundsPalette->adjustSizeAndPosition();
+ mBackgroundsPalette->hide();
+
+ QList<QAction*> addItemActions;
+
+ addItemActions << UBApplication::mainWindow->actionAddItemToCurrentPage;
+ addItemActions << UBApplication::mainWindow->actionAddItemToNewPage;
+ addItemActions << UBApplication::mainWindow->actionAddItemToLibrary;
+
+ mAddItemPalette = new UBActionPalette(addItemActions, Qt::Horizontal, mContainer);
+ mAddItemPalette->setButtonIconSize(QSize(128, 128));
+ mAddItemPalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ mAddItemPalette->groupActions();
+ mAddItemPalette->setClosable(true);
+ mAddItemPalette->adjustSizeAndPosition();
+ mAddItemPalette->hide();
+
+ QList<QAction*> eraseActions;
+
+ eraseActions << UBApplication::mainWindow->actionEraseAnnotations;
+ eraseActions << UBApplication::mainWindow->actionEraseItems;
+ eraseActions << UBApplication::mainWindow->actionClearPage;
+ eraseActions << UBApplication::mainWindow->actionEraseBackground;
+
+ mErasePalette = new UBActionPalette(eraseActions, Qt::Horizontal , mContainer);
+ mErasePalette->setButtonIconSize(QSize(128, 128));
+ mErasePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ mErasePalette->groupActions();
+ mErasePalette->setClosable(true);
+ mErasePalette->adjustSizeAndPosition();
+ mErasePalette->hide();
+
+ QList<QAction*> pageActions;
+
+ pageActions << UBApplication::mainWindow->actionNewPage;
+ pageActions << UBApplication::mainWindow->actionDuplicatePage;
+ pageActions << UBApplication::mainWindow->actionImportPage;
+
+ mPagePalette = new UBActionPalette(pageActions, Qt::Horizontal , mContainer);
+ mPagePalette->setButtonIconSize(QSize(128, 128));
+ mPagePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ mPagePalette->groupActions();
+ mPagePalette->setClosable(true);
+ mPagePalette->adjustSizeAndPosition();
+ mPagePalette->hide();
+
+ connect(UBSettings::settings()->appToolBarOrientationVertical, SIGNAL(changed(QVariant)), this, SLOT(changeStylusPaletteOrientation(QVariant)));
+}
+
+void UBBoardPaletteManager::pagePaletteButtonPressed()
+{
+ mPageButtonPressedTime = QTime::currentTime();
+
+ mPendingPageButtonPressed = true;
+ QTimer::singleShot(1000, this, SLOT(pagePaletteButtonReleased()));
+}
+
+
+void UBBoardPaletteManager::pagePaletteButtonReleased()
+{
+ if (mPendingPageButtonPressed)
+ {
+ if( mPageButtonPressedTime.msecsTo(QTime::currentTime()) > 900)
+ {
+ // The palette is reinstanciated because the duplication depends on the current scene
+ delete(mPagePalette);
+ mPagePalette = 0;
+ QList<QAction*>pageActions;
+ pageActions << UBApplication::mainWindow->actionNewPage;
+ UBBoardController* boardController = UBApplication::boardController;
+ if(UBApplication::documentController->pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(boardController->activeSceneIndex()))){
+ pageActions << UBApplication::mainWindow->actionDuplicatePage;
+ }
+ pageActions << UBApplication::mainWindow->actionImportPage;
+
+ mPagePalette = new UBActionPalette(pageActions, Qt::Horizontal , mContainer);
+ mPagePalette->setButtonIconSize(QSize(128, 128));
+ mPagePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ mPagePalette->groupActions();
+ mPagePalette->setClosable(true);
+
+ // As we recreate the pagePalette every time, we must reconnect the slots
+ connect(UBApplication::mainWindow->actionNewPage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
+ connect(UBApplication::mainWindow->actionDuplicatePage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
+ connect(UBApplication::mainWindow->actionImportPage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
+ connect(mPagePalette, SIGNAL(closed()), this, SLOT(pagePaletteClosed()));
+
+ togglePagePalette(true);
+ }
+ else
+ {
+ UBApplication::mainWindow->actionNewPage->trigger();
+ }
+
+ mPendingPageButtonPressed = false;
+ }
+}
+
+void UBBoardPaletteManager::erasePaletteButtonPressed()
+{
+ mEraseButtonPressedTime = QTime::currentTime();
+
+ mPendingEraseButtonPressed = true;
+ QTimer::singleShot(1000, this, SLOT(erasePaletteButtonReleased()));
+}
+
+
+void UBBoardPaletteManager::erasePaletteButtonReleased()
+{
+ if (mPendingEraseButtonPressed)
+ {
+ if( mEraseButtonPressedTime.msecsTo(QTime::currentTime()) > 900)
+ {
+ toggleErasePalette(true);
+ }
+ else
+ {
+ UBApplication::mainWindow->actionClearPage->trigger();
+ }
+
+ mPendingEraseButtonPressed = false;
+ }
+}
+
+
+
+void UBBoardPaletteManager::linkClicked(const QUrl& url)
+{
+ UBApplication::applicationController->showInternet();
+ UBApplication::webController->loadUrl(url);
+}
+
+
+void UBBoardPaletteManager::purchaseLinkActivated(const QString& link)
+{
+ UBApplication::applicationController->showInternet();
+ UBApplication::webController->loadUrl(QUrl(link));
+}
+
+void UBBoardPaletteManager::connectPalettes()
+{
+ connect(UBApplication::mainWindow->actionStylus, SIGNAL(toggled(bool)), this, SLOT(toggleStylusPalette(bool)));
+
+ foreach(QWidget *widget, UBApplication::mainWindow->actionZoomIn->associatedWidgets())
+ {
+ QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
+ if (button)
+ {
+ connect(button, SIGNAL(pressed()), this, SLOT(zoomButtonPressed()));
+ connect(button, SIGNAL(released()), this, SLOT(zoomButtonReleased()));
+ }
+ }
+
+ foreach(QWidget *widget, UBApplication::mainWindow->actionZoomOut->associatedWidgets())
+ {
+ QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
+ if (button)
+ {
+ connect(button, SIGNAL(pressed()), this, SLOT(zoomButtonPressed()));
+ connect(button, SIGNAL(released()), this, SLOT(zoomButtonReleased()));
+ }
+ }
+
+ foreach(QWidget *widget, UBApplication::mainWindow->actionHand->associatedWidgets())
+ {
+ QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
+ if (button)
+ {
+ connect(button, SIGNAL(pressed()), this, SLOT(panButtonPressed()));
+ connect(button, SIGNAL(released()), this, SLOT(panButtonReleased()));
+ }
+ }
+
+ connect(UBApplication::mainWindow->actionBackgrounds, SIGNAL(toggled(bool)), this, SLOT(toggleBackgroundPalette(bool)));
+ connect(mBackgroundsPalette, SIGNAL(closed()), this, SLOT(backgroundPaletteClosed()));
+
+ connect(UBApplication::mainWindow->actionPlainLightBackground, SIGNAL(triggered()), this, SLOT(changeBackground()));
+ connect(UBApplication::mainWindow->actionCrossedLightBackground, SIGNAL(triggered()), this, SLOT(changeBackground()));
+ connect(UBApplication::mainWindow->actionPlainDarkBackground, SIGNAL(triggered()), this, SLOT(changeBackground()));
+ connect(UBApplication::mainWindow->actionCrossedDarkBackground, SIGNAL(triggered()), this, SLOT(changeBackground()));
+ connect(UBApplication::mainWindow->actionPodcast, SIGNAL(triggered(bool)), this, SLOT(tooglePodcastPalette(bool)));
+
+ connect(UBApplication::mainWindow->actionAddItemToCurrentPage, SIGNAL(triggered()), this, SLOT(addItemToCurrentPage()));
+ connect(UBApplication::mainWindow->actionAddItemToNewPage, SIGNAL(triggered()), this, SLOT(addItemToNewPage()));
+ connect(UBApplication::mainWindow->actionAddItemToLibrary, SIGNAL(triggered()), this, SLOT(addItemToLibrary()));
+
+ connect(UBApplication::mainWindow->actionEraseItems, SIGNAL(triggered()), mErasePalette, SLOT(close()));
+ connect(UBApplication::mainWindow->actionEraseAnnotations, SIGNAL(triggered()), mErasePalette, SLOT(close()));
+ connect(UBApplication::mainWindow->actionClearPage, SIGNAL(triggered()), mErasePalette, SLOT(close()));
+ connect(UBApplication::mainWindow->actionEraseBackground,SIGNAL(triggered()),mErasePalette,SLOT(close()));
+ connect(mErasePalette, SIGNAL(closed()), this, SLOT(erasePaletteClosed()));
+
+ foreach(QWidget *widget, UBApplication::mainWindow->actionErase->associatedWidgets())
+ {
+ QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
+ if (button)
+ {
+ connect(button, SIGNAL(pressed()), this, SLOT(erasePaletteButtonPressed()));
+ connect(button, SIGNAL(released()), this, SLOT(erasePaletteButtonReleased()));
+ }
+ }
+
+ connect(UBApplication::mainWindow->actionNewPage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
+ connect(UBApplication::mainWindow->actionDuplicatePage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
+ connect(UBApplication::mainWindow->actionImportPage, SIGNAL(triggered()), mPagePalette, SLOT(close()));
+ connect(mPagePalette, SIGNAL(closed()), this, SLOT(pagePaletteClosed()));
+
+ foreach(QWidget *widget, UBApplication::mainWindow->actionPages->associatedWidgets())
+ {
+ QAbstractButton *button = qobject_cast<QAbstractButton*>(widget);
+ if (button)
+ {
+ connect(button, SIGNAL(pressed()), this, SLOT(pagePaletteButtonPressed()));
+ connect(button, SIGNAL(released()), this, SLOT(pagePaletteButtonReleased()));
+ }
+ }
+
+}
+
+
+bool isFirstResized = true;
+void UBBoardPaletteManager::containerResized()
+{
+ int innerMargin = UBSettings::boardMargin;
+
+ int userLeft = innerMargin;
+ int userWidth = mContainer->width() - (2 * innerMargin);
+ int userTop = innerMargin;
+ int userHeight = mContainer->height() - (2 * innerMargin);
+
+ if(mStylusPalette)
+ {
+ //mStylusPalette->move(userLeft, userTop);
+ mStylusPalette->adjustSizeAndPosition(true,false);
+ mStylusPalette->initPosition();
+ }
+
+ if(mZoomPalette)
+ {
+ mZoomPalette->move(userLeft + userWidth - mZoomPalette->width()
+ , userTop + userHeight /*- mPageNumberPalette->height()*/ - innerMargin - mZoomPalette->height());
+ mZoomPalette->adjustSizeAndPosition(true,false);
+ }
+
+ if (isFirstResized && mKeyboardPalette && mKeyboardPalette->parent() == UBApplication::boardController->controlContainer())
+ {
+ isFirstResized = false;
+ mKeyboardPalette->move(userLeft + (userWidth - mKeyboardPalette->width())/2,
+ userTop + (userHeight - mKeyboardPalette->height())/2);
+ mKeyboardPalette->adjustSizeAndPosition();
+ }
+
+ if(mLeftPalette)
+ {
+ mLeftPalette->resize(mLeftPalette->width()-1, mContainer->height());
+ mLeftPalette->resize(mLeftPalette->width(), mContainer->height());
+ }
+
+ if(mRightPalette)
+ {
+ mRightPalette->resize(mRightPalette->width()-1, mContainer->height());
+ mRightPalette->resize(mRightPalette->width(), mContainer->height());
+ }
+}
+
+
+void UBBoardPaletteManager::changeBackground()
+{
+ if (UBApplication::mainWindow->actionCrossedLightBackground->isChecked())
+ UBApplication::boardController->changeBackground(false, true);
+ else if (UBApplication::mainWindow->actionPlainDarkBackground->isChecked())
+ UBApplication::boardController->changeBackground(true, false);
+ else if (UBApplication::mainWindow->actionCrossedDarkBackground->isChecked())
+ UBApplication::boardController->changeBackground(true, true);
+ else
+ UBApplication::boardController->changeBackground(false, false);
+
+ UBApplication::mainWindow->actionBackgrounds->setChecked(false);
+}
+
+
+void UBBoardPaletteManager::activeSceneChanged()
+{
+ UBGraphicsScene *activeScene = UBApplication::boardController->activeScene();
+ int pageIndex = UBApplication::boardController->activeSceneIndex();
+
+ if (mStylusPalette)
+ connect(mStylusPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser()));
+
+ if (mpPageNavigWidget)
+ {
+ mpPageNavigWidget->setPageNumber(UBDocumentContainer::pageFromSceneIndex(pageIndex), activeScene->document()->pageCount());
+ }
+
+ if (mZoomPalette)
+ connect(mZoomPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser()));
+
+ if (mBackgroundsPalette)
+ connect(mBackgroundsPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser()));
+}
+
+
+void UBBoardPaletteManager::toggleBackgroundPalette(bool checked)
+{
+ mBackgroundsPalette->setVisible(checked);
+
+ if (checked)
+ {
+ UBApplication::mainWindow->actionErase->setChecked(false);
+ UBApplication::mainWindow->actionNewPage->setChecked(false);
+
+ mBackgroundsPalette->adjustSizeAndPosition();
+ }
+}
+
+
+void UBBoardPaletteManager::backgroundPaletteClosed()
+{
+ UBApplication::mainWindow->actionBackgrounds->setChecked(false);
+}
+
+
+void UBBoardPaletteManager::toggleStylusPalette(bool checked)
+{
+ mStylusPalette->setVisible(checked);
+}
+
+
+void UBBoardPaletteManager::toggleErasePalette(bool checked)
+{
+ mErasePalette->setVisible(checked);
+ if (checked)
+ {
+ UBApplication::mainWindow->actionBackgrounds->setChecked(false);
+ UBApplication::mainWindow->actionNewPage->setChecked(false);
+
+ mErasePalette->adjustSizeAndPosition();
+ }
+}
+
+
+void UBBoardPaletteManager::erasePaletteClosed()
+{
+ UBApplication::mainWindow->actionErase->setChecked(false);
+}
+
+
+void UBBoardPaletteManager::togglePagePalette(bool checked)
+{
+ mPagePalette->setVisible(checked);
+ if (checked)
+ {
+ UBApplication::mainWindow->actionBackgrounds->setChecked(false);
+ UBApplication::mainWindow->actionErase->setChecked(false);
+
+ mPagePalette->adjustSizeAndPosition();
+ }
+}
+
+
+void UBBoardPaletteManager::pagePaletteClosed()
+{
+ UBApplication::mainWindow->actionPages->setChecked(false);
+}
+
+
+void UBBoardPaletteManager::tooglePodcastPalette(bool checked)
+{
+ UBPodcastController::instance()->toggleRecordingPalette(checked);
+}
+
+
+void UBBoardPaletteManager::addItem(const QUrl& pUrl)
+{
+ mItemUrl = pUrl;
+ mPixmap = QPixmap();
+ mPos = QPointF(0, 0);
+ mScaleFactor = 1.;
+
+ mAddItemPalette->show();
+ mAddItemPalette->adjustSizeAndPosition();
+}
+
+void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool isInit)
+{
+ bool rightPaletteVisible = mRightPalette->switchMode(newMode);
+ bool leftPaletteVisible = mLeftPalette->switchMode(newMode);
+
+ if (newMode != eUBDockPaletteWidget_BOARD)
+ {
+ if (mBackgroundsPalette)
+ mBackgroundsPalette->savePos();
+ if (mKeyboardPalette)
+ mKeyboardPalette->savePos();
+ if (mZoomPalette)
+ mZoomPalette->savePos();
+ if (mPagePalette)
+ mPagePalette->savePos();
+ if (mErasePalette)
+ mErasePalette->savePos();
+ if (mAddItemPalette)
+ mAddItemPalette->savePos();
+ }
+ else
+ {
+ if (mBackgroundsPalette)
+ mBackgroundsPalette->restorePos();
+ if (mKeyboardPalette)
+ mKeyboardPalette->restorePos();
+ if (mZoomPalette)
+ mZoomPalette->restorePos();
+ if (mPagePalette)
+ mPagePalette->restorePos();
+ if (mErasePalette)
+ mErasePalette->restorePos();
+ if (mAddItemPalette)
+ mAddItemPalette->restorePos();
+ }
+
+
+ switch( newMode )
+ {
+ case eUBDockPaletteWidget_BOARD:
+ {
+ // On Application start up the mAddItemPalette isn't initialized yet
+ if(mAddItemPalette){
+ mAddItemPalette->setParent(UBApplication::boardController->controlContainer());
+ }
+ mLeftPalette->assignParent(mContainer);
+ mRightPalette->assignParent(mContainer);
+ mRightPalette->stackUnder(mStylusPalette);
+ mLeftPalette->stackUnder(mStylusPalette);
+ if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
+ {
+
+ if(mKeyboardPalette->m_isVisible)
+ {
+ mKeyboardPalette->hide();
+ mKeyboardPalette->setParent(UBApplication::boardController->controlContainer());
+ mKeyboardPalette->show();
+ }
+ else
+ mKeyboardPalette->setParent(UBApplication::boardController->controlContainer());
+ }
+
+ mLeftPalette->setVisible(leftPaletteVisible);
+ mRightPalette->setVisible(rightPaletteVisible);
+#ifdef Q_WS_WIN
+ if (rightPaletteVisible)
+ mRightPalette->setAdditionalVOffset(0);
+#endif
+
+ if( !isInit )
+ containerResized();
+ if (mWebToolsCurrentPalette)
+ mWebToolsCurrentPalette->hide();
+ }
+ break;
+
+ case eUBDockPaletteWidget_DESKTOP:
+ {
+ mAddItemPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
+ mLeftPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
+ mRightPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
+ mStylusPalette->raise();
+
+ if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
+ {
+
+ if(mKeyboardPalette->m_isVisible)
+ {
+ mKeyboardPalette->hide();
+#ifndef Q_WS_X11
+ mKeyboardPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
+#else
+ mKeyboardPalette->setParent(0);
+#endif
+#ifdef Q_WS_MAC
+ mKeyboardPalette->setWindowFlags(Qt::Dialog | Qt::Popup | Qt::FramelessWindowHint);
+#endif
+ mKeyboardPalette->show();
+ }
+ else
+// In linux keyboard in desktop mode have to allways be with null parent
+#ifdef Q_WS_X11
+ mKeyboardPalette->setParent(0);
+#else
+ mKeyboardPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView());
+#endif //Q_WS_X11
+#ifdef Q_WS_MAC
+ mKeyboardPalette->setWindowFlags(Qt::Dialog | Qt::Popup | Qt::FramelessWindowHint);
+#endif
+
+ }
+
+ mLeftPalette->setVisible(leftPaletteVisible);
+ mRightPalette->setVisible(rightPaletteVisible);
+#ifdef Q_WS_WIN
+ if (rightPaletteVisible)
+ {
+ if (UBSettings::settings()->appToolBarPositionedAtTop->get().toBool())
+ mRightPalette->setAdditionalVOffset(30);
+ else
+ {
+ QDesktopWidget *desktop = QApplication::desktop();
+ int taskBarOffset = desktop->screenGeometry(mRightPalette).height() - desktop->availableGeometry(mRightPalette).height();
+ mRightPalette->setAdditionalVOffset(-taskBarOffset);
+ }
+ }
+#endif
+
+ if(!isInit)
+ UBApplication::applicationController->uninotesController()->TransparentWidgetResized();
+
+ if (mWebToolsCurrentPalette)
+ mWebToolsCurrentPalette->hide();
+ }
+ break;
+
+ case eUBDockPaletteWidget_WEB:
+ {
+ mAddItemPalette->setParent(UBApplication::mainWindow);
+
+ mRightPalette->assignParent(UBApplication::webController->GetCurrentWebBrowser());
+ mRightPalette->setVisible(rightPaletteVisible);
+
+ if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
+ {
+ if(mKeyboardPalette->m_isVisible)
+ {
+ mKeyboardPalette->hide();
+ mKeyboardPalette->setParent(UBApplication::mainWindow);
+ mKeyboardPalette->show();
+ }
+ else
+ mKeyboardPalette->setParent(UBApplication::mainWindow);
+ }
+
+ }
+ break;
+
+ case eUBDockPaletteWidget_DOCUMENT:
+ {
+ mLeftPalette->setVisible(leftPaletteVisible);
+ mRightPalette->setVisible(rightPaletteVisible);
+ mLeftPalette->assignParent(UBApplication::documentController->controlView());
+ mRightPalette->assignParent(UBApplication::documentController->controlView());
+ if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
+ {
+
+ if(mKeyboardPalette->m_isVisible)
+ {
+ mKeyboardPalette->hide();
+ mKeyboardPalette->setParent(UBApplication::documentController->controlView());
+ mKeyboardPalette->show();
+ }
+ else
+ mKeyboardPalette->setParent(UBApplication::documentController->controlView());
+ }
+ if (mWebToolsCurrentPalette)
+ mWebToolsCurrentPalette->hide();
+ }
+ break;
+
+ default:
+ {
+ mLeftPalette->setVisible(leftPaletteVisible);
+ mRightPalette->setVisible(rightPaletteVisible);
+ mLeftPalette->assignParent(0);
+ mRightPalette->assignParent(0);
+ if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL)
+ {
+
+ if(mKeyboardPalette->m_isVisible)
+ {
+ mKeyboardPalette->hide();
+ mKeyboardPalette->setParent(0);
+ mKeyboardPalette->show();
+ }
+ else
+ mKeyboardPalette->setParent(0);
+ }
+ }
+ break;
+ }
+
+ if( !isInit )
+ UBApplication::boardController->notifyPageChanged();
+}
+
+void UBBoardPaletteManager::addItem(const QPixmap& pPixmap, const QPointF& pos, qreal scaleFactor, const QUrl& sourceUrl)
+{
+ mItemUrl = sourceUrl;
+ mPixmap = pPixmap;
+ mPos = pos;
+ mScaleFactor = scaleFactor;
+
+ mAddItemPalette->show();
+ mAddItemPalette->adjustSizeAndPosition();
+}
+
+
+void UBBoardPaletteManager::addItemToCurrentPage()
+{
+ UBApplication::applicationController->showBoard();
+ mAddItemPalette->hide();
+ if(mPixmap.isNull())
+ UBApplication::boardController->downloadURL(mItemUrl);
+ else
+ {
+ UBGraphicsPixmapItem* item = UBApplication::boardController->activeScene()->addPixmap(mPixmap, NULL, mPos, mScaleFactor);
+
+ item->setSourceUrl(mItemUrl);
+ item->setSelected(true);
+
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+}
+
+
+void UBBoardPaletteManager::addItemToNewPage()
+{
+ UBApplication::boardController->addScene();
+ addItemToCurrentPage();
+}
+
+
+void UBBoardPaletteManager::addItemToLibrary()
+{
+ if(mPixmap.isNull())
+ {
+ mPixmap = QPixmap(mItemUrl.toLocalFile());
+ }
+
+ if(!mPixmap.isNull())
+ {
+ if(mScaleFactor != 1.)
+ {
+ mPixmap = mPixmap.scaled(mScaleFactor * mPixmap.width(), mScaleFactor* mPixmap.height()
+ , Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ }
+ QImage image = mPixmap.toImage();
+
+ QDateTime now = QDateTime::currentDateTime();
+ QString capturedName = tr("CapturedImage") + "-" + now.toString("dd-MM-yyyy hh-mm-ss") + ".png";
+ mpFeaturesWidget->importImage(image, capturedName);
+ }
+ else
+ {
+ UBApplication::showMessage(tr("Error Adding Image to Library"));
+ }
+
+ mAddItemPalette->hide();
+}
+
+void UBBoardPaletteManager::zoomButtonPressed()
+{
+ mZoomButtonPressedTime = QTime::currentTime();
+
+ mPendingZoomButtonPressed = true;
+ QTimer::singleShot(1000, this, SLOT(zoomButtonReleased()));
+}
+
+
+void UBBoardPaletteManager::zoomButtonReleased()
+{
+ if (mPendingZoomButtonPressed)
+ {
+ if(mZoomButtonPressedTime.msecsTo(QTime::currentTime()) > 900)
+ {
+ mBoardControler->zoomRestore();
+ }
+
+ mPendingZoomButtonPressed = false;
+ }
+}
+
+void UBBoardPaletteManager::panButtonPressed()
+{
+ mPanButtonPressedTime = QTime::currentTime();
+
+ mPendingPanButtonPressed = true;
+ QTimer::singleShot(1000, this, SLOT(panButtonReleased()));
+}
+
+
+void UBBoardPaletteManager::panButtonReleased()
+{
+ if (mPendingPanButtonPressed)
+ {
+ if(mPanButtonPressedTime.msecsTo(QTime::currentTime()) > 900)
+ {
+ mBoardControler->centerRestore();
+ }
+
+ mPendingPanButtonPressed = false;
+ }
+}
+
+void UBBoardPaletteManager::showVirtualKeyboard(bool show)
+{
+ if (mKeyboardPalette)
+ mKeyboardPalette->setVisible(show);
+}
+
+void UBBoardPaletteManager::changeStylusPaletteOrientation(QVariant var)
+{
+ bool bVertical = var.toBool();
+ bool bVisible = mStylusPalette->isVisible();
+
+ // Clean the old palette
+ if(NULL != mStylusPalette)
+ {
+ delete mStylusPalette;
+ mStylusPalette = NULL;
+ }
+
+ // Create the new palette
+ if(bVertical)
+ {
+ mStylusPalette = new UBStylusPalette(mContainer, Qt::Vertical);
+ }
+ else
+ {
+ mStylusPalette = new UBStylusPalette(mContainer, Qt::Horizontal);
+ }
+
+ connect(mStylusPalette, SIGNAL(stylusToolDoubleClicked(int)), UBApplication::boardController, SLOT(stylusToolDoubleClicked(int)));
+ mStylusPalette->setVisible(bVisible); // always show stylus palette at startup
+}
+
+
+void UBBoardPaletteManager::connectToDocumentController()
+{
+ emit connectToDocController();
+}
+
+void UBBoardPaletteManager::refreshPalettes()
+{
+ mRightPalette->update();
+ mLeftPalette->update();
+}
+
+void UBBoardPaletteManager::startDownloads()
+{
+ if(!mDownloadInProgress)
+ {
+ mDownloadInProgress = true;
+ mpDownloadWidget->setVisibleState(true);
+ mRightPalette->addTab(mpDownloadWidget);
+ }
+}
+
+void UBBoardPaletteManager::stopDownloads()
+{
+ if(mDownloadInProgress)
+ {
+ mDownloadInProgress = false;
+ mpDownloadWidget->setVisibleState(false);
+ mRightPalette->removeTab(mpDownloadWidget);
+ }
+}
+
+
+UBCreateLinkPalette* UBBoardPaletteManager::linkPalette()
+{
+ if(mLinkPalette)
+ delete mLinkPalette;
+ mLinkPalette = new UBCreateLinkPalette(mContainer);
+ return mLinkPalette;
+}
+
diff --git a/Sankore-3.1/src/board/UBBoardPaletteManager.h b/Sankore-3.1/src/board/UBBoardPaletteManager.h
index 57d5d29..c6dddbd 100644
--- a/Sankore-3.1/src/board/UBBoardPaletteManager.h
+++ b/Sankore-3.1/src/board/UBBoardPaletteManager.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,177 +18,180 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBBOARDPALETTEMANAGER_H_
-#define UBBOARDPALETTEMANAGER_H_
-
-#include <QtGui>
-#include <QtWebKit>
-
-#include "gui/UBLeftPalette.h"
-#include "gui/UBRightPalette.h"
-#include "gui/UBPageNavigationWidget.h"
-#include "gui/UBCachePropertiesWidget.h"
-#include "gui/UBDockDownloadWidget.h"
-#include "core/UBApplicationController.h"
-#include "gui/UBFeaturesWidget.h"
-
-
-class UBWebToolsPalette;
-class UBStylusPalette;
-class UBClockPalette;
-class UBPageNumberPalette;
-class UBZoomPalette;
-class UBActionPalette;
-class UBBoardController;
-class UBServerXMLHttpRequest;
-class UBKeyboardPalette;
-class UBMainWindow;
-class UBApplicationController;
-class UBDockTeacherGuideWidget;
-
-// Uncomment this to use old-styles lib paletter
-// #define USE_WEB_WIDGET
-
-
-class UBBoardPaletteManager : public QObject
-{
- Q_OBJECT
-
- public:
- UBBoardPaletteManager(QWidget* container, UBBoardController* controller);
- virtual ~UBBoardPaletteManager();
-
- void setupLayout();
- UBLeftPalette* leftPalette(){return mLeftPalette;}
- UBRightPalette* rightPalette(){return mRightPalette;}
- UBStylusPalette* stylusPalette(){return mStylusPalette;}
- UBActionPalette *addItemPalette() {return mAddItemPalette;}
- void showVirtualKeyboard(bool show = true);
- void initPalettesPosAtStartup();
- void connectToDocumentController();
- void refreshPalettes();
-
- UBKeyboardPalette *mKeyboardPalette;
-
- void setCurrentWebToolsPalette(UBWebToolsPalette *palette) {mWebToolsCurrentPalette = palette;}
- UBWebToolsPalette* mWebToolsCurrentPalette;
-
- UBDockTeacherGuideWidget* teacherGuideDockWidget() { return mpTeacherGuideWidget;}
-
- void processPalettersWidget(UBDockPalette *paletter, eUBDockPaletteWidgetMode mode);
- void changeMode(eUBDockPaletteWidgetMode newMode, bool isInit = false);
- void startDownloads();
- void stopDownloads();
-
- signals:
- void connectToDocController();
- void signal_changeMode(eUBDockPaletteWidgetMode newMode);
-
- public slots:
-
- void activeSceneChanged();
- void containerResized();
- void addItem(const QUrl& pUrl);
- void addItem(const QPixmap& pPixmap, const QPointF& p = QPointF(0.0, 0.0), qreal scale = 1.0, const QUrl& sourceUrl = QUrl());
-
- void slot_changeMainMode(UBApplicationController::MainMode);
- void slot_changeDesktopMode(bool);
-
- void toggleErasePalette(bool ckecked);
-
- private:
-
- void setupPalettes();
- void connectPalettes();
- void positionFreeDisplayPalette();
- void setupDockPaletteWidgets();
-
- QWidget* mContainer;
- UBBoardController *mBoardControler;
-
- UBStylusPalette *mStylusPalette;
-
- UBZoomPalette *mZoomPalette;
-
- /** The left dock palette */
- UBLeftPalette* mLeftPalette;
- /** The right dock palette */
- UBRightPalette* mRightPalette;
-
- UBActionPalette *mBackgroundsPalette;
- UBActionPalette *mToolsPalette;
- UBActionPalette* mAddItemPalette;
- UBActionPalette* mErasePalette;
- UBActionPalette* mPagePalette;
-
- QUrl mItemUrl;
- QPixmap mPixmap;
- QPointF mPos;
- qreal mScaleFactor;
-
- QTime mPageButtonPressedTime;
- bool mPendingPageButtonPressed;
-
- QTime mZoomButtonPressedTime;
- bool mPendingZoomButtonPressed;
-
- QTime mPanButtonPressedTime;
- bool mPendingPanButtonPressed;
-
- QTime mEraseButtonPressedTime;
- bool mPendingEraseButtonPressed;
-
- /** The page navigator widget */
- UBPageNavigationWidget* mpPageNavigWidget;
-
- /** The cache properties widget */
- UBCachePropertiesWidget* mpCachePropWidget;
-
- UBFeaturesWidget *mpFeaturesWidget;
-
- /** The download widget */
- UBDockDownloadWidget* mpDownloadWidget;
- UBDockTeacherGuideWidget* mpTeacherGuideWidget;
-
- bool mDownloadInProgress;
-
- private slots:
-
- void changeBackground();
-
- void toggleBackgroundPalette(bool checked);
- void backgroundPaletteClosed();
-
- void toggleStylusPalette(bool checked);
- void tooglePodcastPalette(bool checked);
-
- void erasePaletteButtonPressed();
- void erasePaletteButtonReleased();
-
- void erasePaletteClosed();
-
- void togglePagePalette(bool ckecked);
- void pagePaletteClosed();
-
- void pagePaletteButtonPressed();
- void pagePaletteButtonReleased();
-
- void addItemToCurrentPage();
- void addItemToNewPage();
- void addItemToLibrary();
-
- void purchaseLinkActivated(const QString&);
-
- void linkClicked(const QUrl& url);
-
- void zoomButtonPressed();
- void zoomButtonReleased();
- void panButtonPressed();
- void panButtonReleased();
-
- void changeStylusPaletteOrientation(QVariant var);
-};
-
-#endif /* UBBOARDPALETTEMANAGER_H_ */
+
+
+
+#ifndef UBBOARDPALETTEMANAGER_H_
+#define UBBOARDPALETTEMANAGER_H_
+
+#include <QtGui>
+#include <QtWebKit>
+
+#include "gui/UBLeftPalette.h"
+#include "gui/UBRightPalette.h"
+#include "gui/UBPageNavigationWidget.h"
+#include "gui/UBCachePropertiesWidget.h"
+#include "gui/UBDockDownloadWidget.h"
+#include "core/UBApplicationController.h"
+#include "gui/UBFeaturesWidget.h"
+
+
+class UBWebToolsPalette;
+class UBStylusPalette;
+class UBClockPalette;
+class UBPageNumberPalette;
+class UBZoomPalette;
+class UBActionPalette;
+class UBBoardController;
+class UBServerXMLHttpRequest;
+class UBKeyboardPalette;
+class UBMainWindow;
+class UBApplicationController;
+class UBDockTeacherGuideWidget;
+class UBStartupHintsPalette;
+class UBCreateLinkPalette;
+
+class UBBoardPaletteManager : public QObject
+{
+ Q_OBJECT
+
+ public:
+ UBBoardPaletteManager(QWidget* container, UBBoardController* controller);
+ virtual ~UBBoardPaletteManager();
+
+ void setupLayout();
+ UBLeftPalette* leftPalette(){return mLeftPalette;}
+ UBRightPalette* rightPalette(){return mRightPalette;}
+ UBFeaturesWidget *featuresWidget(){return mpFeaturesWidget;}
+ UBStylusPalette* stylusPalette(){return mStylusPalette;}
+ UBActionPalette *addItemPalette() {return mAddItemPalette;}
+ void showVirtualKeyboard(bool show = true);
+ void initPalettesPosAtStartup();
+ void connectToDocumentController();
+ void refreshPalettes();
+
+ UBKeyboardPalette *mKeyboardPalette;
+
+ UBCreateLinkPalette* linkPalette();
+
+ void setCurrentWebToolsPalette(UBWebToolsPalette *palette) {mWebToolsCurrentPalette = palette;}
+ UBWebToolsPalette* mWebToolsCurrentPalette;
+
+ UBDockTeacherGuideWidget* teacherGuideDockWidget() { return mpTeacherGuideWidget;}
+
+ void processPalettersWidget(UBDockPalette *paletter, eUBDockPaletteWidgetMode mode);
+ void changeMode(eUBDockPaletteWidgetMode newMode, bool isInit = false);
+ void startDownloads();
+ void stopDownloads();
+
+ signals:
+ void connectToDocController();
+
+ public slots:
+
+ void activeSceneChanged();
+ void containerResized();
+ void addItem(const QUrl& pUrl);
+ void addItem(const QPixmap& pPixmap, const QPointF& p = QPointF(0.0, 0.0), qreal scale = 1.0, const QUrl& sourceUrl = QUrl());
+
+ void slot_changeMainMode(UBApplicationController::MainMode);
+ void slot_changeDesktopMode(bool);
+
+ void toggleErasePalette(bool ckecked);
+
+ private:
+
+ void setupPalettes();
+ void connectPalettes();
+ void positionFreeDisplayPalette();
+ void setupDockPaletteWidgets();
+
+ QWidget* mContainer;
+ UBBoardController *mBoardControler;
+
+ UBStylusPalette *mStylusPalette;
+
+ UBZoomPalette *mZoomPalette;
+ UBStartupHintsPalette* mTipPalette;
+ UBCreateLinkPalette* mLinkPalette;
+
+ /** The left dock palette */
+ UBLeftPalette* mLeftPalette;
+ /** The right dock palette */
+ UBRightPalette* mRightPalette;
+
+ UBActionPalette *mBackgroundsPalette;
+ UBActionPalette *mToolsPalette;
+ UBActionPalette* mAddItemPalette;
+ UBActionPalette* mErasePalette;
+ UBActionPalette* mPagePalette;
+
+ QUrl mItemUrl;
+ QPixmap mPixmap;
+ QPointF mPos;
+ qreal mScaleFactor;
+
+ QTime mPageButtonPressedTime;
+ bool mPendingPageButtonPressed;
+
+ QTime mZoomButtonPressedTime;
+ bool mPendingZoomButtonPressed;
+
+ QTime mPanButtonPressedTime;
+ bool mPendingPanButtonPressed;
+
+ QTime mEraseButtonPressedTime;
+ bool mPendingEraseButtonPressed;
+
+ /** The page navigator widget */
+ UBPageNavigationWidget* mpPageNavigWidget;
+
+ /** The cache properties widget */
+ UBCachePropertiesWidget* mpCachePropWidget;
+
+ UBFeaturesWidget *mpFeaturesWidget;
+
+ /** The download widget */
+ UBDockDownloadWidget* mpDownloadWidget;
+ UBDockTeacherGuideWidget* mpTeacherGuideWidget;
+
+ bool mDownloadInProgress;
+
+ private slots:
+
+ void changeBackground();
+
+ void toggleBackgroundPalette(bool checked);
+ void backgroundPaletteClosed();
+
+ void toggleStylusPalette(bool checked);
+ void tooglePodcastPalette(bool checked);
+
+ void erasePaletteButtonPressed();
+ void erasePaletteButtonReleased();
+
+ void erasePaletteClosed();
+
+ void togglePagePalette(bool ckecked);
+ void pagePaletteClosed();
+
+ void pagePaletteButtonPressed();
+ void pagePaletteButtonReleased();
+
+ void addItemToCurrentPage();
+ void addItemToNewPage();
+ void addItemToLibrary();
+
+ void purchaseLinkActivated(const QString&);
+
+ void linkClicked(const QUrl& url);
+
+ void zoomButtonPressed();
+ void zoomButtonReleased();
+ void panButtonPressed();
+ void panButtonReleased();
+
+ void changeStylusPaletteOrientation(QVariant var);
+};
+
+#endif /* UBBOARDPALETTEMANAGER_H_ */
diff --git a/Sankore-3.1/src/board/UBBoardView.cpp b/Sankore-3.1/src/board/UBBoardView.cpp
index 99d2f2e..b964857 100644
--- a/Sankore-3.1/src/board/UBBoardView.cpp
+++ b/Sankore-3.1/src/board/UBBoardView.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBBoardView.h"
#include <QtGui>
@@ -51,6 +52,11 @@
#include "board/UBBoardController.h"
#include "board/UBBoardPaletteManager.h"
+#ifdef Q_WS_MAC
+#include "desktop/UBDesktopAnnotationController.h"
+#include "desktop/UBDesktopPalette.h"
+#endif
+
#include "domain/UBGraphicsTextItem.h"
#include "domain/UBGraphicsPixmapItem.h"
#include "domain/UBGraphicsWidgetItem.h"
@@ -72,6 +78,8 @@
#include "tools/UBGraphicsProtractor.h"
#include "tools/UBGraphicsAristo.h"
+#include "customWidgets/UBGraphicsItemAction.h"
+
#include "core/memcheck.h"
UBBoardView::UBBoardView (UBBoardController* pController, QWidget* pParent, bool isControl, bool isDesktop)
@@ -379,6 +387,18 @@ void UBBoardView::tabletEvent (QTabletEvent * event)
bool acceptEvent = true;
+#ifdef Q_WS_MAC
+ //Work around #1388. After selecting annotation tool in desktop mode, annotation view appears on top when
+ //using Mac OS X. In this case tablet event should send mouse event so as to let user interact with
+ //stylus palette.
+ Q_ASSERT(UBApplication::applicationController->uninotesController());
+ if (UBApplication::applicationController->uninotesController()->drawingView() == this) {
+ if (UBApplication::applicationController->uninotesController()->desktopPalettePath().contains(event->pos())) {
+ acceptEvent = false;
+ }
+ }
+#endif
+
switch (event->type ()) {
case QEvent::TabletPress: {
mTabletStylusIsPressed = true;
@@ -533,6 +553,8 @@ Here we determines cases when items should to get mouse press event at pressing
// some behavior depends on current tool.
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool();
+ qDebug() << item->type();
+
switch(item->type())
{
case UBGraphicsProtractor::Type:
@@ -544,8 +566,17 @@ Here we determines cases when items should to get mouse press event at pressing
return true;
case UBGraphicsDelegateFrame::Type:
- case QGraphicsSvgItem::Type:
+ if (currentTool == UBStylusTool::Play)
+ return false;
return true;
+ case UBGraphicsPixmapItem::Type:
+ case UBGraphicsSvgItem::Type:
+ if (currentTool == UBStylusTool::Play)
+ return true;
+ if (item->isSelected())
+ return true;
+ else
+ return false;
case DelegateButton::Type:
return true;
@@ -553,9 +584,9 @@ Here we determines cases when items should to get mouse press event at pressing
case UBGraphicsMediaItem::Type:
return false;
- case UBGraphicsSvgItem::Type:
- case UBGraphicsPixmapItem::Type:
case UBGraphicsTextItem::Type:
+ if (currentTool == UBStylusTool::Play)
+ return true;
if ((currentTool == UBStylusTool::Selector) && item->isSelected())
return true;
if ((currentTool == UBStylusTool::Selector) && item->parentItem() && item->parentItem()->isSelected())
@@ -564,17 +595,20 @@ Here we determines cases when items should to get mouse press event at pressing
return false;
break;
+ case UBGraphicsItemType::StrokeItemType:
+ if (currentTool == UBStylusTool::Play)
+ return true;
+ break;
// Groups shouldn't reacts on any presses and moves for Play tool.
case UBGraphicsGroupContainerItem::Type:
if(currentTool == UBStylusTool::Play)
{
movingItem = NULL;
+ return true;
}
return false;
break;
- //case UBToolWidget::Type:
- // return true;
case QGraphicsWebView::Type:
return true;
@@ -588,6 +622,7 @@ Here we determines cases when items should to get mouse press event at pressing
return true;
return false;
break;
+
}
return !isUBItem(item); // standard behavior of QGraphicsScene for not UB items. UB items should be managed upper.
@@ -608,6 +643,7 @@ bool UBBoardView::itemShouldReceiveSuspendedMousePressEvent(QGraphicsItem *item)
case QGraphicsWebView::Type:
return false;
case UBGraphicsPixmapItem::Type:
+ case UBGraphicsSvgItem::Type:
case UBGraphicsTextItem::Type:
case UBGraphicsWidgetItem::Type:
if (currentTool == UBStylusTool::Selector && !item->isSelected() && item->parentItem())
@@ -658,6 +694,8 @@ bool UBBoardView::itemShouldBeMoved(QGraphicsItem *item)
case UBGraphicsSvgItem::Type:
case UBGraphicsPixmapItem::Type:
+ if (currentTool == UBStylusTool::Play || !item->isSelected())
+ return true;
if (item->isSelected())
return false;
case UBGraphicsMediaItem::Type:
@@ -681,12 +719,21 @@ QGraphicsItem* UBBoardView::determineItemToPress(QGraphicsItem *item)
if (UBStylusTool::Selector == currentTool
&& item->parentItem()
&& UBGraphicsGroupContainerItem::Type == item->parentItem()->type()
- && !item->parentItem()->isSelected())
+ && !item->parentItem()->isSelected())
return item->parentItem();
// items like polygons placed in two groups nested, so we need to recursive call.
if(item->parentItem() && UBGraphicsStrokesGroup::Type == item->parentItem()->type())
return determineItemToPress(item->parentItem());
+
+ //TODO claudio
+ // another chuck of very good code
+ if(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type()){
+ UBGraphicsGroupContainerItem* group = qgraphicsitem_cast<UBGraphicsGroupContainerItem*>(item->parentItem());
+ if(group && group->Delegate()->action())
+ group->Delegate()->action()->play();
+ }
+
}
return item;
@@ -850,12 +897,79 @@ void UBBoardView::setMultiselection(bool enable)
mMultipleSelectionIsEnabled = enable;
}
+// work around for handling tablet events on MAC OS with Qt 4.8.0 and above
+#if defined(Q_WS_MACX)
+bool UBBoardView::directTabletEvent(QEvent *event)
+{
+ QTabletEvent *tEvent = static_cast<QTabletEvent *>(event);
+ tEvent = new QTabletEvent(tEvent->type()
+ , mapFromGlobal(tEvent->pos())
+ , tEvent->globalPos()
+ , tEvent->hiResGlobalPos()
+ , tEvent->device()
+ , tEvent->pointerType()
+ , tEvent->pressure()
+ , tEvent->xTilt()
+ , tEvent->yTilt()
+ , tEvent->tangentialPressure()
+ , tEvent->rotation()
+ , tEvent->z()
+ , tEvent->modifiers()
+ , tEvent->uniqueId());
+
+ if (geometry().contains(tEvent->pos()))
+ {
+ if (NULL == widgetForTabletEvent(this->parentWidget(), tEvent->pos()))
+ {
+ tabletEvent(tEvent);
+ return true;
+ }
+ }
+ return false;
+}
+
+QWidget *UBBoardView::widgetForTabletEvent(QWidget *w, const QPoint &pos)
+{
+ Q_ASSERT(w);
+
+ // it should work that, but it doesn't. So we check if it is control view.
+ //UBBoardView *board = qobject_cast<UBBoardView *>(w);
+ UBBoardView *board = UBApplication::boardController->controlView();
+
+ QWidget *childAtPos = NULL;
+
+ QList<QObject *> childs = w->children();
+ foreach(QObject *child, childs)
+ {
+ QWidget *childWidget = qobject_cast<QWidget *>(child);
+ if (childWidget)
+ {
+ if (childWidget->isVisible() && childWidget->geometry().contains(pos))
+ {
+ QWidget *lastChild = widgetForTabletEvent(childWidget, pos);
+
+ if (board && board->viewport() == lastChild)
+ continue;
+
+ if (NULL != lastChild)
+ childAtPos = lastChild;
+ else
+ childAtPos = childWidget;
+
+ break;
+ }
+ else
+ childAtPos = NULL;
+ }
+ }
+ return childAtPos;
+}
+#endif
void UBBoardView::longPressEvent()
{
UBDrawingController *drawingController = UBDrawingController::drawingController();
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController ()->stylusTool ();
-
disconnect(&mLongPressTimer, SIGNAL(timeout()), this, SLOT(longPressEvent()));
if (UBStylusTool::Selector == currentTool)
@@ -1160,7 +1274,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
movingItem = NULL;
}
else
- if (movingItem && !isCppTool(movingItem))
+ if (movingItem && (!isCppTool(movingItem) || UBGraphicsCurtainItem::Type == movingItem->type()))
{
if (suspendedMousePressEvent)
{
@@ -1174,7 +1288,6 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event)
{
if (isUBItem(movingItem) &&
DelegateButton::Type != movingItem->type() &&
- QGraphicsSvgItem::Type != movingItem->type() &&
UBGraphicsDelegateFrame::Type != movingItem->type() &&
UBGraphicsCache::Type != movingItem->type() &&
QGraphicsWebView::Type != movingItem->type() && // for W3C widgets as Tools.
diff --git a/Sankore-3.1/src/board/UBBoardView.h b/Sankore-3.1/src/board/UBBoardView.h
index 91fa280..677df7a 100644
--- a/Sankore-3.1/src/board/UBBoardView.h
+++ b/Sankore-3.1/src/board/UBBoardView.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,164 +18,169 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBBOARDVIEW_H_
-#define UBBOARDVIEW_H_
-
-#include <QtGui>
-#include "core/UB.h"
-#include "domain/UBGraphicsDelegateFrame.h"
-
-class UBBoardController;
-class UBGraphicsScene;
-class UBGraphicsWidgetItem;
-class UBRubberBand;
-
-class UBBoardView : public QGraphicsView
-{
- Q_OBJECT
-
- public:
-
- UBBoardView(UBBoardController* pController, QWidget* pParent = 0, bool isControl = false, bool isDesktop = false);
- UBBoardView(UBBoardController* pController, int pStartLayer, int pEndLayer, QWidget* pParent = 0, bool isControl = false, bool isDesktop = false);
- virtual ~UBBoardView();
-
- UBGraphicsScene* scene();
-
- void forcedTabletRelease();
-
- void setToolCursor(int tool);
-
- void rubberItems();
- void moveRubberedItems(QPointF movingVector);
-
- void setMultiselection(bool enable);
- bool isMultipleSelectionEnabled() { return mMultipleSelectionIsEnabled; }
-
- signals:
-
- void resized(QResizeEvent* event);
- void hidden();
- void shown();
- void clickOnBoard();
-
- protected:
-
- bool itemIsLocked(QGraphicsItem *item);
- bool isUBItem(QGraphicsItem *item); // we should to determine items who is not UB and use general scene behavior for them.
- bool isCppTool(QGraphicsItem *item);
- void handleItemsSelection(QGraphicsItem *item);
- bool itemShouldReceiveMousePressEvent(QGraphicsItem *item);
- bool itemShouldReceiveSuspendedMousePressEvent(QGraphicsItem *item);
- bool itemHaveParentWithType(QGraphicsItem *item, int type);
- bool itemShouldBeMoved(QGraphicsItem *item);
- QGraphicsItem* determineItemToPress(QGraphicsItem *item);
- QGraphicsItem* determineItemToMove(QGraphicsItem *item);
- void handleItemMousePress(QMouseEvent *event);
- void handleItemMouseMove(QMouseEvent *event);
-
- virtual bool event (QEvent * e);
-
- virtual void keyPressEvent(QKeyEvent *event);
- virtual void keyReleaseEvent(QKeyEvent *event);
- virtual void tabletEvent(QTabletEvent * event);
- virtual void mouseDoubleClickEvent(QMouseEvent *event);
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseMoveEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
- virtual void wheelEvent(QWheelEvent *event);
- virtual void leaveEvent ( QEvent * event);
-
- virtual void focusOutEvent ( QFocusEvent * event );
-
- virtual void drawItems(QPainter *painter, int numItems,
- QGraphicsItem *items[],
- const QStyleOptionGraphicsItem options[]);
-
-// virtual void dragEnterEvent(QDragEnterEvent * event);
- virtual void dropEvent(QDropEvent *event);
- virtual void dragMoveEvent(QDragMoveEvent *event);
-
- virtual void resizeEvent(QResizeEvent * event);
-
- virtual void drawBackground(QPainter *painter, const QRectF &rect);
-
- virtual void showEvent(QShowEvent * event);
- virtual void hideEvent(QHideEvent * event);
-
- private:
-
- void init();
-
- inline bool shouldDisplayItem(QGraphicsItem *item)
- {
- bool ok;
- int itemLayerType = item->data(UBGraphicsItemData::ItemLayerType).toInt(&ok);
- return (ok && (itemLayerType >= mStartLayer && itemLayerType <= mEndLayer));
- }
-
- QList<QUrl> processMimeData(const QMimeData* pMimeData);
-
- UBBoardController* mController;
-
- int mStartLayer, mEndLayer;
- bool mFilterZIndex;
-
- bool mTabletStylusIsPressed;
- bool mUsingTabletEraser;
-
- bool mPendingStylusReleaseEvent;
-
- bool mMouseButtonIsPressed;
- QPointF mPreviousPoint;
- QPoint mMouseDownPos;
-
- bool mPenPressureSensitive;
- bool mMarkerPressureSensitive;
- bool mUseHighResTabletEvent;
-
- QRubberBand *mRubberBand;
- bool mIsCreatingTextZone;
- bool mIsCreatingSceneGrabZone;
-
- bool isAbsurdPoint(QPoint point);
-
- bool mVirtualKeyboardActive;
- bool mOkOnWidget;
-
- bool mWidgetMoved;
- QPointF mLastPressedMousePos;
- QGraphicsItem *movingItem;
- QMouseEvent *suspendedMousePressEvent;
-
- bool moveRubberBand;
- UBRubberBand *mUBRubberBand;
-
- QList<QGraphicsItem *> mRubberedItems;
- QSet<QGraphicsItem*> mJustSelectedItems;
-
- int mLongPressInterval;
- QTimer mLongPressTimer;
-
- bool mIsDragInProgress;
- bool mMultipleSelectionIsEnabled;
- bool bIsControl;
- bool bIsDesktop;
- bool mRubberBandInPlayMode;
-
- static bool hasSelectedParents(QGraphicsItem * item);
-
- private slots:
-
- void settingChanged(QVariant newValue);
-
- public slots:
-
- void virtualKeyboardActivated(bool b);
- void longPressEvent();
-
-};
-
-#endif /* UBBOARDVIEW_H_ */
+
+
+
+#ifndef UBBOARDVIEW_H_
+#define UBBOARDVIEW_H_
+
+#include <QtGui>
+#include "core/UB.h"
+#include "domain/UBGraphicsDelegateFrame.h"
+
+class UBBoardController;
+class UBGraphicsScene;
+class UBGraphicsWidgetItem;
+class UBRubberBand;
+
+class UBBoardView : public QGraphicsView
+{
+ Q_OBJECT
+
+ public:
+
+ UBBoardView(UBBoardController* pController, QWidget* pParent = 0, bool isControl = false, bool isDesktop = false);
+ UBBoardView(UBBoardController* pController, int pStartLayer, int pEndLayer, QWidget* pParent = 0, bool isControl = false, bool isDesktop = false);
+ virtual ~UBBoardView();
+
+ UBGraphicsScene* scene();
+
+ void forcedTabletRelease();
+
+ void setToolCursor(int tool);
+
+ void rubberItems();
+ void moveRubberedItems(QPointF movingVector);
+
+ void setMultiselection(bool enable);
+ bool isMultipleSelectionEnabled() { return mMultipleSelectionIsEnabled; }
+// work around for handling tablet events on MAC OS with Qt 4.8.0 and above
+#if defined(Q_WS_MACX)
+ bool directTabletEvent(QEvent *event);
+ QWidget *widgetForTabletEvent(QWidget *w, const QPoint &pos);
+#endif
+ signals:
+
+ void resized(QResizeEvent* event);
+ void hidden();
+ void shown();
+ void clickOnBoard();
+
+ protected:
+
+ bool itemIsLocked(QGraphicsItem *item);
+ bool isUBItem(QGraphicsItem *item); // we should to determine items who is not UB and use general scene behavior for them.
+ bool isCppTool(QGraphicsItem *item);
+ void handleItemsSelection(QGraphicsItem *item);
+ bool itemShouldReceiveMousePressEvent(QGraphicsItem *item);
+ bool itemShouldReceiveSuspendedMousePressEvent(QGraphicsItem *item);
+ bool itemHaveParentWithType(QGraphicsItem *item, int type);
+ bool itemShouldBeMoved(QGraphicsItem *item);
+ QGraphicsItem* determineItemToPress(QGraphicsItem *item);
+ QGraphicsItem* determineItemToMove(QGraphicsItem *item);
+ void handleItemMousePress(QMouseEvent *event);
+ void handleItemMouseMove(QMouseEvent *event);
+
+ virtual bool event (QEvent * e);
+
+ virtual void keyPressEvent(QKeyEvent *event);
+ virtual void keyReleaseEvent(QKeyEvent *event);
+ virtual void tabletEvent(QTabletEvent * event);
+ virtual void mouseDoubleClickEvent(QMouseEvent *event);
+ virtual void mousePressEvent(QMouseEvent *event);
+ virtual void mouseMoveEvent(QMouseEvent *event);
+ virtual void mouseReleaseEvent(QMouseEvent *event);
+ virtual void wheelEvent(QWheelEvent *event);
+ virtual void leaveEvent ( QEvent * event);
+
+ virtual void focusOutEvent ( QFocusEvent * event );
+
+ virtual void drawItems(QPainter *painter, int numItems,
+ QGraphicsItem *items[],
+ const QStyleOptionGraphicsItem options[]);
+
+// virtual void dragEnterEvent(QDragEnterEvent * event);
+ virtual void dropEvent(QDropEvent *event);
+ virtual void dragMoveEvent(QDragMoveEvent *event);
+
+ virtual void resizeEvent(QResizeEvent * event);
+
+ virtual void drawBackground(QPainter *painter, const QRectF &rect);
+
+ virtual void showEvent(QShowEvent * event);
+ virtual void hideEvent(QHideEvent * event);
+
+ private:
+
+ void init();
+
+ inline bool shouldDisplayItem(QGraphicsItem *item)
+ {
+ bool ok;
+ int itemLayerType = item->data(UBGraphicsItemData::ItemLayerType).toInt(&ok);
+ return (ok && (itemLayerType >= mStartLayer && itemLayerType <= mEndLayer));
+ }
+
+ QList<QUrl> processMimeData(const QMimeData* pMimeData);
+
+ UBBoardController* mController;
+
+ int mStartLayer, mEndLayer;
+ bool mFilterZIndex;
+
+ bool mTabletStylusIsPressed;
+ bool mUsingTabletEraser;
+
+ bool mPendingStylusReleaseEvent;
+
+ bool mMouseButtonIsPressed;
+ QPointF mPreviousPoint;
+ QPoint mMouseDownPos;
+
+ bool mPenPressureSensitive;
+ bool mMarkerPressureSensitive;
+ bool mUseHighResTabletEvent;
+
+ QRubberBand *mRubberBand;
+ bool mIsCreatingTextZone;
+ bool mIsCreatingSceneGrabZone;
+
+ bool isAbsurdPoint(QPoint point);
+
+ bool mVirtualKeyboardActive;
+ bool mOkOnWidget;
+
+ bool mWidgetMoved;
+ QPointF mLastPressedMousePos;
+ QGraphicsItem *movingItem;
+ QMouseEvent *suspendedMousePressEvent;
+
+ bool moveRubberBand;
+ UBRubberBand *mUBRubberBand;
+
+ QList<QGraphicsItem *> mRubberedItems;
+ QSet<QGraphicsItem*> mJustSelectedItems;
+
+ int mLongPressInterval;
+ QTimer mLongPressTimer;
+
+ bool mIsDragInProgress;
+ bool mMultipleSelectionIsEnabled;
+ bool bIsControl;
+ bool bIsDesktop;
+ bool mRubberBandInPlayMode;
+
+ static bool hasSelectedParents(QGraphicsItem * item);
+
+ private slots:
+
+ void settingChanged(QVariant newValue);
+
+ public slots:
+
+ void virtualKeyboardActivated(bool b);
+ void longPressEvent();
+
+};
+
+#endif /* UBBOARDVIEW_H_ */
diff --git a/Sankore-3.1/src/board/UBDrawingController.cpp b/Sankore-3.1/src/board/UBDrawingController.cpp
index fcd03a0..b6f7448 100644
--- a/Sankore-3.1/src/board/UBDrawingController.cpp
+++ b/Sankore-3.1/src/board/UBDrawingController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBDrawingController.h"
#include "core/UBSettings.h"
diff --git a/Sankore-3.1/src/board/UBDrawingController.h b/Sankore-3.1/src/board/UBDrawingController.h
index b52c9fa..96749e4 100644
--- a/Sankore-3.1/src/board/UBDrawingController.h
+++ b/Sankore-3.1/src/board/UBDrawingController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDRAWINGCONTROLLER_H_
#define UBDRAWINGCONTROLLER_H_
diff --git a/Sankore-3.1/src/board/UBFeaturesController.cpp b/Sankore-3.1/src/board/UBFeaturesController.cpp
index 96d29b9..978adc2 100644
--- a/Sankore-3.1/src/board/UBFeaturesController.cpp
+++ b/Sankore-3.1/src/board/UBFeaturesController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QGraphicsItem>
#include <QPointF>
#include <QtGui>
@@ -41,22 +42,11 @@
#include "gui/UBFeaturesWidget.h"
-const QString UBFeaturesController::virtualRootName = "root";
-const QString UBFeaturesController::rootPath = "/" + virtualRootName;
-
-const QString UBFeaturesController::appPath = rootPath + "/Applications";
-const QString UBFeaturesController::audiosPath = rootPath + "/Audios";
-const QString UBFeaturesController::moviesPath = rootPath + "/Movies";
-const QString UBFeaturesController::picturesPath = rootPath + "/Pictures";
-const QString UBFeaturesController::flashPath = rootPath + "/Animations";
-const QString UBFeaturesController::interactPath = rootPath + "/Interactivities";
-const QString UBFeaturesController::shapesPath = rootPath + "/Shapes";
-const QString UBFeaturesController::trashPath = rootPath + "/Trash";
-const QString UBFeaturesController::favoritePath = rootPath + "/Favorites";
-const QString UBFeaturesController::webSearchPath = rootPath + "/Web search";
-
-
-void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString & currVirtualPath, const QSet<QUrl> &pFavoriteSet)
+void UBFeaturesComputingThread::scanFS(const QUrl & currentPath
+ , const QString & currVirtualPath
+ , const QPair<CategoryData, QSet<QUrl> > &pfavoriteInfo
+ , UBFeature::Permissions pPermissions
+ , const QList<CategoryData> &extData)
{
Q_ASSERT(QFileInfo(currentPath.toLocalFile()).exists());
@@ -77,33 +67,70 @@ void UBFeaturesComputingThread::scanFS(const QUrl & currentPath, const QString &
if ( fullFileName.contains(".thumbnail."))
continue;
- UBFeature testFeature(currVirtualPath + "/" + fileName, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType);
+ //Testing exception permissions
+ QString testVirtualPath = currVirtualPath + "/" + fileName;
+ UBFeature::Permissions testPermissions = pPermissions;
+
+ foreach (CategoryData curException, extData) {
+ QString exceptionVirtualPath = curException.categoryFeature().getFullVirtualPath();
+ if (testVirtualPath.startsWith(exceptionVirtualPath)) {
+ qDebug() << "catched";
+ qDebug() << "ext" << exceptionVirtualPath << "test" << testVirtualPath;
+ //folder itself
+ if (exceptionVirtualPath.count() == testVirtualPath.count()) {
+ testPermissions = curException.categoryFeature().getPermissions();
+ //subfolder
+ } else {
+ testPermissions = curException.UserSubPermissions();
+ }
+ }
+ }
+
+ UBFeature testFeature(testVirtualPath, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType, testPermissions);
emit sendFeature(testFeature);
emit featureSent();
emit scanPath(fullFileName);
- if ( pFavoriteSet.find(QUrl::fromLocalFile(fullFileName)) != pFavoriteSet.end()) {
- //TODO send favoritePath from the controller or make favoritePath public and static
- emit sendFeature(UBFeature( UBFeaturesController::favoritePath + "/" + fileName, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType));
+ if ( pfavoriteInfo.second.find(QUrl::fromLocalFile(fullFileName)) != pfavoriteInfo.second.end()) {
+ emit sendFeature(UBFeature(pfavoriteInfo.first.categoryFeature().getFullVirtualPath() + "/" + fileName
+ , icon
+ , fileName
+ , QUrl::fromLocalFile(fullFileName)
+ , featureType
+ , pfavoriteInfo.first.librarySubPermissions())); //permissions for favorites subfolders
}
if (featureType == FEATURE_FOLDER) {
- scanFS(QUrl::fromLocalFile(fullFileName), currVirtualPath + "/" + fileName, pFavoriteSet);
+ scanFS(QUrl::fromLocalFile(fullFileName), currVirtualPath + "/" + fileName, pfavoriteInfo, pPermissions, extData);
}
}
}
-void UBFeaturesComputingThread::scanAll(QList<QPair<QUrl, UBFeature> > pScanningData, const QSet<QUrl> &pFavoriteSet)
+void UBFeaturesComputingThread::scanAll(QList<CategoryData> pScanningData
+ , const QPair<CategoryData, QSet<QUrl> > &pFavoriteInfo
+ , const QList<CategoryData> &extData)
{
- for (int i = 0; i < pScanningData.count(); i++) {
- if (abort) {
- return;
+ for (int n = static_cast<int>(CategoryData::Library); n <= static_cast<int>(CategoryData::UserDefined); n++) {
+ for (int i = 0; i < pScanningData.count(); i++) {
+ if (abort) {
+ return;
+ }
+ CategoryData curData = pScanningData.at(i);
+
+ emit scanCategory(curData.categoryFeature().getDisplayName());
+
+ CategoryData::pathType pType = static_cast<CategoryData::pathType>(n);
+ QList<QUrl> curScanPaths = curData.pathData().values(pType);
+ foreach (QUrl curUrl, curScanPaths) {
+// qDebug() << "location" << i << "is" << curUrl.toLocalFile();
+ scanFS(curUrl
+ , curData.categoryFeature().getFullVirtualPath()
+ , pFavoriteInfo
+ , curData.subFolderPermissionsForType(pType)
+ , extData);
+ }
}
- QPair<QUrl, UBFeature> curPair = pScanningData.at(i);
-
- emit scanCategory(curPair.second.getDisplayName());
- scanFS(curPair.first, curPair.second.getFullVirtualPath(), pFavoriteSet);
}
}
@@ -130,12 +157,16 @@ int UBFeaturesComputingThread::featuresCount(const QUrl &pPath)
return noItems;
}
-int UBFeaturesComputingThread::featuresCountAll(QList<QPair<QUrl, UBFeature> > pScanningData)
+int UBFeaturesComputingThread::featuresCountAll(QList<CategoryData> pScanningData)
{
int noItems = 0;
for (int i = 0; i < pScanningData.count(); i++) {
- QPair<QUrl, UBFeature> curPair = pScanningData.at(i);
- noItems += featuresCount(curPair.first);
+ CategoryData curCategoryData = pScanningData.at(i);
+ QMapIterator<CategoryData::pathType, QUrl> pathIterator(curCategoryData.pathData());
+ while (pathIterator.hasNext()) {
+ pathIterator.next();
+ noItems += featuresCount(pathIterator.value());
+ }
}
return noItems;
@@ -148,12 +179,13 @@ QThread(parent)
abort = false;
}
-void UBFeaturesComputingThread::compute(const QList<QPair<QUrl, UBFeature> > &pScanningData, QSet<QUrl> *pFavoritesSet)
+void UBFeaturesComputingThread::compute(const QList<CategoryData> &pcategoryList, const QPair<CategoryData, QSet<QUrl> > &pFavoriteInfo, const QList<CategoryData> &extData)
{
QMutexLocker curLocker(&mMutex);
- mScanningData = pScanningData;
- mFavoriteSet = *pFavoritesSet;
+ mScanningData = pcategoryList;
+ mExceptionData = extData;
+ mFavoriteInfo = pFavoriteInfo;
if (!isRunning()) {
start(LowPriority);
@@ -169,8 +201,9 @@ void UBFeaturesComputingThread::run()
// qDebug() << "Custom thread started execution";
mMutex.lock();
- QList<QPair<QUrl, UBFeature> > searchData = mScanningData;
- QSet<QUrl> favoriteSet = mFavoriteSet;
+ QList<CategoryData> searchData = mScanningData;
+ QList<CategoryData> extData = mExceptionData;
+ QPair<CategoryData, QSet<QUrl> > favoriteInfo = mFavoriteInfo;
mMutex.unlock();
if (abort) {
@@ -180,16 +213,16 @@ void UBFeaturesComputingThread::run()
break;
}
-// QTime curTime = QTime::currentTime();
+// QTime curTime = Q.Time::currentTime();
int fsCnt = featuresCountAll(searchData);
// int msecsto = curTime.msecsTo(QTime::currentTime());
// qDebug() << "time on evaluation" << msecsto;
emit maxFilesCountEvaluated(fsCnt);
-
emit scanStarted();
+
// curTime = QTime::currentTime();
- scanAll(searchData, favoriteSet);
+ scanAll(searchData, favoriteInfo, extData);
// qDebug() << "Time on finishing" << curTime.msecsTo(QTime::currentTime());
emit scanFinished();
@@ -215,11 +248,25 @@ UBFeaturesComputingThread::~UBFeaturesComputingThread()
wait();
}
-UBFeature::UBFeature(const QString &url, const QImage &icon, const QString &name, const QUrl &realPath, UBFeatureElementType type)
- : mThumbnail(icon), mDisplayName(name), mPath(realPath), elementType(type)
+UBFeature::UBFeature(const QString &url
+ , const QImage &icon
+ , const QString &name
+ , const QUrl &realPath
+ , UBFeatureElementType type
+ , Permissions pOwnPermissions
+ , QString pSortKey)
+ : mThumbnail(icon)
+ , mDisplayName(name)
+ , mPath(realPath)
+ , elementType(type)
+ , mOwnPermissions(pOwnPermissions)
+ , mSortKey(pSortKey)
{
mName = getNameFromVirtualPath(url);
virtualDir = getVirtualDirFromVirtualPath(url);
+ if (mSortKey.isNull()) {
+ mSortKey = name;
+ }
}
UBFeature::~UBFeature()
@@ -254,12 +301,18 @@ QString UBFeature::getVirtualDirFromVirtualPath(const QString &pVirtPath)
QString UBFeature::getUrl() const
{
- if ( elementType == FEATURE_INTERNAL )
+ if ( elementType == FEATURE_INTERNAL )
return getFullPath().toString();
return getFullPath().toLocalFile();
}
+UBFeature &UBFeature::markedWithSortKey(const QString &str)
+{
+ mSortKey = str;
+ return *this;
+}
+
bool UBFeature::operator ==( const UBFeature &f )const
{
return virtualDir == f.getVirtualPath() && mName == f.getName() && mPath == f.getFullPath() && elementType == f.getType();
@@ -267,12 +320,12 @@ bool UBFeature::operator ==( const UBFeature &f )const
bool UBFeature::operator !=( const UBFeature &f )const
{
- return !(*this == f);
+ return !(*this == f);
}
bool UBFeature::isFolder() const
{
- return elementType == FEATURE_CATEGORY || elementType == FEATURE_TRASH || elementType == FEATURE_FAVORITE
+ return elementType == FEATURE_CATEGORY || elementType == FEATURE_TRASH || elementType == FEATURE_FAVORITE
|| elementType == FEATURE_FOLDER || elementType == FEATURE_SEARCH;
}
@@ -291,6 +344,8 @@ bool UBFeature::isDeletable() const
|| elementType == FEATURE_IMAGE
|| elementType == FEATURE_FLASH
|| elementType == FEATURE_FOLDER
+ || elementType == FEATURE_BOOKMARK
+ || elementType == FEATURE_LINK
//Ilia. Just a hotfix. Permission mechanism for UBFeatures should be reworked
|| getVirtualPath().startsWith("/root/Applications/Web");
}
@@ -305,45 +360,17 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) :
,featuresList(0)
,mLastItemOffsetIndex(0)
{
- //Initializing physical directories from UBSettings
- mUserAudioDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userAudioDirectory());
- mUserVideoDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userVideoDirectory());
- mUserPicturesDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userImageDirectory());
- mUserInteractiveDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userInteractiveDirectory());
- mUserAnimationDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userAnimationDirectory());
-
- mLibPicturesDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->applicationImageLibraryDirectory());
- mLibAudiosDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->applicationAudiosLibraryDirectory());
- mLibVideosDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->applicationVideosLibraryDirectory());
- mLibAnimationsDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->applicationAnimationsLibraryDirectory());
- mLibInteractiveDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->applicationInteractivesDirectory());
- mLibApplicationsDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->applicationApplicationsLibraryDirectory());
- mLibShapesDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->applicationShapeLibraryDirectory());
- mLibSearchDirectoryPath =QUrl::fromLocalFile(UBSettings::settings()->userSearchDirectory());
- trashDirectoryPath = QUrl::fromLocalFile(UBSettings::userTrashDirPath());
-
- rootElement = UBFeature(rootPath, QImage( ":images/libpalette/home.png" ), "root", QUrl());
- audiosElement = UBFeature( audiosPath, QImage(":images/libpalette/AudiosCategory.svg"), tr("Audios") , mUserAudioDirectoryPath, FEATURE_CATEGORY);
- moviesElement = UBFeature( moviesPath, QImage(":images/libpalette/MoviesCategory.svg"), tr("Movies") , mUserVideoDirectoryPath, FEATURE_CATEGORY);
- picturesElement = UBFeature( picturesPath, QImage(":images/libpalette/PicturesCategory.svg"), tr("Pictures") , mUserPicturesDirectoryPath, FEATURE_CATEGORY);
- flashElement = UBFeature( flashPath, QImage(":images/libpalette/FlashCategory.svg"), tr("Animations") , mUserAnimationDirectoryPath, FEATURE_CATEGORY);
- interactElement = UBFeature( interactPath, QImage(":images/libpalette/InteractivesCategory.svg"), tr("Interactivities") , mLibInteractiveDirectoryPath, FEATURE_CATEGORY);
- applicationsElement = UBFeature( appPath, QImage(":images/libpalette/ApplicationsCategory.svg"), tr("Applications") , mUserInteractiveDirectoryPath, FEATURE_CATEGORY);
- shapesElement = UBFeature( shapesPath, QImage(":images/libpalette/ShapesCategory.svg"), tr("Shapes") , mLibShapesDirectoryPath, FEATURE_CATEGORY );
- favoriteElement = UBFeature( favoritePath, QImage(":images/libpalette/FavoritesCategory.svg"), tr("Favorites"), QUrl("favorites"), FEATURE_FAVORITE );
- webSearchElement = UBFeature( webSearchPath, QImage(":images/libpalette/WebSearchCategory.svg"), tr("Web search"), mLibSearchDirectoryPath, FEATURE_CATEGORY);
-
- trashElement = UBFeature( trashPath, QImage(":images/libpalette/TrashCategory.svg"), tr("Trash"), trashDirectoryPath, FEATURE_TRASH);
+ initHardcodedData();
featuresList = new QList <UBFeature>();
- scanFS();
+ loadHardcodedItemsToModel();
featuresModel = new UBFeaturesModel(featuresList, this);
featuresModel->setSupportedDragActions(Qt::CopyAction | Qt::MoveAction);
featuresProxyModel = new UBFeaturesProxyModel(this);
- featuresProxyModel->setFilterFixedString(rootPath);
+ featuresProxyModel->setFilterFixedString(rootData.categoryFeature().getFullVirtualPath());
featuresProxyModel->setSourceModel(featuresModel);
featuresProxyModel->setFilterCaseSensitivity( Qt::CaseInsensitive );
@@ -352,7 +379,7 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) :
featuresSearchModel->setFilterCaseSensitivity( Qt::CaseInsensitive );
featuresPathModel = new UBFeaturesPathProxyModel(this);
- featuresPathModel->setPath(rootPath);
+ featuresPathModel->setPath(rootData.categoryFeature().getFullVirtualPath());
featuresPathModel->setSourceModel(featuresModel);
connect(featuresModel, SIGNAL(dataRestructured()), featuresProxyModel, SLOT(invalidate()));
@@ -365,31 +392,27 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) :
connect(&mCThread, SIGNAL(scanPath(QString)), this, SIGNAL(scanPath(QString)));
connect(UBApplication::boardController, SIGNAL(npapiWidgetCreated(QString)), this, SLOT(createNpApiFeature(QString)));
- QTimer::singleShot(0, this, SLOT(startThread()));
+ QTimer::singleShot(0, this, SLOT(scanFS()));
}
-void UBFeaturesController::startThread()
+void UBFeaturesController::scanFS()
{
- QList<QPair<QUrl, UBFeature> > computingData;
-
- computingData << QPair<QUrl, UBFeature>(mLibAudiosDirectoryPath, audiosElement)
- << QPair<QUrl, UBFeature>(mLibVideosDirectoryPath, moviesElement)
- << QPair<QUrl, UBFeature>(mLibAnimationsDirectoryPath, flashElement)
- << QPair<QUrl, UBFeature>(mLibPicturesDirectoryPath, picturesElement)
-
- << QPair<QUrl, UBFeature>(mUserInteractiveDirectoryPath, applicationsElement)
- << QPair<QUrl, UBFeature>(mUserAudioDirectoryPath, audiosElement)
- << QPair<QUrl, UBFeature>(mUserPicturesDirectoryPath, picturesElement)
- << QPair<QUrl, UBFeature>(mUserVideoDirectoryPath, moviesElement)
- << QPair<QUrl, UBFeature>(mUserAnimationDirectoryPath, flashElement)
-
- << QPair<QUrl, UBFeature>(mLibApplicationsDirectoryPath, applicationsElement)
- << QPair<QUrl, UBFeature>(mLibShapesDirectoryPath, shapesElement)
- << QPair<QUrl, UBFeature>(mLibInteractiveDirectoryPath, interactElement)
- << QPair<QUrl, UBFeature>(trashDirectoryPath, trashElement)
- << QPair<QUrl, UBFeature>(mLibSearchDirectoryPath, webSearchElement);
-
- mCThread.compute(computingData, favoriteSet);
+ QList<CategoryData> computingData;
+
+ computingData << audiosData
+ << moviesData
+ << flashData
+ << picturesData
+ << appData
+ << shapesData
+ << interactivityData
+ << webSearchData
+ << trashData
+ << bookmarkData;
+
+ QPair<CategoryData, QSet<QUrl> > favoriteInfo(favoriteData, *favoriteSet);
+
+ mCThread.compute(computingData, favoriteInfo, extentionPermissionsCategoryData);
}
void UBFeaturesController::createNpApiFeature(const QString &str)
@@ -398,24 +421,236 @@ void UBFeaturesController::createNpApiFeature(const QString &str)
QString widgetName = QFileInfo(str).fileName();
- featuresModel->addItem(UBFeature(QString(appPath + "/Web/" + widgetName), QImage(UBGraphicsWidgetItem::iconFilePath(QUrl::fromLocalFile(str))), widgetName, QUrl::fromLocalFile(str), FEATURE_INTERACTIVE));
+ featuresModel->addItem(UBFeature(QString(appData.categoryFeature().getFullVirtualPath() + "/Web/" + widgetName)
+ , QImage(UBGraphicsWidgetItem::iconFilePath(QUrl::fromLocalFile(str)))
+ , widgetName
+ , QUrl::fromLocalFile(str)
+ , FEATURE_INTERACTIVE));
}
-void UBFeaturesController::scanFS()
+void UBFeaturesController::initHardcodedData()
+{
+ rootData = CategoryData(CategoryData::PathData() //Static library paths for root category. Scanning data
+ .insertr(CategoryData::Library, QUrl())
+ //UBFeature represented root element
+ , UBFeature("/root" //Virtual Path
+ ,QImage(":images/libpalette/home.png") //Icon
+ ,"root" //Translation name
+ , QUrl() //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::NO_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::NO_P)
+ .insertr(CategoryData::UserDefined, UBFeature::NO_P));
+
+ audiosData = CategoryData(CategoryData::PathData() //Static library paths for Audios category. Scanning data
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->applicationAudiosLibraryDirectory()))
+ .insertr(CategoryData::UserDefined, QUrl::fromLocalFile(UBSettings::settings()->userAudioDirectory()))
+ //UBFeature represented Audios element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Audios" //Virtual Path
+ ,QImage(":images/libpalette/AudiosCategory.svg") //Icon
+ , tr("Audios") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->
+ applicationAudiosLibraryDirectory()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::WRITE_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::WRITE_P | UBFeature::DELETE_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+ moviesData = CategoryData(CategoryData::PathData() //Static library paths for Videos category. Scanning data
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->applicationVideosLibraryDirectory()))
+ .insertr(CategoryData::UserDefined, QUrl::fromLocalFile(UBSettings::settings()->userVideoDirectory()))
+ //UBFeature represented Movies element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Movies" //Virtual Path
+ ,QImage(":images/libpalette/MoviesCategory.svg") //Icon
+ , tr("Movies") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->
+ applicationVideosLibraryDirectory()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::WRITE_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::WRITE_P | UBFeature::DELETE_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+ picturesData = CategoryData(CategoryData::PathData() //Static library paths for Pictures category. Scanning data
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->applicationImageLibraryDirectory()))
+ .insertr(CategoryData::UserDefined, QUrl::fromLocalFile(UBSettings::settings()->userImageDirectory()))
+ //UBFeature represented Pictures element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Pictures" //Virtual Path
+ ,QImage(":images/libpalette/PicturesCategory.svg") //Icon
+ , tr("Pictures") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->
+ applicationImageLibraryDirectory()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::WRITE_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::WRITE_P | UBFeature::DELETE_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+ flashData = CategoryData(CategoryData::PathData() //Static library paths for Flash category. Scanning data
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->applicationAnimationsLibraryDirectory()))
+ .insertr(CategoryData::UserDefined, QUrl::fromLocalFile(UBSettings::settings()->userAnimationDirectory()))
+ //UBFeature represented Animations element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Animations" //Virtual Path
+ ,QImage(":images/libpalette/FlashCategory.svg") //Icon
+ , tr("Animations") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->
+ applicationAnimationsLibraryDirectory()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::NO_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::NO_P)
+ .insertr(CategoryData::UserDefined, UBFeature::NO_P));
+
+ appData = CategoryData(CategoryData::PathData() //Static library paths for Applications category. Scanning data
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->applicationApplicationsLibraryDirectory()))
+ .insertr(CategoryData::UserDefined, QUrl::fromLocalFile(UBSettings::settings()->userApplicationDirectory()))
+ //UBFeature represented Applications element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Applications" //Virtual Path
+ ,QImage(":images/libpalette/ApplicationsCategory.svg") //Icon
+ , tr("Applications") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->
+ applicationApplicationsLibraryDirectory()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::NO_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::NO_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+ interactivityData = CategoryData(CategoryData::PathData() //Static library paths for Interactivities category. Scanning data
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->applicationInteractivesDirectory()))
+ .insertr(CategoryData::UserDefined, QUrl::fromLocalFile(UBSettings::settings()->userInteractiveDirectory()))
+ //UBFeature represented Interactivities element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Interactivities" //Virtual Path
+ ,QImage(":images/libpalette/InteractivesCategory.svg") //Icon
+ , tr("Interactivities") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->
+ applicationInteractivesDirectory()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::NO_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::NO_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+ shapesData = CategoryData(CategoryData::PathData() //Static library paths for Shapes category. Scanning data
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->applicationShapeLibraryDirectory()))
+ //UBFeature represented Shapes element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Shapes" //Virtual Path
+ ,QImage(":images/libpalette/ShapesCategory.svg") //Icon
+ , tr("Shapes") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->
+ applicationShapeLibraryDirectory()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::NO_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::NO_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+ favoriteData = CategoryData(CategoryData::PathData() //Static library paths for Favorites category. Scanning data
+ //UBFeature represented Favorites element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Favorites" //Virtual Path
+ ,QImage(":images/libpalette/FavoritesCategory.svg") //Icon
+ , tr("Favorites") //Translation name
+ , QUrl() //Main path in file system
+ , FEATURE_FAVORITE //UBFeature's type
+ , UBFeature::NO_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::NO_P)
+ .insertr(CategoryData::UserDefined, UBFeature::NO_P));
+
+ webSearchData = CategoryData(CategoryData::PathData() //Static library paths for Web search category. Scanning data
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->userSearchDirectory()))
+ //UBFeature represented Web search element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Web search" //Virtual Path
+ ,QImage(":images/libpalette/WebSearchCategory.svg") //Icon
+ , tr("Web search") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->
+ userSearchDirectory()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::NO_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::WRITE_P | UBFeature::DELETE_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+
+ bookmarkData = CategoryData(CategoryData::PathData() //Path for incoming user web content.
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->userBookmarkDirectory()))
+ //UBFeature represented Trash element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath()
+ + "/Bookmarks" //Virtual Path
+ , QImage(":images/libpalette/BookmarkCategory.svg") //Icon
+ , tr("Bookmarks") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->userBookmarkDirectory()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::WRITE_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::WRITE_P | UBFeature::DELETE_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+ trashData = CategoryData(CategoryData::PathData() //Static library paths for Trash category. Scanning data
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::userTrashDirPath()))
+ //UBFeature represented Trash element
+ , UBFeature(rootData.categoryFeature().getFullVirtualPath() + "/Trash" //Virtual Path
+ ,QImage(":images/libpalette/TrashCategory.svg") //Icon
+ , tr("Trash") //Translation name
+ , QUrl::fromLocalFile(UBSettings::userTrashDirPath()) //Main path in file system
+ , FEATURE_TRASH //UBFeature's type
+ , UBFeature::WRITE_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::WRITE_P | UBFeature::DELETE_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+ webFolderData = CategoryData(CategoryData::PathData() //Path for incoming user web content.
+ .insertr(CategoryData::Library, QUrl::fromLocalFile(UBSettings::settings()->userWidgetPath()))
+ //UBFeature represented Trash element
+ , UBFeature(appData.categoryFeature().getFullVirtualPath()
+ + "/"
+ + UBSettings::userRelativeWidgetPath() //Virtual Path
+ ,QImage(":images/libpalette/TrashCategory.svg") //Icon
+ , tr("Web") //Translation name
+ , QUrl::fromLocalFile(UBSettings::settings()->
+ userWidgetPath()) //Main path in file system
+ , FEATURE_CATEGORY //UBFeature's type
+ , UBFeature::WRITE_P) //UBFeature's permissions
+ //permissions for category subfolders. Scanning data
+ , CategoryData::PermissionsData()
+ .insertr(CategoryData::Library, UBFeature::WRITE_P | UBFeature::DELETE_P)
+ .insertr(CategoryData::UserDefined, UBFeature::WRITE_P | UBFeature::DELETE_P));
+
+
+
+ extentionPermissionsCategoryData << webFolderData;
+}
+
+void UBFeaturesController::loadHardcodedItemsToModel()
{
featuresList->clear();
- featuresList->append(rootElement);
-
- *featuresList << audiosElement
- << moviesElement
- << picturesElement
- << flashElement
- << interactElement
- << applicationsElement
- << shapesElement
- << favoriteElement
- << webSearchElement
- << trashElement;
+ featuresList->append(rootData.categoryFeature());
+
+ *featuresList << audiosData.categoryFeature().markedWithSortKey("01")
+ << moviesData.categoryFeature().markedWithSortKey("02")
+ << picturesData.categoryFeature().markedWithSortKey("03")
+ << flashData.categoryFeature().markedWithSortKey("04")
+ << interactivityData.categoryFeature().markedWithSortKey("05")
+ << appData.categoryFeature().markedWithSortKey("06")
+ << shapesData.categoryFeature().markedWithSortKey("07")
+ << favoriteData.categoryFeature().markedWithSortKey("08")
+ << webSearchData.categoryFeature().markedWithSortKey("09")
+ << bookmarkData.categoryFeature().markedWithSortKey("10")
+ << trashData.categoryFeature().markedWithSortKey("11");
//filling favoriteList
loadFavoriteList();
@@ -423,97 +658,44 @@ void UBFeaturesController::scanFS()
QList <UBToolsManager::UBToolDescriptor> tools = UBToolsManager::manager()->allTools();
foreach (UBToolsManager::UBToolDescriptor tool, tools) {
- featuresList->append(UBFeature(appPath + "/" + tool.label, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL));
+ featuresList->append(UBFeature(appData.categoryFeature().getFullVirtualPath() + "/" + tool.label, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL, UBFeature::NO_P));
if (favoriteSet->find(QUrl(tool.id)) != favoriteSet->end()) {
- featuresList->append(UBFeature(favoritePath + "/" + tool.label, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL));
+ featuresList->append(UBFeature(favoriteData.categoryFeature().getFullVirtualPath() + "/" + tool.label, tool.icon.toImage(), tool.label, QUrl(tool.id), FEATURE_INTERNAL, UBFeature::NO_P));
}
}
}
-void UBFeaturesController::fileSystemScan(const QUrl & currentPath, const QString & currVirtualPath)
-{
- QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currentPath.toLocalFile());
-
- QFileInfoList::iterator fileInfo;
- for ( fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end(); fileInfo += 1) {
- QString fullFileName = fileInfo->absoluteFilePath();
- UBFeatureElementType featureType = fileTypeFromUrl(fullFileName);
- QString fileName = fileInfo->fileName();
-
- QImage icon = getIcon(fullFileName, featureType);
-
- if ( fullFileName.contains(".thumbnail."))
- continue;
-
- UBFeature testFeature(currVirtualPath + "/" + fileName, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType);
-
- featuresList->append(testFeature);
-
- if ( favoriteSet->find( QUrl::fromLocalFile( fullFileName ) ) != favoriteSet->end() ) {
- featuresList->append( UBFeature( favoritePath + "/" + fileName, icon, fileName, QUrl::fromLocalFile( fullFileName ), featureType ) );
- }
-
- if (featureType == FEATURE_FOLDER) {
- fileSystemScan(QUrl::fromLocalFile(fullFileName), currVirtualPath + "/" + fileName);
- }
- }
-}
-
-int UBFeaturesController::featuresCount(const QUrl &currPath)
-{
- int noItems = 0;
-
- QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currPath.toLocalFile());
-
- QFileInfoList::iterator fileInfo;
- for ( fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end(); fileInfo += 1) {
- QString fullFileName = fileInfo->absoluteFilePath();
- UBFeatureElementType featureType = fileTypeFromUrl(fullFileName);
-
- if (featureType != FEATURE_INVALID && !fullFileName.contains(".thumbnail.")) {
- noItems++;
- } else {
- continue;
- }
-
- if (featureType == FEATURE_FOLDER) {
- noItems += featuresCount(QUrl::fromLocalFile(fullFileName));
- }
- }
-
- return noItems;
-}
void UBFeaturesController::loadFavoriteList()
{
- favoriteSet = new QSet<QUrl>();
- QFile file( UBSettings::userDataDirectory() + "/favorites.dat" );
- if ( file.exists() )
- {
- file.open(QIODevice::ReadOnly);
- QDataStream in(&file);
- int elementsNumber;
- in >> elementsNumber;
- for ( int i = 0; i < elementsNumber; ++i)
- {
- QUrl path;
- in >> path;
+ favoriteSet = new QSet<QUrl>();
+ QFile file( UBSettings::userDataDirectory() + "/favorites.dat" );
+ if ( file.exists() )
+ {
+ file.open(QIODevice::ReadOnly);
+ QDataStream in(&file);
+ int elementsNumber;
+ in >> elementsNumber;
+ for ( int i = 0; i < elementsNumber; ++i)
+ {
+ QUrl path;
+ in >> path;
favoriteSet->insert( path );
- }
- }
+ }
+ }
}
void UBFeaturesController::saveFavoriteList()
{
- QFile file( UBSettings::userDataDirectory() + "/favorites.dat" );
- file.resize(0);
- file.open(QIODevice::WriteOnly);
- QDataStream out(&file);
- out << favoriteSet->size();
- for ( QSet<QUrl>::iterator it = favoriteSet->begin(); it != favoriteSet->end(); ++it )
- {
- out << (*it);
- }
- file.close();
+ QFile file( UBSettings::userDataDirectory() + "/favorites.dat" );
+ file.resize(0);
+ file.open(QIODevice::WriteOnly);
+ QDataStream out(&file);
+ out << favoriteSet->size();
+ for ( QSet<QUrl>::iterator it = favoriteSet->begin(); it != favoriteSet->end(); ++it )
+ {
+ out << (*it);
+ }
+ file.close();
}
QString UBFeaturesController::uniqNameForFeature(const UBFeature &feature, const QString &pName, const QString &pExtention) const
@@ -583,29 +765,28 @@ QString UBFeaturesController::adjustName(const QString &str)
void UBFeaturesController::addToFavorite( const QUrl &path )
{
- QString filePath = fileNameFromUrl( path );
- if ( favoriteSet->find( path ) == favoriteSet->end() )
- {
- QFileInfo fileInfo( filePath );
- QString fileName = fileInfo.fileName();
- UBFeatureElementType type = fileTypeFromUrl(filePath);
- UBFeature elem(favoritePath + "/" + fileName, getIcon(filePath, type), fileName, path, fileTypeFromUrl(filePath) );
- favoriteSet->insert( path );
- saveFavoriteList();
+ QString filePath = fileNameFromUrl( path );
+ if ( favoriteSet->find( path ) == favoriteSet->end() )
+ {
+ QFileInfo fileInfo( filePath );
+ QString fileName = fileInfo.fileName();
+ UBFeatureElementType type = fileTypeFromUrl(fileInfo.absoluteFilePath());
+ UBFeature elem(favoriteData.categoryFeature().getFullVirtualPath() + "/" + fileName, getIcon(filePath, type), fileName, path, fileTypeFromUrl(filePath) );
+ favoriteSet->insert( path );
+ saveFavoriteList();
if ( !elem.getVirtualPath().isEmpty() && !elem.getVirtualPath().isNull())
featuresModel->addItem( elem );
- }
+ }
}
void UBFeaturesController::removeFromFavorite( const QUrl &path, bool deleteManualy)
{
-// QString filePath = fileNameFromUrl( path );
- if ( favoriteSet->find( path ) != favoriteSet->end() )
- {
- favoriteSet->erase( favoriteSet->find( path ) );
- saveFavoriteList();
- }
+ if ( favoriteSet->find( path ) != favoriteSet->end() )
+ {
+ favoriteSet->erase( favoriteSet->find( path ) );
+ saveFavoriteList();
+ }
if (deleteManualy) {
featuresModel->deleteFavoriteItem(path.toString());
@@ -614,10 +795,10 @@ void UBFeaturesController::removeFromFavorite( const QUrl &path, bool deleteManu
QString UBFeaturesController::fileNameFromUrl( const QUrl &url )
{
- QString fileName = url.toString();
- if ( fileName.contains( "uniboardTool://" ) )
- return fileName;
- return url.toLocalFile();
+ QString fileName = url.toString();
+ if ( fileName.contains( "uniboardTool://" ) )
+ return fileName;
+ return url.toLocalFile();
}
@@ -650,13 +831,17 @@ UBFeatureElementType UBFeaturesController::fileTypeFromUrl(const QString &path)
fileType = FEATURE_VIDEO;
} else if (mimeString.contains("image")) {
fileType = FEATURE_IMAGE;
+ } else if (mimeString.contains("bookmark")) {
+ fileType = FEATURE_BOOKMARK;
+ } else if (mimeString.contains("link")){
+ fileType = FEATURE_LINK;
} else if (fileInfo.isDir()) {
fileType = FEATURE_FOLDER;
} else {
fileType = FEATURE_INVALID;
}
- return fileType;
+ return fileType;
}
QImage UBFeaturesController::getIcon(const QString &path, UBFeatureElementType pFType = FEATURE_INVALID)
@@ -673,7 +858,12 @@ QImage UBFeaturesController::getIcon(const QString &path, UBFeatureElementType p
return QImage(":images/libpalette/soundIcon.svg");
} else if (pFType == FEATURE_VIDEO) {
return QImage(":images/libpalette/movieIcon.svg");
- } else if (pFType == FEATURE_IMAGE) {
+ } else if (pFType == FEATURE_BOOKMARK) {
+ return QImage(":images/libpalette/bookmarkIcon.svg");
+ } else if (pFType == FEATURE_LINK) {
+ return QImage(":images/trapFlashPalette/trappedIcon.svg");
+ }
+ else if (pFType == FEATURE_IMAGE) {
QImage pix(path);
if (pix.isNull()) {
pix = QImage(":images/libpalette/notFound.png");
@@ -686,15 +876,6 @@ QImage UBFeaturesController::getIcon(const QString &path, UBFeatureElementType p
return QImage(":images/libpalette/notFound.png");
}
-bool UBFeaturesController::isDeletable( const QUrl &url )
-{
- UBFeatureElementType type = fileTypeFromUrl(fileNameFromUrl(url));
- return type == FEATURE_AUDIO
- || type == FEATURE_VIDEO
- || type == FEATURE_IMAGE
- || type == FEATURE_ITEM;
-}
-
QString UBFeaturesController::categoryNameForVirtualPath(const QString &str)
{
QString result;
@@ -710,11 +891,19 @@ QImage UBFeaturesController::createThumbnail(const QString &path)
QString thumbnailPath = path;
QString mimetype = UBFileSystemUtils::mimeTypeFromFileName(path);
- if ( mimetype.contains("audio" )) {
+ if (mimetype.contains("audio" )) {
thumbnailPath = ":images/libpalette/soundIcon.svg";
- } else if ( mimetype.contains("video")) {
+ }
+ else if (mimetype.contains("video")) {
thumbnailPath = ":images/libpalette/movieIcon.svg";
- } else {
+ }
+ else if(mimetype.contains("bookmark")){
+ thumbnailPath = ":images/libpalette/bookmarkIcon.svg";
+ }
+ else if(mimetype.contains("link")){
+ thumbnailPath = ":images/trapFlashPalette/trappedIcon.svg";
+ }
+ else {
QImage pix(path);
if (!pix.isNull()) {
pix = pix.scaledToWidth(qMin(UBSettings::maxThumbnailWidth, pix.width()), Qt::SmoothTransformation);
@@ -734,6 +923,76 @@ void UBFeaturesController::importImage(const QImage &image, const QString &fileN
importImage(image, currentElement, fileName);
}
+void UBFeaturesController::createBookmark(const QString& fileName, const QString &urlString)
+{
+ QString lFileName = UBFileSystemUtils::cleanName(fileName);
+ QString bookmarkDirectory = bookmarkData.categoryFeature().getFullPath().toLocalFile() + "/";
+ QString mFileName = bookmarkDirectory + lFileName + ".bkm";
+ int counter = 1;
+ while(QFileInfo(mFileName).exists()){
+ if(counter == 1)
+ mFileName=mFileName.replace(QString(".bkm"),"");
+ else
+ mFileName=mFileName.replace(QString("-%1.bkm").arg(counter++),"");
+ mFileName=mFileName.append(QString("-%1.bkm").arg(counter));
+ }
+
+ QFile file(mFileName);
+ file.open(QIODevice::WriteOnly | QIODevice::Text);
+ file.write(urlString.toAscii());
+ file.close();
+
+ QImage thumb = createThumbnail(mFileName);
+ UBFeature resultItem = UBFeature(bookmarkData.categoryFeature().getFullVirtualPath() + "/" + mFileName.replace(bookmarkDirectory,""), thumb , mFileName, QUrl::fromLocalFile(mFileName), FEATURE_BOOKMARK );
+
+ featuresModel->addItem(resultItem);
+
+}
+
+void UBFeaturesController::createLink(const QString& fileName, const QString& urlString, QSize& size, QString mimeType, QString bEmbedCode)
+{
+ QString name = fileName;
+ if(name.indexOf(".") != -1)
+ name = name.left(name.indexOf("."));
+
+ CategoryData categoryData = getDestinationCategoryForMimeType((!mimeType.isNull() ? mimeType : UBFileSystemUtils::mimeTypeFromFileName(urlString)));
+ QString lFileName = categoryData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + name + ".lnk";
+
+ int counter = 1;
+ while(QFileInfo(lFileName).exists()){
+ if(counter == 1)
+ lFileName=lFileName.replace(QString(".lnk"),"");
+ else
+ lFileName=lFileName.replace(QString("-%1.lnk").arg(counter++),"");
+ lFileName=lFileName.append(QString("-%1.lnk").arg(counter));
+ }
+
+ QFile file(lFileName);
+ file.open(QIODevice::WriteOnly | QIODevice::Text);
+
+ QXmlStreamWriter xmlWriter(&file);
+
+ xmlWriter.writeStartDocument();
+
+ xmlWriter.writeStartElement("link");
+
+ xmlWriter.writeTextElement("src", urlString);
+ xmlWriter.writeTextElement("width", QString("%1").arg(size.width()));
+ xmlWriter.writeTextElement("height", QString("%1").arg(size.height()));
+ xmlWriter.writeTextElement("html", bEmbedCode);
+
+ xmlWriter.writeEndElement();
+
+ xmlWriter.writeEndDocument();
+
+
+ file.close();
+
+ QImage thumb = createThumbnail(lFileName);
+ UBFeature resultItem = UBFeature(categoryData.categoryFeature().getFullVirtualPath() + "/" + lFileName.replace(categoryData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/",""), thumb , lFileName, QUrl::fromLocalFile(lFileName), FEATURE_LINK );
+
+ featuresModel->addItem(resultItem);
+}
void UBFeaturesController::importImage( const QImage &image, const UBFeature &destination, const QString &fileName )
{
@@ -744,24 +1003,19 @@ void UBFeaturesController::importImage( const QImage &image, const UBFeature &de
QDateTime now = QDateTime::currentDateTime();
static int imageCounter = 0;
mFileName = tr("ImportedImage") + "-" + now.toString("dd-MM-yyyy hh-mm-ss");
-
- filePath = dest.getFullPath().toLocalFile() + "/" + mFileName;
+
+ filePath = picturesData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + mFileName;
if (QFile::exists(filePath+".png"))
mFileName += QString("-[%1]").arg(++imageCounter);
else
imageCounter = 0;
-
- mFileName += ".png";
- }
-
- if ( !destination.getFullVirtualPath().startsWith( picturesElement.getFullVirtualPath(), Qt::CaseInsensitive ) )
- {
- dest = picturesElement;
+ mFileName += ".png";
}
- filePath = dest.getFullPath().toLocalFile() + "/" + mFileName;
+ dest = picturesData.categoryFeature();
+ filePath = picturesData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + mFileName;
image.save(filePath);
QImage thumb = createThumbnail( filePath );
@@ -796,6 +1050,19 @@ QStringList UBFeaturesController::getFileNamesInFolders()
void UBFeaturesController::addNewFolder(QString name)
{
QString path = currentElement.getFullPath().toLocalFile() + "/" + name;
+
+ if(currentElement.getFullVirtualPath() == audiosData.categoryFeature().getFullVirtualPath())
+ path = audiosData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + name;
+ else if(currentElement.getFullVirtualPath() == moviesData.categoryFeature().getFullVirtualPath())
+ path = moviesData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + name;
+ else if(currentElement.getFullVirtualPath() == picturesData.categoryFeature().getFullVirtualPath())
+ path = picturesData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + name;
+ else if(currentElement.getFullVirtualPath() == flashData.categoryFeature().getFullVirtualPath())
+ path = flashData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + name;
+ else if(currentElement.getFullVirtualPath() == interactivityData.categoryFeature().getFullVirtualPath())
+ path = interactivityData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + name;
+ else if(currentElement.getFullVirtualPath() == appData.categoryFeature().getFullVirtualPath())
+ path = appData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + name;
if ("/root" == currentElement.getFullVirtualPath())
{
@@ -804,7 +1071,7 @@ void UBFeaturesController::addNewFolder(QString name)
if(!QFileInfo(path).exists()) {
QDir().mkpath(path);
- }
+ }
UBFeature newFeatureFolder = UBFeature( currentElement.getFullVirtualPath() + "/" + name, QImage(":images/libpalette/folder.svg"),
name, QUrl::fromLocalFile( path ), FEATURE_FOLDER );
@@ -822,61 +1089,92 @@ void UBFeaturesController::addItemAsBackground(const UBFeature &item)
UBApplication::boardController->downloadURL( item.getFullPath(), QString(), QPointF(), QSize(), true );
}
-UBFeature UBFeaturesController::getDestinationFeatureForUrl( const QUrl &url )
+CategoryData UBFeaturesController::getDestinationCategoryForUrl( const QUrl &url )
{
QString mimetype = UBFileSystemUtils::mimeTypeFromFileName( url.toString() );
- return getDestinationFeatureForMimeType(mimetype);
+ return getDestinationCategoryForMimeType(mimetype);
}
-UBFeature UBFeaturesController::getDestinationFeatureForMimeType(const QString &pMmimeType)
+CategoryData UBFeaturesController::getDestinationCategoryForMimeType(const QString &pMmimeType,const QUrl& sourceUrl)
{
if ( pMmimeType.contains("audio") )
- return audiosElement;
+ return audiosData;
if ( pMmimeType.contains("video") )
- return moviesElement;
+ return moviesData;
else if ( pMmimeType.contains("image") || pMmimeType.isEmpty())
- return picturesElement;
+ return picturesData;
else if ( pMmimeType.contains("application") )
{
if ( pMmimeType.contains( "x-shockwave-flash") )
- return flashElement;
- else
- return interactElement;
+ return flashData;
+ else{
+ QString source = sourceUrl.toString();
+ if(source.length()){
+ if(source.contains("?type=application"))
+ return appData;
+ else
+ return interactivityData;
+ }
+ else
+ return webFolderData;
+ }
}
- return UBFeature();
+
+ return CategoryData();
+}
+
+QString UBFeaturesController::getFeaturePathByName(const QString &featureName) const
+{
+ QString videoPickerWidgetPath;
+ foreach (UBFeature curFeature, *featuresList)
+ {
+ if (curFeature.getName().contains(featureName))
+ videoPickerWidgetPath = curFeature.getFullPath().toLocalFile();
+ }
+ Q_ASSERT(!videoPickerWidgetPath.isEmpty());
+ return videoPickerWidgetPath;
}
void UBFeaturesController::addDownloadedFile(const QUrl &sourceUrl, const QByteArray &pData, const QString pContentSource, const QString pTitle)
{
- UBFeature dest = getDestinationFeatureForMimeType(pContentSource);
+ CategoryData destData = getDestinationCategoryForMimeType(pContentSource,sourceUrl);
+
+ if (destData.isNull()) {
+ return;
+ }
+
+ UBFeature dest = destData.categoryFeature();
if (dest == UBFeature())
return;
QString fileName;
QString filePath;
-
- //Audio item
- if(dest == picturesElement) {
+
+ if(dest == picturesData.categoryFeature()) {
QString UniqName = uniqNameForFeature(dest, adjustName(pTitle), ".jpg");
fileName = !UniqName.isNull()
? UniqName
: tr("ImportedImage") + "-" + QDateTime::currentDateTime().toString("dd-MM-yyyy hh-mm-ss")+ ".jpg";
- filePath = dest.getFullPath().toLocalFile() + "/" + fileName;
-
- QImage::fromData(pData).save(filePath);
+ filePath = picturesData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + fileName;
- UBFeature downloadedFeature = UBFeature(dest.getFullVirtualPath() + "/" + fileName, getIcon( filePath, fileTypeFromUrl(filePath)),
- fileName, QUrl::fromLocalFile(filePath), FEATURE_ITEM);
- if (downloadedFeature != UBFeature()) {
- featuresModel->addItem(downloadedFeature);
+ QImage img;
+ img.loadFromData(pData);
+ importImage(img, fileName);
+ }
+ else {
+ QString url = sourceUrl.toString();
+ if(url.indexOf("?") != -1){
+ url = url.left(url.indexOf("?"));
+ fileName = pTitle.isEmpty() ? QFileInfo( url ).fileName() : pTitle;
+ filePath = QDir::tempPath() + "/" + QUuid::createUuid();
+ }
+ else{
+ fileName = pTitle.isEmpty() ? QFileInfo( url ).fileName() : pTitle;
+ filePath = destData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + fileName;
}
-
- } else {
- fileName = QFileInfo( sourceUrl.toString() ).fileName();
- filePath = dest.getFullPath().toLocalFile() + "/" + fileName;
QFile file( filePath );
if ( file.open(QIODevice::WriteOnly ))
@@ -884,6 +1182,20 @@ void UBFeaturesController::addDownloadedFile(const QUrl &sourceUrl, const QByteA
file.write(pData);
file.close();
+ if(sourceUrl.toString().indexOf("?") != -1){
+ // this is a zipped widget extract it
+ filePath = QDir::tempPath() + "/" + fileName;
+ UBFileSystemUtils::expandZipToDir(file, QDir(filePath));
+ // check if it something like xxxx.wgt/xxx.wgt situation due to a wrong way to zip widgets
+ QStringList list = QDir(QDir::tempPath() + "/" + fileName).entryList(QDir::AllDirs | QDir::NoDotAndDotDot);
+ QString tmpWidgetDirectory = filePath;
+ if(list.count() == 1 && list.at(0).contains(".wgt"))
+ tmpWidgetDirectory = filePath + "/" + list.at(0);
+ filePath = destData.pathData().value(CategoryData::UserDefined).toLocalFile() + "/" + fileName;
+ UBFileSystemUtils::copyDir(tmpWidgetDirectory, filePath);
+ }
+
+
UBFeature downloadedFeature = UBFeature(dest.getFullVirtualPath() + "/" + fileName, getIcon( filePath, fileTypeFromUrl(filePath)),
fileName, QUrl::fromLocalFile(filePath), FEATURE_ITEM);
if (downloadedFeature != UBFeature()) {
@@ -896,37 +1208,40 @@ void UBFeaturesController::addDownloadedFile(const QUrl &sourceUrl, const QByteA
UBFeature UBFeaturesController::moveItemToFolder( const QUrl &url, const UBFeature &destination )
{
- /*UBFeature newElement = copyItemToFolder( url, destination );
- deleteItem( url );
- return newElement;*/
QString sourcePath = url.toLocalFile();
- Q_ASSERT( QFileInfo( sourcePath ).exists() );
+ Q_ASSERT( QFileInfo( sourcePath ).exists() );
+
+ CategoryData destData = getDestinationCategoryForUrl(url);
- UBFeature possibleDest = getDestinationFeatureForUrl(url);
+ if (destData.isNull()) {
+ return UBFeature();
+ }
- UBFeature dest = destination;
+ UBFeature possibleDest = destData.categoryFeature();
- if ( destination != trashElement &&
- !destination.getFullVirtualPath().startsWith( possibleDest.getFullVirtualPath(), Qt::CaseInsensitive ) )
- {
- dest = possibleDest;
- }
+ UBFeature dest = destination;
- QString name = QFileInfo( sourcePath ).fileName();
+ if ( destination != trashData.categoryFeature() &&
+ !destination.getFullVirtualPath().startsWith( possibleDest.getFullVirtualPath(), Qt::CaseInsensitive ) )
+ {
+ dest = possibleDest;
+ }
+
+ QString name = QFileInfo( sourcePath ).fileName();
QString destPath = dest.getFullPath().toLocalFile();
- QString destVirtualPath = dest.getFullVirtualPath();
- QString newFullPath = destPath + "/" + name;
+ QString destVirtualPath = dest.getFullVirtualPath();
+ QString newFullPath = destPath + "/" + name;
if ( sourcePath.compare( newFullPath, Qt::CaseInsensitive ) )
{
- QFile( sourcePath ).copy( newFullPath );
+ QFile( sourcePath ).copy( newFullPath );
deleteItem( url );
}
QImage thumb = getIcon( newFullPath );
-
+
UBFeatureElementType type = FEATURE_ITEM;
- if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") )
+ if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") )
type = FEATURE_INTERACTIVE;
UBFeature newElement( destVirtualPath + "/" + name, thumb, name, QUrl::fromLocalFile( newFullPath ), type );
return newElement;
@@ -937,7 +1252,7 @@ void UBFeaturesController::rescanModel()
featuresModel->removeRows(0, featuresList->count());
//Could implement infolder scanning for better perfomance
- scanFS();
+ loadHardcodedItemsToModel();
refreshModels();
}
@@ -948,6 +1263,10 @@ void UBFeaturesController::siftElements(const QString &pSiftValue)
featuresPathModel->setPath(pSiftValue);
featuresPathModel->invalidate();
+
+ if (currentElement != rootData.categoryFeature()) {
+ featuresProxyModel->sort(0);
+ }
}
UBFeature UBFeaturesController::getFeature(const QModelIndex &index, const QString &listName)
@@ -1000,11 +1319,16 @@ UBFeature UBFeaturesController::copyItemToFolder( const QUrl &url, const UBFeatu
Q_ASSERT( QFileInfo( sourcePath ).exists() );
- UBFeature possibleDest = getDestinationFeatureForUrl( url );
+ CategoryData destData = getDestinationCategoryForUrl(url);
+ if (destData.isNull()) {
+ return UBFeature();
+ }
+
+ UBFeature possibleDest = destData.categoryFeature();
UBFeature dest = destination;
- if ( destination != trashElement &&
+ if ( destination != trashData.categoryFeature() &&
!destination.getFullVirtualPath().startsWith( possibleDest.getFullVirtualPath(), Qt::CaseInsensitive ) )
{
dest = possibleDest;
@@ -1026,17 +1350,22 @@ UBFeature UBFeaturesController::copyItemToFolder( const QUrl &url, const UBFeatu
return newElement;
}
-void UBFeaturesController::moveExternalData(const QUrl &url, const UBFeature &destination)
+QString UBFeaturesController::moveExternalData(const QUrl &url, const UBFeature &destination)
{
QString sourcePath = url.toLocalFile();
- Q_ASSERT( QFileInfo( sourcePath ).exists() );
+ Q_ASSERT( QFileInfo(sourcePath ).exists());
- UBFeature possibleDest = getDestinationFeatureForUrl(url);
+ CategoryData destData = getDestinationCategoryForUrl(url);
+ if (destData.isNull()) {
+ return QString();
+ }
+
+ UBFeature possibleDest = destData.categoryFeature();
UBFeature dest = destination;
- if ( destination != trashElement && destination != UBFeature()
+ if ( destination != trashData.categoryFeature() && destination != UBFeature()
/*&& !destination.getFullVirtualPath().startsWith( possibleDest.getFullVirtualPath(), Qt::CaseInsensitive )*/ )
{
dest = possibleDest;
@@ -1045,16 +1374,24 @@ void UBFeaturesController::moveExternalData(const QUrl &url, const UBFeature &de
UBFeatureElementType type = fileTypeFromUrl(sourcePath);
if (type == FEATURE_FOLDER) {
- return;
+ return QString();
}
QString name = QFileInfo(sourcePath).fileName();
QString destPath = dest.getFullPath().toLocalFile();
- QString destVirtualPath = dest.getFullVirtualPath();
+
+ if(dest == picturesData.categoryFeature())
+ destPath = picturesData.pathData().value(CategoryData::UserDefined).toLocalFile();
+ if(dest == audiosData.categoryFeature())
+ destPath = audiosData.pathData().value(CategoryData::UserDefined).toLocalFile();
+ if(dest == moviesData.categoryFeature())
+ destPath = moviesData.pathData().value(CategoryData::UserDefined).toLocalFile();
+
+ QString destVirtualPath = dest.getFullVirtualPath();
QString newFullPath = destPath + "/" + name;
if (!sourcePath.compare(newFullPath, Qt::CaseInsensitive) || !UBFileSystemUtils::copy(sourcePath, newFullPath)) {
- return;
+ return QString();
}
Q_ASSERT(QFileInfo(newFullPath).exists());
@@ -1063,6 +1400,8 @@ void UBFeaturesController::moveExternalData(const QUrl &url, const UBFeature &de
UBFeature newElement(destVirtualPath + "/" + name, thumb, name, QUrl::fromLocalFile(newFullPath), type);
featuresModel->addItem(newElement);
+
+ return newFullPath;
}
void UBFeaturesController::deleteItem(const QUrl &url)
@@ -1070,7 +1409,7 @@ void UBFeaturesController::deleteItem(const QUrl &url)
QString path = url.toLocalFile();
Q_ASSERT( QFileInfo( path ).exists() );
- QString thumbnailPath = UBFileSystemUtils::thumbnailPath( path );
+ QString thumbnailPath = UBFileSystemUtils::thumbnailPath( path );
if ( thumbnailPath.length() && QFileInfo( thumbnailPath ).exists()) {
if (QFileInfo(thumbnailPath).isFile()) {
QFile::remove(thumbnailPath);
@@ -1097,12 +1436,12 @@ void UBFeaturesController::deleteItem(const UBFeature &pFeature)
bool UBFeaturesController::isTrash( const QUrl &url )
{
- return url.toLocalFile().startsWith( trashDirectoryPath.toLocalFile() );
+ return url.toLocalFile().startsWith(trashData.categoryFeature().getFullPath().toLocalFile());
}
void UBFeaturesController::moveToTrash(UBFeature feature, bool deleteManualy)
{
- featuresModel->moveData(feature, trashElement, Qt::MoveAction, deleteManualy);
- removeFromFavorite(feature.getFullPath());
+ featuresModel->moveData(feature, trashData.categoryFeature(), Qt::MoveAction, deleteManualy);
+ removeFromFavorite(feature.getFullPath(), true);
featuresModel->deleteFavoriteItem(UBFeaturesController::fileNameFromUrl(feature.getFullPath()));
}
diff --git a/Sankore-3.1/src/board/UBFeaturesController.h b/Sankore-3.1/src/board/UBFeaturesController.h
index b4fe887..4dcf89d 100644
--- a/Sankore-3.1/src/board/UBFeaturesController.h
+++ b/Sankore-3.1/src/board/UBFeaturesController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBFEATURESCONTROLLER_H
#define UBFEATURESCONTROLLER_H
@@ -49,46 +50,6 @@ class UBFeaturesListView;
class UBFeature;
-class UBFeaturesComputingThread : public QThread
-{
- Q_OBJECT
-public:
- explicit UBFeaturesComputingThread(QObject *parent = 0);
- virtual ~UBFeaturesComputingThread();
- void compute(const QList<QPair<QUrl, UBFeature> > &pScanningData, QSet<QUrl> *pFavoritesSet);
-
-protected:
- void run();
-
-signals:
- void sendFeature(UBFeature pFeature);
- void featureSent();
- void scanStarted();
- void scanFinished();
- void maxFilesCountEvaluated(int max);
- void scanCategory(const QString &str);
- void scanPath(const QString &str);
-
-public slots:
-
-private:
- void scanFS(const QUrl & currentPath, const QString & currVirtualPath, const QSet<QUrl> &pFavoriteSet);
- void scanAll(QList<QPair<QUrl, UBFeature> > pScanningData, const QSet<QUrl> &pFavoriteSet);
- int featuresCount(const QUrl &pPath);
- int featuresCountAll(QList<QPair<QUrl, UBFeature> > pScanningData);
-
-private:
- QMutex mMutex;
- QWaitCondition mWaitCondition;
- QUrl mScanningPath;
- QString mScanningVirtualPath;
- QList<QPair<QUrl, UBFeature> > mScanningData;
- QSet<QUrl> mFavoriteSet;
- bool restart;
- bool abort;
-};
-
-
enum UBFeatureElementType
{
FEATURE_CATEGORY,
@@ -104,37 +65,60 @@ enum UBFeatureElementType
FEATURE_TRASH,
FEATURE_FAVORITE,
FEATURE_SEARCH,
+ FEATURE_BOOKMARK,
+ FEATURE_LINK,
FEATURE_INVALID
};
class UBFeature
{
public:
+ enum Permission {
+ NO_P = 0x0 //0000
+ ,DELETE_P = 0x1 //0001
+ , WRITE_P = 0x2 //0010
+ , ALL_P = 0xF //1111
+ };
+ Q_DECLARE_FLAGS(Permissions, Permission)
+
UBFeature() {;}
// UBFeature(const UBFeature &f);
- UBFeature(const QString &url, const QImage &icon, const QString &name, const QUrl &realPath, UBFeatureElementType type = FEATURE_CATEGORY);
+ UBFeature(const QString &url
+ , const QImage &icon
+ , const QString &name
+ , const QUrl &realPath
+ , UBFeatureElementType type = FEATURE_CATEGORY
+ , Permissions pOwnPermissions = ALL_P
+ , QString pSortKey = QString());
// UBFeature();
virtual ~UBFeature();
QString getName() const { return mName; }
QString getDisplayName() const {return mDisplayName;}
QImage getThumbnail() const {return mThumbnail;}
QString getVirtualPath() const { return virtualDir; }
- //QString getPath() const { return mPath; };
+ //QString getPath() const { return mPath; };
QUrl getFullPath() const { return mPath; }
QString getFullVirtualPath() const { return virtualDir + "/" + mName; }
- QString getUrl() const;
+ QString getUrl() const;
+ QString getSortKey() const {return mSortKey;}
void setFullPath(const QUrl &newPath) {mPath = newPath;}
void setFullVirtualPath(const QString &newVirtualPath) {virtualDir = newVirtualPath;}
UBFeatureElementType getType() const { return elementType; }
+ UBFeature &markedWithSortKey(const QString &str);
- bool isFolder() const;
+ bool isFolder() const;
bool allowedCopy() const;
- bool isDeletable() const;
+ bool isDeletable() const;
bool inTrash() const;
- bool operator ==( const UBFeature &f )const;
- bool operator !=( const UBFeature &f )const;
- const QMap<QString,QString> & getMetadata() const { return metadata; }
- void setMetadata( const QMap<QString,QString> &data ) { metadata = data; }
+ Permissions getPermissions() const {return mOwnPermissions;}
+ bool testPermissions(Permissions pPermissions) const {return mOwnPermissions & pPermissions;}
+ void setPermissions(Permissions pPermissions) {mOwnPermissions = pPermissions;}
+ void addPermissions(Permissions pPermissions) {mOwnPermissions |= pPermissions;}
+ void unsetPermissions(Permissions pPermissions) {mOwnPermissions &= ~pPermissions;}
+ bool operator ==( const UBFeature &f )const;
+ bool operator !=( const UBFeature &f )const;
+ const QMap<QString,QString> & getMetadata() const { return metadata; }
+ void setMetadata( const QMap<QString,QString> &data ) { metadata = data; }
private:
@@ -147,11 +131,132 @@ private:
QImage mThumbnail;
QString mName;
QString mDisplayName;
- QUrl mPath;
+ QUrl mPath;
UBFeatureElementType elementType;
QMap<QString,QString> metadata;
+ Permissions mOwnPermissions;
+ QString mSortKey;
};
Q_DECLARE_METATYPE( UBFeature )
+Q_DECLARE_OPERATORS_FOR_FLAGS(UBFeature::Permissions)
+
+//Describe files in virtual file system
+struct ComputingData
+{
+ ComputingData (const QUrl &pPath, UBFeature pFeature,UBFeature::Permissions pPermissions)
+ : path(pPath)
+ , feature(pFeature)
+ , permissions(pPermissions)
+ {;}
+ ComputingData() {;}
+
+ QUrl path;
+ //Permissions for all subdirectories
+ UBFeature feature;
+ UBFeature::Permissions permissions;
+};
+
+
+
+// Data class containing all the data about hardcoded items from library palette
+struct CategoryData
+{
+ enum pathType {
+ Library = 0
+ , UserDefined = 1
+ };
+ CategoryData() : mIsNull(true) {;}
+
+ struct PathData : public QMultiMap<pathType, QUrl>
+ {
+ PathData& insertr (pathType pType, QUrl pUrl) {
+ insertMulti(pType, pUrl);
+ return *this;
+ }
+ };
+
+ struct PermissionsData : public QMap<pathType, UBFeature::Permissions>
+ {
+ PermissionsData& insertr (pathType pType, UBFeature::Permissions pPermissions) {
+ insert(pType, pPermissions);
+ return *this;
+ }
+ };
+
+ CategoryData (const PathData &pPathData
+ , UBFeature pFeature
+ , PermissionsData psubFolderPermissions)
+ : mPathData(pPathData)
+ , mCategoryFeature(pFeature)
+ , mSubFolderPermissions(psubFolderPermissions)
+ , mIsNull(false)
+ {;}
+
+ PathData pathData() const {return mPathData;}
+ UBFeature categoryFeature() const {return mCategoryFeature;}
+// UBFeature::Permissions subFolderPermissions() const {return mSubFolderPermissions;}
+ UBFeature::Permissions librarySubPermissions() const {return mSubFolderPermissions.value(Library, UBFeature::ALL_P);}
+ UBFeature::Permissions UserSubPermissions() const {return mSubFolderPermissions.value(UserDefined, UBFeature::ALL_P);}
+ UBFeature::Permissions subFolderPermissionsForType(pathType pType) const {return mSubFolderPermissions.value(pType, UBFeature::ALL_P);}
+ bool isNull() const {return mIsNull;}
+
+private:
+ PathData mPathData;
+ //Permissions for all subdirectories
+ UBFeature mCategoryFeature;
+// UBFeature::Permissions mSubFolderPermissions;
+ PermissionsData mSubFolderPermissions;
+ bool mIsNull;
+};
+
+class UBFeaturesComputingThread : public QThread
+{
+ Q_OBJECT
+public:
+ explicit UBFeaturesComputingThread(QObject *parent = 0);
+ virtual ~UBFeaturesComputingThread();
+ void compute(const QList<CategoryData> &pcategoryList, const QPair<CategoryData, QSet<QUrl> > &pFavoriteInfo, const QList<CategoryData> &extData);
+
+protected:
+ void run();
+
+signals:
+ void sendFeature(UBFeature pFeature);
+ void featureSent();
+ void scanStarted();
+ void scanFinished();
+ void maxFilesCountEvaluated(int max);
+ void scanCategory(const QString &str);
+ void scanPath(const QString &str);
+
+public slots:
+
+private:
+ void scanFS(const QUrl & currentPath
+ , const QString & currVirtualPath
+ , const QPair<CategoryData, QSet<QUrl> > &pfavoriteInfo
+ , UBFeature::Permissions pPermissions
+ , const QList<CategoryData> &extData);
+ void scanAll(QList<CategoryData> pScanningData
+ , const QPair<CategoryData
+ , QSet<QUrl> > &pFavoriteInfo
+ , const QList<CategoryData> &extData);
+ int featuresCount(const QUrl &pPath);
+ int featuresCountAll(QList<CategoryData> pScanningData);
+
+private:
+ QMutex mMutex;
+ QWaitCondition mWaitCondition;
+ QUrl mScanningPath;
+ QString mScanningVirtualPath;
+ QList<CategoryData> mScanningData;
+ QList<CategoryData> mExceptionData;
+ QPair<CategoryData, QSet<QUrl> > mFavoriteInfo;
+ bool restart;
+ bool abort;
+};
+
+
class UBFeaturesController : public QObject
{
@@ -160,25 +265,27 @@ friend class UBFeaturesWidget;
Q_OBJECT
public:
- UBFeaturesController(QWidget *parentWidget);
+ UBFeaturesController(QWidget *parentWidget);
virtual ~UBFeaturesController();
QList <UBFeature>* getFeatures() const {return featuresList;}
-
- const QString& getRootPath()const {return rootPath;}
- void scanFS();
+
+ void initHardcodedData();
+ void loadHardcodedItemsToModel();
void addItemToPage(const UBFeature &item);
void addItemAsBackground(const UBFeature &item);
const UBFeature& getCurrentElement()const {return currentElement;}
void setCurrentElement( const UBFeature &elem ) {currentElement = elem;}
- const UBFeature & getTrashElement () const { return trashElement; }
+ UBFeature getTrashElement () const { return trashData.categoryFeature(); }
+ UBFeature getBookmarkElement() const {return bookmarkData.categoryFeature();}
+ UBFeature getRootElement() const {return rootData.categoryFeature();}
void addDownloadedFile( const QUrl &sourceUrl, const QByteArray &pData, const QString pContentSource, const QString pTitle );
- UBFeature moveItemToFolder( const QUrl &url, const UBFeature &destination );
- UBFeature copyItemToFolder( const QUrl &url, const UBFeature &destination );
- void moveExternalData(const QUrl &url, const UBFeature &destination);
+ UBFeature moveItemToFolder( const QUrl &url, const UBFeature &destination );
+ UBFeature copyItemToFolder( const QUrl &url, const UBFeature &destination );
+ QString moveExternalData(const QUrl &url, const UBFeature &destination);
void rescanModel();
void siftElements(const QString &pSiftValue);
@@ -187,23 +294,23 @@ public:
void searchStarted(const QString &pattern, QListView *pOnView);
void refreshModels();
- void deleteItem( const QUrl &url );
+ void deleteItem( const QUrl &url );
void deleteItem(const UBFeature &pFeature);
- bool isTrash( const QUrl &url );
+ bool isTrash( const QUrl &url );
void moveToTrash(UBFeature feature, bool deleteManualy = false);
void addToFavorite( const QUrl &path );
void removeFromFavorite(const QUrl &path, bool deleteManualy = false);
void importImage(const QImage &image, const QString &fileName = QString());
void importImage( const QImage &image, const UBFeature &destination, const QString &fileName = QString() );
+ void createBookmark(const QString& fileName, const QString &urlString);
+ void createLink(const QString& fileName, const QString& urlString, QSize &size, QString mimeType, QString bEmbedCode);
+ bool newFolderAllowed() const {return currentElement.isFolder() && currentElement.testPermissions(UBFeature::WRITE_P);}
QStringList getFileNamesInFolders();
- void fileSystemScan(const QUrl &currPath, const QString & currVirtualPath);
- int featuresCount(const QUrl &currPath);
static UBFeatureElementType fileTypeFromUrl( const QString &path );
- static QString fileNameFromUrl( const QUrl &url );
+ static QString fileNameFromUrl( const QUrl &url );
static QImage getIcon( const QString &path, UBFeatureElementType pFType );
- static bool isDeletable( const QUrl &url );
static char featureTypeSplitter() {return ':';}
static QString categoryNameForVirtualPath(const QString &str);
@@ -213,17 +320,23 @@ public:
void assignPathListView(UBFeaturesListView *pList);
public:
- static const QString rootPath;
- static const QString audiosPath;
- static const QString moviesPath;
- static const QString picturesPath;
- static const QString appPath;
- static const QString flashPath;
- static const QString shapesPath;
- static const QString interactPath;
- static const QString trashPath;
- static const QString favoritePath;
- static const QString webSearchPath;
+ //Hardcoded toplevel data
+ CategoryData rootData;
+ CategoryData audiosData;
+ CategoryData moviesData;
+ CategoryData picturesData;
+ CategoryData appData;
+ CategoryData flashData;
+ CategoryData shapesData;
+ CategoryData interactivityData;
+ CategoryData favoriteData;
+ CategoryData webSearchData;
+ CategoryData trashData;
+ CategoryData webFolderData;
+ CategoryData bookmarkData;
+
+ QList<CategoryData> topLevelCategoryData;
+ QList<CategoryData> extentionPermissionsCategoryData;
signals:
void maxFilesCountEvaluated(int pLimit);
@@ -235,7 +348,7 @@ signals:
private slots:
void addNewFolder(QString name);
- void startThread();
+ void scanFS();
void createNpApiFeature(const QString &str);
private:
@@ -254,54 +367,23 @@ private:
private:
static QImage createThumbnail(const QString &path);
- //void addImageToCurrentPage( const QString &path );
- void loadFavoriteList();
- void saveFavoriteList();
+ //void addImageToCurrentPage( const QString &path );
+ void loadFavoriteList();
+ void saveFavoriteList();
QString uniqNameForFeature(const UBFeature &feature, const QString &pName = "Imported", const QString &pExtention = "") const;
QString adjustName(const QString &str);
QList <UBFeature> *featuresList;
- QUrl mUserAudioDirectoryPath;
- QUrl mUserVideoDirectoryPath;
- QUrl mUserPicturesDirectoryPath;
- QUrl mUserInteractiveDirectoryPath;
- QUrl mUserAnimationDirectoryPath;
-
- QString libraryPath;
- QUrl mLibPicturesDirectoryPath;
- QUrl mLibAudiosDirectoryPath;
- QUrl mLibVideosDirectoryPath;
- QUrl mLibInteractiveDirectoryPath;
- QUrl mLibAnimationsDirectoryPath;
- QUrl mLibApplicationsDirectoryPath;
- QUrl mLibShapesDirectoryPath;
-
- QUrl trashDirectoryPath;
- QUrl mLibSearchDirectoryPath;
-
-
-
- int mLastItemOffsetIndex;
- UBFeature currentElement;
-
- UBFeature rootElement;
- UBFeature favoriteElement;
- UBFeature audiosElement;
- UBFeature moviesElement;
- UBFeature picturesElement;
- UBFeature interactElement;
- UBFeature applicationsElement;
- UBFeature flashElement;
- UBFeature shapesElement;
- UBFeature webSearchElement;
+ int mLastItemOffsetIndex;
+ UBFeature currentElement;
- QSet <QUrl> *favoriteSet;
+ QSet <QUrl> *favoriteSet;
public:
- UBFeature trashElement;
- UBFeature getDestinationFeatureForUrl( const QUrl &url );
- UBFeature getDestinationFeatureForMimeType(const QString &pMmimeType);
+ CategoryData getDestinationCategoryForUrl( const QUrl &url );
+ CategoryData getDestinationCategoryForMimeType(const QString &pMmimeType, const QUrl &sourceUrl = QUrl());
+ QString getFeaturePathByName(const QString &featureName) const;
};
diff --git a/Sankore-3.1/src/core/UB.h b/Sankore-3.1/src/core/UB.h
index 66ac810..97b4ed2 100644
--- a/Sankore-3.1/src/core/UB.h
+++ b/Sankore-3.1/src/core/UB.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UB_H_
#define UB_H_
@@ -41,6 +42,9 @@ struct UBMimeType
PDF,
UniboardTool,
Group,
+ Bookmark,
+ Link,
+ Web,
UNKNOWN
};
};
@@ -49,18 +53,18 @@ struct UBStylusTool
{
enum Enum
{
- Pen = 0,
- Eraser,
- Marker,
- Selector,
+ Pen = 0,
+ Eraser,
+ Marker,
+ Selector,
Play,
- Hand,
- ZoomIn,
- ZoomOut,
- Pointer,
- Line,
- Text,
- Capture
+ Hand,
+ ZoomIn,
+ ZoomOut,
+ Pointer,
+ Line,
+ Text,
+ Capture
};
};
@@ -137,19 +141,19 @@ struct UBGraphicsItemType
{
enum Enum
{
- PolygonItemType = QGraphicsItem::UserType + 1,
- PixmapItemType,
- SvgItemType,
+ PolygonItemType = QGraphicsItem::UserType + 1,
+ PixmapItemType,
+ SvgItemType,
DelegateButtonType,
- MediaItemType,
- PDFItemType,
- TextItemType,
- CurtainItemType,
- RulerItemType,
- CompassItemType,
- ProtractorItemType,
- StrokeItemType,
- TriangleItemType,
+ MediaItemType,
+ PDFItemType,
+ TextItemType,
+ CurtainItemType,
+ RulerItemType,
+ CompassItemType,
+ ProtractorItemType,
+ StrokeItemType,
+ TriangleItemType,
MagnifierItemType,
cacheItemType,
AristoItemType,
diff --git a/Sankore-3.1/src/core/UBApplication.cpp b/Sankore-3.1/src/core/UBApplication.cpp
index 1d2f966..97c2a32 100644
--- a/Sankore-3.1/src/core/UBApplication.cpp
+++ b/Sankore-3.1/src/core/UBApplication.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBApplication.h"
#include <QtGui>
@@ -227,14 +228,11 @@ void UBApplication::setupTranslators(QStringList args)
QString forcedLanguage("");
if(args.contains("-lang"))
forcedLanguage=args.at(args.indexOf("-lang") + 1);
-// TODO claudio: this has been commented because some of the translation seem to be loaded at this time
-// especially tools name. This is a workaround and we have to be able to load settings without
-// impacting the translations
-// else{
-// QString setLanguage = UBSettings::settings()->appPreferredLanguage->get().toString();
-// if(!setLanguage.isEmpty())
-// forcedLanguage = setLanguage;
-// }
+ else{
+ QString setLanguage = UBSettings::settings()->appPreferredLanguage->get().toString();
+ if(!setLanguage.isEmpty())
+ forcedLanguage = setLanguage;
+ }
QString language("");
@@ -275,6 +273,8 @@ void UBApplication::setupTranslators(QStringList args)
QLocale::setDefault(QLocale(language));
qDebug() << "Running application in:" << language;
+ //Claudio: hack to avoid the lost of translations.
+ UBSettings::settings()->init();
}
int UBApplication::exec(const QString& pFileToImport)
@@ -308,9 +308,7 @@ int UBApplication::exec(const QString& pFileToImport)
connect(mainWindow->actionBoard, SIGNAL(triggered()), this, SLOT(showBoard()));
connect(mainWindow->actionWeb, SIGNAL(triggered()), this, SLOT(showInternet()));
- connect(mainWindow->actionWeb, SIGNAL(triggered()), this, SLOT(stopScript()));
connect(mainWindow->actionDocument, SIGNAL(triggered()), this, SLOT(showDocument()));
- connect(mainWindow->actionDocument, SIGNAL(triggered()), this, SLOT(stopScript()));
connect(mainWindow->actionQuit, SIGNAL(triggered()), this, SLOT(closing()));
connect(mainWindow, SIGNAL(closeEvent_Signal(QCloseEvent*)), this, SLOT(closeEvent(QCloseEvent*)));
@@ -351,7 +349,6 @@ int UBApplication::exec(const QString& pFileToImport)
connect(mainWindow->actionPreferences, SIGNAL(triggered()), mPreferencesController, SLOT(show()));
connect(mainWindow->actionTutorial, SIGNAL(triggered()), applicationController, SLOT(showTutorial()));
- connect(mainWindow->actionTutorial, SIGNAL(triggered()), this, SLOT(stopScript()));
connect(mainWindow->actionSankoreEditor, SIGNAL(triggered()), applicationController, SLOT(showSankoreEditor()));
connect(mainWindow->actionCheckUpdate, SIGNAL(triggered()), applicationController, SLOT(checkUpdateRequest()));
@@ -426,17 +423,21 @@ void UBApplication::stopScript()
void UBApplication::showBoard()
{
applicationController->showBoard();
+ boardController->paletteManager()->featuresWidget()->switchToRoot();
}
void UBApplication::showInternet()
{
applicationController->showInternet();
webController->showTabAtTop(true);
+ boardController->paletteManager()->featuresWidget()->switchToBookmarks();
+ stopScript();
}
void UBApplication::showDocument()
{
applicationController->showDocument();
+ startScript();
}
int UBApplication::toolBarHeight()
diff --git a/Sankore-3.1/src/core/UBApplication.h b/Sankore-3.1/src/core/UBApplication.h
index dc72c3a..0c9a355 100644
--- a/Sankore-3.1/src/core/UBApplication.h
+++ b/Sankore-3.1/src/core/UBApplication.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,155 +18,156 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBAPPLICATION_H_
-#define UBAPPLICATION_H_
-
-#include <QtGui>
-
-#include "qtsingleapplication.h"
-
-#include "transition/UniboardSankoreTransition.h"
-
-namespace Ui
-{
- class MainWindow;
-}
-
-
-class UBBoardController;
-class UBWebController;
-class UBControlView;
-class UBPreferencesController;
-class UBResources;
-class UBSettings;
-class UBPersistenceManager;
-class UBApplicationController;
-class UBDocumentController;
-class UBMainWindow;
-
-class UBApplication : public QtSingleApplication
-{
- Q_OBJECT;
-
- public:
-
- UBApplication(const QString &id, int &argc, char **argv);
- virtual ~UBApplication();
-
- int exec(const QString& pFileToImport);
-
- void cleanup();
-
- static QPointer<QUndoStack> undoStack;
-
- static UBApplicationController *applicationController;
- static UBBoardController* boardController;
- static UBWebController* webController;
- static UBDocumentController* documentController;
- static UniboardSankoreTransition* mUniboardSankoreTransition;
-
- static UBMainWindow* mainWindow;
-
- static UBApplication* app()
- {
- return static_cast<UBApplication*>qApp;
- }
-
- static const QString mimeTypeUniboardDocument;
- static const QString mimeTypeUniboardPage;
- static const QString mimeTypeUniboardPageItem;
- static const QString mimeTypeUniboardPageThumbnail;
-
- static void showMessage(const QString& message, bool showSpinningWheel = false);
- static void setDisabled(bool disable);
-
- static QObject* staticMemoryCleaner;
-
- void decorateActionMenu(QAction* action);
- void insertSpaceToToolbarBeforeAction(QToolBar* toolbar, QAction* action, int width = -1);
-
- int toolBarHeight();
- bool eventFilter(QObject *obj, QEvent *event);
-
- bool isVerbose() { return mIsVerbose;}
- void setVerbose(bool verbose){mIsVerbose = verbose;}
- static QString urlFromHtml(QString html);
- static bool isFromWeb(QString url);
-
- signals:
-
- public slots:
-
- void showBoard();
- void showInternet();
- void showDocument();
- void startScript();
- void stopScript();
-
- void toolBarPositionChanged(QVariant topOrBottom);
- void toolBarDisplayTextChanged(QVariant display);
-
- void closeEvent(QCloseEvent *event);
-
- /**
- * Used on Windows platform to open file in running application. On MacOS X opening file is done through the
- * FileOpen event that is handle in eventFilter method.
- */
- bool handleOpenMessage(const QString& pMessage);
-
- private slots:
-
- void closing();
-#ifdef Q_WS_MAC
- void showMinimized();
-#endif
- void importUniboardFiles();
-
- void onScreenCountChanged(int newCount);
-
- private:
- void updateProtoActionsState();
- void setupTranslators(QStringList args);
- QList<QMenu*> mProtoMenus;
- bool mIsVerbose;
- QString checkLanguageAvailabilityForSankore(QString& language);
- protected:
-
-#if defined(Q_WS_MACX) && !defined(QT_MAC_USE_COCOA)
- bool macEventFilter(EventHandlerCallRef caller, EventRef event);
-#endif
-
- UBPreferencesController* mPreferencesController;
- QTranslator* mApplicationTranslator;
- QTranslator* mQtGuiTranslator;
-
-};
-
-
-class UBStyle : public QPlastiqueStyle
-{
- public:
-
- UBStyle()
- : QPlastiqueStyle()
- {
- // NOOP
- }
-
- virtual ~UBStyle()
- {
- // NOOP
- }
-
- /*
- * redefined to be more cocoa like on texts
- */
- virtual void drawItemText(QPainter *painter, const QRect &rect, int alignment, const QPalette &pal,
- bool enabled, const QString& text, QPalette::ColorRole textRole) const;
-
-
-};
-
-#endif /* UBAPPLICATION_H_ */
+
+
+
+#ifndef UBAPPLICATION_H_
+#define UBAPPLICATION_H_
+
+#include <QtGui>
+
+#include "qtsingleapplication.h"
+
+#include "transition/UniboardSankoreTransition.h"
+
+namespace Ui
+{
+ class MainWindow;
+}
+
+
+class UBBoardController;
+class UBWebController;
+class UBControlView;
+class UBPreferencesController;
+class UBResources;
+class UBSettings;
+class UBPersistenceManager;
+class UBApplicationController;
+class UBDocumentController;
+class UBMainWindow;
+
+class UBApplication : public QtSingleApplication
+{
+ Q_OBJECT;
+
+ public:
+
+ UBApplication(const QString &id, int &argc, char **argv);
+ virtual ~UBApplication();
+
+ int exec(const QString& pFileToImport);
+
+ void cleanup();
+
+ static QPointer<QUndoStack> undoStack;
+
+ static UBApplicationController *applicationController;
+ static UBBoardController* boardController;
+ static UBWebController* webController;
+ static UBDocumentController* documentController;
+ static UniboardSankoreTransition* mUniboardSankoreTransition;
+
+ static UBMainWindow* mainWindow;
+
+ static UBApplication* app()
+ {
+ return static_cast<UBApplication*>qApp;
+ }
+
+ static const QString mimeTypeUniboardDocument;
+ static const QString mimeTypeUniboardPage;
+ static const QString mimeTypeUniboardPageItem;
+ static const QString mimeTypeUniboardPageThumbnail;
+
+ static void showMessage(const QString& message, bool showSpinningWheel = false);
+ static void setDisabled(bool disable);
+
+ static QObject* staticMemoryCleaner;
+
+ void decorateActionMenu(QAction* action);
+ void insertSpaceToToolbarBeforeAction(QToolBar* toolbar, QAction* action, int width = -1);
+
+ int toolBarHeight();
+ bool eventFilter(QObject *obj, QEvent *event);
+
+ bool isVerbose() { return mIsVerbose;}
+ void setVerbose(bool verbose){mIsVerbose = verbose;}
+ static QString urlFromHtml(QString html);
+ static bool isFromWeb(QString url);
+
+ signals:
+
+ public slots:
+
+ void showBoard();
+ void showInternet();
+ void showDocument();
+ void startScript();
+ void stopScript();
+
+ void toolBarPositionChanged(QVariant topOrBottom);
+ void toolBarDisplayTextChanged(QVariant display);
+
+ void closeEvent(QCloseEvent *event);
+
+ /**
+ * Used on Windows platform to open file in running application. On MacOS X opening file is done through the
+ * FileOpen event that is handle in eventFilter method.
+ */
+ bool handleOpenMessage(const QString& pMessage);
+
+ private slots:
+
+ void closing();
+#ifdef Q_WS_MAC
+ void showMinimized();
+#endif
+ void importUniboardFiles();
+
+ void onScreenCountChanged(int newCount);
+
+ private:
+ void updateProtoActionsState();
+ void setupTranslators(QStringList args);
+ QList<QMenu*> mProtoMenus;
+ bool mIsVerbose;
+ QString checkLanguageAvailabilityForSankore(QString& language);
+ protected:
+
+#if defined(Q_WS_MACX) && !defined(QT_MAC_USE_COCOA)
+ bool macEventFilter(EventHandlerCallRef caller, EventRef event);
+#endif
+
+ UBPreferencesController* mPreferencesController;
+ QTranslator* mApplicationTranslator;
+ QTranslator* mQtGuiTranslator;
+
+};
+
+
+class UBStyle : public QPlastiqueStyle
+{
+ public:
+
+ UBStyle()
+ : QPlastiqueStyle()
+ {
+ // NOOP
+ }
+
+ virtual ~UBStyle()
+ {
+ // NOOP
+ }
+
+ /*
+ * redefined to be more cocoa like on texts
+ */
+ virtual void drawItemText(QPainter *painter, const QRect &rect, int alignment, const QPalette &pal,
+ bool enabled, const QString& text, QPalette::ColorRole textRole) const;
+
+
+};
+
+#endif /* UBAPPLICATION_H_ */
diff --git a/Sankore-3.1/src/core/UBApplicationController.cpp b/Sankore-3.1/src/core/UBApplicationController.cpp
index 7fe8c11..2b95b05 100644
--- a/Sankore-3.1/src/core/UBApplicationController.cpp
+++ b/Sankore-3.1/src/core/UBApplicationController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,820 +18,838 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBApplicationController.h"
-
-#include "frameworks/UBPlatformUtils.h"
-#include "frameworks/UBVersion.h"
-
-#include "core/UBApplication.h"
-#include "core/UBPersistenceManager.h"
-#include "core/UBSettings.h"
-#include "core/UBSetting.h"
-#include "core/UBDocumentManager.h"
-#include "core/UBDisplayManager.h"
-
-#include "board/UBBoardView.h"
-#include "board/UBBoardController.h"
-#include "board/UBBoardPaletteManager.h"
-#include "board/UBDrawingController.h"
-
-
-#include "document/UBDocumentProxy.h"
-#include "document/UBDocumentController.h"
-
-#include "domain/UBGraphicsWidgetItem.h"
-
-#include "desktop/UBDesktopPalette.h"
-#include "desktop/UBDesktopAnnotationController.h"
-
-#include "web/UBWebController.h"
-
-#include "gui/UBScreenMirror.h"
-#include "gui/UBMainWindow.h"
-#include "gui/UBDockTeacherGuideWidget.h"
-#include "gui/UBTeacherGuideWidget.h"
-
-#include "domain/UBGraphicsPixmapItem.h"
-
-#include "podcast/UBPodcastController.h"
-
-#include "network/UBNetworkAccessManager.h"
-
-#include "ui_mainWindow.h"
-
-#ifdef Q_WS_MAC
-#include <Carbon/Carbon.h>
-#endif
-
-#include "core/memcheck.h"
-
-UBApplicationController::UBApplicationController(UBBoardView *pControlView,
- UBBoardView *pDisplayView,
- UBMainWindow* pMainWindow,
- QObject* parent,
- UBRightPalette* rightPalette)
- : QObject(parent)
- , mMainWindow(pMainWindow)
- , mControlView(pControlView)
- , mDisplayView(pDisplayView)
- , mMirror(0)
- , mMainMode(Board)
- , mDisplayManager(0)
- , mAutomaticCheckForUpdates(false)
- , mCheckingForUpdates(false)
- , mIsShowingDesktop(false)
- , mHttp(0)
-{
- mDisplayManager = new UBDisplayManager(this);
-
- mUninoteController = new UBDesktopAnnotationController(this, rightPalette);
-
- connect(mDisplayManager, SIGNAL(screenLayoutChanged()), this, SLOT(screenLayoutChanged()));
- connect(mDisplayManager, SIGNAL(screenLayoutChanged()), mUninoteController, SLOT(screenLayoutChanged()));
- connect(mDisplayManager, SIGNAL(screenLayoutChanged()), UBApplication::webController, SLOT(screenLayoutChanged()));
-
- connect(mUninoteController, SIGNAL(imageCaptured(const QPixmap &, bool)), this, SLOT(addCapturedPixmap(const QPixmap &, bool)));
- connect(mUninoteController, SIGNAL(restoreUniboard()), this, SLOT(hideDesktop()));
-
- for(int i = 0; i < mDisplayManager->numPreviousViews(); i++)
- {
- UBBoardView *previousView = new UBBoardView(UBApplication::boardController, UBItemLayerType::FixedBackground, UBItemLayerType::Tool, 0);
- previousView->setInteractive(false);
- mPreviousViews.append(previousView);
- }
-
- mBlackScene = new UBGraphicsScene(0); // deleted by UBApplicationController::destructor
- mBlackScene->setBackground(true, false);
-
- if (mDisplayManager->numScreens() >= 2)
- {
- mMirror = new UBScreenMirror();
- }
-
- connect(UBApplication::webController, SIGNAL(imageCaptured(const QPixmap &, bool, const QUrl&))
- , this, SLOT(addCapturedPixmap(const QPixmap &, bool, const QUrl&)));
-
- networkAccessManager = new QNetworkAccessManager (this);
- QTimer::singleShot (1000, this, SLOT (checkUpdateAtLaunch()));
-
-#ifdef Q_WS_X11
- mMainWindow->setStyleSheet("QToolButton { font-size: 11px}");
-#endif
-
-}
-
-
-UBApplicationController::~UBApplicationController()
-{
- foreach(UBBoardView* view, mPreviousViews)
- {
- delete view;
- }
-
- delete mBlackScene;
- delete mMirror;
- if (mHttp) delete mHttp;
-}
-
-
-void UBApplicationController::initViewState(int horizontalPosition, int verticalPostition)
-{
- mInitialHScroll = horizontalPosition;
- mInitialVScroll = verticalPostition;
-}
-
-
-void UBApplicationController::initScreenLayout(bool useMultiscreen)
-{
- mDisplayManager->setControlWidget(mMainWindow);
- mDisplayManager->setDisplayWidget(mDisplayView);
-
- mDisplayManager->setPreviousDisplaysWidgets(mPreviousViews);
- mDisplayManager->setDesktopWidget(mUninoteController->drawingView());
-
- mDisplayManager->setUseMultiScreen(useMultiscreen);
- mDisplayManager->adjustScreens(-1);
-}
-
-
-void UBApplicationController::screenLayoutChanged()
-{
- initViewState(mControlView->horizontalScrollBar()->value(),
- mControlView->verticalScrollBar()->value());
-
- adaptToolBar();
-
- adjustDisplayView();
-
- if (mDisplayManager->hasDisplay())
- {
- UBApplication::boardController->setBoxing(mDisplayView->geometry());
- }
- else
- {
- UBApplication::boardController->setBoxing(QRect());
- }
-
- adjustPreviousViews(0, 0);
-}
-
-
-void UBApplicationController::adaptToolBar()
-{
- bool highResolution = mMainWindow->width() > 1024;
-
- mMainWindow->actionClearPage->setVisible(Board == mMainMode && highResolution);
- mMainWindow->actionBoard->setVisible(Board != mMainMode || highResolution);
- mMainWindow->actionDocument->setVisible(Document != mMainMode || highResolution);
- mMainWindow->actionWeb->setVisible(Internet != mMainMode || highResolution);
- mMainWindow->boardToolBar->setIconSize(QSize(highResolution ? 48 : 42, mMainWindow->boardToolBar->iconSize().height()));
-
- mMainWindow->actionBoard->setEnabled(mMainMode != Board);
- mMainWindow->actionWeb->setEnabled(mMainMode != Internet);
- mMainWindow->actionDocument->setEnabled(mMainMode != Document);
-
- if (Document == mMainMode)
- {
- connect(UBApplication::instance(), SIGNAL(focusChanged(QWidget *, QWidget *)), UBApplication::documentController, SLOT(focusChanged(QWidget *, QWidget *)));
- }
- else
- {
- disconnect(UBApplication::instance(), SIGNAL(focusChanged(QWidget *, QWidget *)), UBApplication::documentController, SLOT(focusChanged(QWidget *, QWidget *)));
- if (Board == mMainMode)
- mMainWindow->actionDuplicate->setEnabled(true);
- }
-
- UBApplication::boardController->setToolbarTexts();
-
- UBApplication::webController->adaptToolBar();
-
-}
-
-
-void UBApplicationController::adjustDisplayView()
-{
- if (mDisplayView)
- {
- qreal systemDisplayViewScaleFactor = 1.0;
-
- QSize pageSize = UBApplication::boardController->activeScene()->nominalSize();
- QSize displaySize = mDisplayView->size();
-
- qreal hFactor = ((qreal)displaySize.width()) / ((qreal)pageSize.width());
- qreal vFactor = ((qreal)displaySize.height()) / ((qreal)pageSize.height());
-
- systemDisplayViewScaleFactor = qMin(hFactor, vFactor);
-
- QTransform tr;
- qreal scaleFactor = systemDisplayViewScaleFactor * UBApplication::boardController->currentZoom();
-
- tr.scale(scaleFactor, scaleFactor);
-
- QRect rect = mControlView->rect();
- QPoint center(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2);
-
- QTransform recentTransform = mDisplayView->transform();
-
- if (recentTransform != tr)
- mDisplayView->setTransform(tr);
-
- mDisplayView->centerOn(mControlView->mapToScene(center));
- }
-}
-
-
-void UBApplicationController::adjustPreviousViews(int pActiveSceneIndex, UBDocumentProxy *pActiveDocument)
-{
- int viewIndex = pActiveSceneIndex;
-
- foreach(UBBoardView* previousView, mPreviousViews)
- {
- if (viewIndex > 0)
- {
- viewIndex--;
-
- UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->loadDocumentScene(pActiveDocument, viewIndex);
-
- if (scene)
- {
- previousView->setScene(scene);
-
- qreal ratio = ((qreal)previousView->geometry().width()) / ((qreal)previousView->geometry().height());
- QRectF sceneRect = scene->normalizedSceneRect(ratio);
- qreal scaleRatio = previousView->geometry().width() / sceneRect.width();
-
- previousView->resetTransform();
-
- previousView->scale(scaleRatio, scaleRatio);
-
- previousView->centerOn(sceneRect.center());
- }
- }
- else
- {
- previousView->setScene(mBlackScene);
- }
- }
-}
-
-
-void UBApplicationController::blackout()
-{
- mDisplayManager->blackout();
-}
-
-
-void UBApplicationController::addCapturedPixmap(const QPixmap &pPixmap, bool pageMode, const QUrl& sourceUrl)
-{
- if (!pPixmap.isNull())
- {
- qreal sf = UBApplication::boardController->systemScaleFactor();
- qreal scaledWidth = ((qreal)pPixmap.width()) / sf;
- qreal scaledHeight = ((qreal)pPixmap.height()) / sf;
-
- QSize pageNominalSize = UBApplication::boardController->activeScene()->nominalSize();
-
- int newWidth = qMin((int)scaledWidth, pageNominalSize.width());
- int newHeight = qMin((int)scaledHeight, pageNominalSize.height());
-
- if (pageMode)
- {
- newHeight = pPixmap.height();
- }
-
- QSizeF scaledSize(scaledWidth, scaledHeight);
- scaledSize.scale(newWidth, newHeight, Qt::KeepAspectRatio);
-
- qreal scaleFactor = qMin(scaledSize.width() / (qreal)pPixmap.width(), scaledSize.height() / (qreal)pPixmap.height());
-
- QPointF pos(0.0, 0.0);
-
- if (pageMode)
- {
- pos.setY(pageNominalSize.height() / -2 + scaledSize.height() / 2);
- }
-
- UBApplication::boardController->paletteManager()->addItem(pPixmap, pos, scaleFactor, sourceUrl);
- }
-}
-
-
-void UBApplicationController::addCapturedEmbedCode(const QString& embedCode)
-{
- if (!embedCode.isEmpty())
- {
- showBoard();
-
- const QString userWidgetPath = UBSettings::settings()->userInteractiveDirectory() + "/" + tr("Web"); // TODO UB 4.x synch with w3cWidget
- QDir userWidgetDir(userWidgetPath);
-
- int width = 300;
- int height = 150;
-
- QString widgetPath = UBGraphicsW3CWidgetItem::createHtmlWrapperInDir(embedCode, userWidgetDir,
- QSize(width, height), UBStringUtils::toCanonicalUuid(QUuid::createUuid()));
-
- if (widgetPath.length() > 0)
- UBApplication::boardController->downloadURL(QUrl::fromLocalFile(widgetPath));
- }
-}
-
-
-void UBApplicationController::showBoard()
-{
- mMainWindow->webToolBar->hide();
- mMainWindow->documentToolBar->hide();
- mMainWindow->tutorialToolBar->hide();
- mMainWindow->boardToolBar->show();
-
- if (mMainMode == Document)
- {
- int selectedSceneIndex = UBApplication::documentController->getSelectedItemIndex();
- if (selectedSceneIndex != -1)
- {
- UBApplication::boardController->setActiveDocumentScene(UBApplication::documentController->selectedDocument(), selectedSceneIndex, true);
- }
- }
-
- mMainMode = Board;
-
- adaptToolBar();
-
- mirroringEnabled(false);
-
- mMainWindow->switchToBoardWidget();
-
- if (UBApplication::boardController)
- UBApplication::boardController->show();
-
- mIsShowingDesktop = false;
- UBPlatformUtils::setDesktopMode(false);
-
- mUninoteController->hideWindow();
-
- mMainWindow->show();
-
- emit mainModeChanged(Board);
-
- UBApplication::boardController->freezeW3CWidgets(false);
- UBApplication::boardController->activeScene()->updateGroupButtonState();
-}
-
-
-void UBApplicationController::showInternet()
-{
-
- if (UBApplication::boardController)
- {
- UBApplication::boardController->persistCurrentScene();
- UBApplication::boardController->hide();
- }
-
- if (UBSettings::settings()->webUseExternalBrowser->get().toBool())
- {
- showDesktop(true);
- UBApplication::webController->show(UBWebController::WebBrowser);
- // really no have emit mainModeChanged here ? potential problem with virtual keyboard ?
- }
- else
- {
- mMainWindow->boardToolBar->hide();
- mMainWindow->documentToolBar->hide();
- mMainWindow->tutorialToolBar->hide();
- mMainWindow->webToolBar->show();
-
- mMainMode = Internet;
-
- adaptToolBar();
-
- mMainWindow->show();
- mUninoteController->hideWindow();
-
- UBApplication::webController->show(UBWebController::WebBrowser);
-
- emit mainModeChanged(Internet);
- }
-}
-
-
-void UBApplicationController::showDocument()
-{
- mMainWindow->webToolBar->hide();
- mMainWindow->boardToolBar->hide();
- mMainWindow->tutorialToolBar->hide();
- mMainWindow->documentToolBar->show();
-
- mMainMode = Document;
-
- adaptToolBar();
-
- mirroringEnabled(false);
-
- mMainWindow->switchToDocumentsWidget();
-
- if (UBApplication::boardController)
- {
- if (UBApplication::boardController->activeScene()->isModified() || (UBApplication::boardController->paletteManager()->teacherGuideDockWidget() && UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified()))
- UBApplication::boardController->persistCurrentScene();
- UBApplication::boardController->hide();
- }
-
- if (UBApplication::documentController)
- UBApplication::documentController->show();
-
- mMainWindow->show();
-
- mUninoteController->hideWindow();
-
- emit mainModeChanged(Document);
-}
-
-void UBApplicationController::showDesktop(bool dontSwitchFrontProcess)
-{
- int desktopWidgetIndex = qApp->desktop()->screenNumber(mMainWindow);
-
- if (UBApplication::boardController)
- UBApplication::boardController->hide();
-
- mMainWindow->hide();
- mUninoteController->showWindow();
-
- if (mMirror)
- {
- QRect rect = qApp->desktop()->screenGeometry(desktopWidgetIndex);
- mMirror->setSourceRect(rect);
- }
-
- mIsShowingDesktop = true;
- emit desktopMode(true);
-
- if (!dontSwitchFrontProcess) {
- UBPlatformUtils::bringPreviousProcessToFront();
- }
-
- UBDrawingController::drawingController()->setInDestopMode(true);
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
-}
-
-
-void UBApplicationController::showTutorial()
-{
-
- if (UBApplication::boardController)
- {
- UBApplication::boardController->persistCurrentScene();
- UBApplication::boardController->hide();
- }
-
- if (UBSettings::settings()->webUseExternalBrowser->get().toBool())
- {
- showDesktop(true);
- UBApplication::webController->show(UBWebController::Tutorial);
-
- }
- else{
- mMainWindow->webToolBar->hide();
- mMainWindow->boardToolBar->hide();
- mMainWindow->documentToolBar->hide();
- mMainWindow->tutorialToolBar->show();
-
-
- mMainMode = Tutorial;
-
- adaptToolBar();
-
- mUninoteController->hideWindow();
-
- UBApplication::webController->show(UBWebController::Tutorial);
-
- mirroringEnabled(false);
- emit mainModeChanged(mMainMode);
- }
-}
-
-
-void UBApplicationController::showSankoreEditor()
-{
-
- if (UBApplication::boardController)
- {
- UBApplication::boardController->persistCurrentScene();
- UBApplication::boardController->hide();
- }
-
-// it's needed not to duplicate webbrowser search in web mode. If I've breaked smbd's code let Ivan know
- UBApplication::webController->show(UBWebController::Paraschool);
-
- mMainWindow->webToolBar->hide();
- mMainWindow->boardToolBar->hide();
- mMainWindow->documentToolBar->hide();
- mMainWindow->tutorialToolBar->show();
-
-
- mMainMode = ParaschoolEditor;
-
- adaptToolBar();
-
- mUninoteController->hideWindow();
-
- mirroringEnabled(false);
- emit mainModeChanged(mMainMode);
-}
-
-void UBApplicationController::checkUpdate()
-{
- if(mHttp)
- delete mHttp;
- QUrl url("http://ftp.open-sankore.org/update.json");
- mHttp = new QHttp(url.host());
- connect(mHttp, SIGNAL(requestFinished(int,bool)), this, SLOT(updateRequestFinished(int,bool)));
- mHttp->get(url.path());
-}
-
-void UBApplicationController::updateRequestFinished(int id, bool error)
-{
- if (error){
- qWarning() << "http command id" << id << "return the error: " << mHttp->errorString();
- mHttp->close();
- }
- else{
- QString responseString = QString(mHttp->readAll());
- if (!responseString.isEmpty() && responseString.contains("version") && responseString.contains("url")){
- mHttp->close();
- downloadJsonFinished(responseString);
- }
- }
-}
-
-
-
-void UBApplicationController::downloadJsonFinished(QString currentJson)
-{
- QScriptValue scriptValue;
- QScriptEngine scriptEngine;
- scriptValue = scriptEngine.evaluate ("(" + currentJson + ")");
-
- UBVersion installedVersion (qApp->applicationVersion().left(4));
- UBVersion jsonVersion (scriptValue.property("version").toString().left(4));
-
- if (installedVersion.isValid() && jsonVersion.isValid() && jsonVersion > installedVersion) {
- if (UBApplication::mainWindow->yesNoQuestion(tr("Update available"), tr ("New update available, would you go to the web page ?"))){
- QUrl url(scriptValue.property ("url").toString());
- QDesktopServices::openUrl (url);
- }
- }
- else {
- if (isNoUpdateDisplayed) {
- mMainWindow->information(tr("Update"), tr("No update available"));
- }
- }
-}
-
-void UBApplicationController::checkUpdateAtLaunch()
-{
- if(UBSettings::settings()->appEnableAutomaticSoftwareUpdates->get().toBool()){
- isNoUpdateDisplayed = false;
- checkUpdate ();
- }
-}
-
-void UBApplicationController::checkUpdateRequest()
-{
- isNoUpdateDisplayed = true;
- checkUpdate ();
-}
-
-void UBApplicationController::hideDesktop()
-{
- if (mMainMode == Board)
- {
- showBoard();
- }
- else if (mMainMode == Internet)
- {
- showInternet();
- }
- else if (mMainMode == Document)
- {
- showDocument();
- }
- else if (mMainMode == Tutorial)
- {
- showTutorial();
- }
- else if (mMainMode == ParaschoolEditor)
- {
- showSankoreEditor();
- }
-
- mIsShowingDesktop = false;
-
- mDisplayManager->adjustScreens(-1);
-
- emit desktopMode(false);
-}
-
-void UBApplicationController::setMirrorSourceWidget(QWidget* pWidget)
-{
- if (mMirror)
- {
- mMirror->setSourceWidget(pWidget);
- }
-}
-
-
-void UBApplicationController::mirroringEnabled(bool enabled)
-{
- if (mMirror)
- {
- if (enabled)
- {
- mMirror->start();
- mDisplayManager->setDisplayWidget(mMirror);
-
- }
- else
- {
- mDisplayManager->setDisplayWidget(mDisplayView);
- mMirror->stop();
- }
-
- mMirror->setVisible(enabled && mDisplayManager->numScreens() > 1);
- mUninoteController->updateShowHideState(enabled);
- UBApplication::mainWindow->actionWebShowHideOnDisplay->setChecked(enabled);
- }
- else
- {
- mDisplayManager->setDisplayWidget(mDisplayView);
- }
-}
-
-
-void UBApplicationController::closing()
-{
- if (mMirror)
- mMirror->stop();
-
- if (mUninoteController)
- {
- mUninoteController->hideWindow();
- mUninoteController->close();
- }
-
- if (UBApplication::documentController)
- UBApplication::documentController->closing();
-}
-
-
-void UBApplicationController::showMessage(const QString& message, bool showSpinningWheel)
-{
- if (!UBApplication::closingDown())
- {
- if (mMainMode == Document)
- {
- UBApplication::boardController->hideMessage();
- UBApplication::documentController->showMessage(message, showSpinningWheel);
- }
- else
- {
- UBApplication::documentController->hideMessage();
- UBApplication::boardController->showMessage(message, showSpinningWheel);
- }
- }
-}
-
-
-void UBApplicationController::importFile(const QString& pFilePath)
-{
- const QFile fileToOpen(pFilePath);
-
- if (!fileToOpen.exists())
- return;
-
- UBDocumentProxy* document = 0;
-
- bool success = false;
-
- document = UBDocumentManager::documentManager()->importFile(fileToOpen, "");
-
- success = (document != 0);
-
- if (success && document)
- {
- if (mMainMode == Board || mMainMode == Internet)
- {
- if (UBApplication::boardController)
- {
- UBApplication::boardController->setActiveDocumentScene(document, 0);
- showBoard();
- }
- }
- else if (mMainMode == Document)
- {
- if (UBApplication::documentController)
- UBApplication::documentController->selectDocument(document);
- }
- }
-}
-
-void UBApplicationController::useMultiScreen(bool use)
-{
- mDisplayManager->setUseMultiScreen(use);
- mDisplayManager->adjustScreens(0);
- UBSettings::settings()->appUseMultiscreen->set(use);
-
-}
-
-
-QStringList UBApplicationController::widgetInlineJavaScripts()
-{
- QString scriptDirPath = UBPlatformUtils::applicationResourcesDirectory() + "/widget-inline-js";
- QDir scriptDir(scriptDirPath);
-
- QStringList scripts;
-
- if (scriptDir.exists())
- {
- QStringList files = scriptDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
-
- foreach(QString file, files)
- {
- QFile scriptFile(scriptDirPath + "/" + file);
- if (file.endsWith(".js") && scriptFile.open(QIODevice::ReadOnly))
- {
- QString s = QString::fromUtf8(scriptFile.readAll());
-
- if (s.length() > 0)
- scripts << s;
-
- }
- }
- }
-
- qSort(scripts);
-
- return scripts;
-}
-
-
-
-void UBApplicationController::actionCut()
-{
- if (!UBApplication::closingDown())
- {
- if (mMainMode == Board)
- {
- UBApplication::boardController->cut();
- }
- else if(mMainMode == Document)
- {
- UBApplication::documentController->cut();
- }
- else if(mMainMode == Internet)
- {
- UBApplication::webController->cut();
- }
- }
-}
-
-
-void UBApplicationController::actionCopy()
-{
- if (!UBApplication::closingDown())
- {
- if (mMainMode == Board)
- {
- UBApplication::boardController->copy();
- }
- else if(mMainMode == Document)
- {
- UBApplication::documentController->copy();
- }
- else if(mMainMode == Internet)
- {
- UBApplication::webController->copy();
- }
- }
-}
-
-
-void UBApplicationController::actionPaste()
-{
- if (!UBApplication::closingDown())
- {
- if (mMainMode == Board)
- {
- UBApplication::boardController->paste();
- }
- else if (mMainMode == Document)
- {
- UBApplication::documentController->paste();
- }
- else if(mMainMode == Internet)
- {
- UBApplication::webController->paste();
- }
- }
-}
+
+
+
+#include "UBApplicationController.h"
+
+#include "frameworks/UBPlatformUtils.h"
+#include "frameworks/UBVersion.h"
+
+#include "core/UBApplication.h"
+#include "core/UBPersistenceManager.h"
+#include "core/UBSettings.h"
+#include "core/UBSetting.h"
+#include "core/UBDocumentManager.h"
+#include "core/UBDisplayManager.h"
+
+#include "board/UBBoardView.h"
+#include "board/UBBoardController.h"
+#include "board/UBBoardPaletteManager.h"
+#include "board/UBDrawingController.h"
+
+
+#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
+
+#include "domain/UBGraphicsWidgetItem.h"
+
+#include "desktop/UBDesktopPalette.h"
+#include "desktop/UBDesktopAnnotationController.h"
+
+#include "web/UBWebController.h"
+
+#include "gui/UBScreenMirror.h"
+#include "gui/UBMainWindow.h"
+#include "gui/UBDockTeacherGuideWidget.h"
+#include "gui/UBTeacherGuideWidget.h"
+
+#include "domain/UBGraphicsPixmapItem.h"
+
+#include "podcast/UBPodcastController.h"
+
+#include "network/UBNetworkAccessManager.h"
+
+#include "ui_mainWindow.h"
+
+#ifdef Q_WS_MAC
+#include <Carbon/Carbon.h>
+#endif
+
+#include "core/memcheck.h"
+
+UBApplicationController::UBApplicationController(UBBoardView *pControlView,
+ UBBoardView *pDisplayView,
+ UBMainWindow* pMainWindow,
+ QObject* parent,
+ UBRightPalette* rightPalette)
+ : QObject(parent)
+ , mMainWindow(pMainWindow)
+ , mControlView(pControlView)
+ , mDisplayView(pDisplayView)
+ , mMirror(0)
+ , mMainMode(Board)
+ , mDisplayManager(0)
+ , mAutomaticCheckForUpdates(false)
+ , mCheckingForUpdates(false)
+ , mIsShowingDesktop(false)
+ , mHttp(0)
+{
+ mDisplayManager = new UBDisplayManager(this);
+
+ mUninoteController = new UBDesktopAnnotationController(this, rightPalette);
+
+ connect(mDisplayManager, SIGNAL(screenLayoutChanged()), this, SLOT(screenLayoutChanged()));
+ connect(mDisplayManager, SIGNAL(screenLayoutChanged()), mUninoteController, SLOT(screenLayoutChanged()));
+ connect(mDisplayManager, SIGNAL(screenLayoutChanged()), UBApplication::webController, SLOT(screenLayoutChanged()));
+
+ connect(mUninoteController, SIGNAL(imageCaptured(const QPixmap &, bool)), this, SLOT(addCapturedPixmap(const QPixmap &, bool)));
+ connect(mUninoteController, SIGNAL(restoreUniboard()), this, SLOT(hideDesktop()));
+
+ for(int i = 0; i < mDisplayManager->numPreviousViews(); i++)
+ {
+ UBBoardView *previousView = new UBBoardView(UBApplication::boardController, UBItemLayerType::FixedBackground, UBItemLayerType::Tool, 0);
+ previousView->setInteractive(false);
+ mPreviousViews.append(previousView);
+ }
+
+ mBlackScene = new UBGraphicsScene(0); // deleted by UBApplicationController::destructor
+ mBlackScene->setBackground(true, false);
+
+ if (mDisplayManager->numScreens() >= 2)
+ {
+ mMirror = new UBScreenMirror();
+ }
+
+ connect(UBApplication::webController, SIGNAL(imageCaptured(const QPixmap &, bool, const QUrl&))
+ , this, SLOT(addCapturedPixmap(const QPixmap &, bool, const QUrl&)));
+
+ networkAccessManager = new QNetworkAccessManager (this);
+ QTimer::singleShot (1000, this, SLOT (checkUpdateAtLaunch()));
+
+#ifdef Q_WS_X11
+ mMainWindow->setStyleSheet("QToolButton { font-size: 11px}");
+#endif
+
+}
+
+
+UBApplicationController::~UBApplicationController()
+{
+ foreach(UBBoardView* view, mPreviousViews)
+ {
+ delete view;
+ }
+
+ delete mBlackScene;
+ delete mMirror;
+ if (mHttp) delete mHttp;
+}
+
+
+void UBApplicationController::initViewState(int horizontalPosition, int verticalPostition)
+{
+ mInitialHScroll = horizontalPosition;
+ mInitialVScroll = verticalPostition;
+}
+
+
+void UBApplicationController::initScreenLayout(bool useMultiscreen)
+{
+ mDisplayManager->setControlWidget(mMainWindow);
+ mDisplayManager->setDisplayWidget(mDisplayView);
+
+ mDisplayManager->setPreviousDisplaysWidgets(mPreviousViews);
+ mDisplayManager->setDesktopWidget(mUninoteController->drawingView());
+
+ mDisplayManager->setUseMultiScreen(useMultiscreen);
+ mDisplayManager->adjustScreens(-1);
+}
+
+
+void UBApplicationController::screenLayoutChanged()
+{
+ initViewState(mControlView->horizontalScrollBar()->value(),
+ mControlView->verticalScrollBar()->value());
+
+ adaptToolBar();
+
+ adjustDisplayView();
+
+ if (mDisplayManager->hasDisplay())
+ {
+ UBApplication::boardController->setBoxing(mDisplayView->geometry());
+ }
+ else
+ {
+ UBApplication::boardController->setBoxing(QRect());
+ }
+
+ adjustPreviousViews(0, 0);
+}
+
+
+void UBApplicationController::adaptToolBar()
+{
+ bool highResolution = mMainWindow->width() > 1024;
+
+ mMainWindow->actionClearPage->setVisible(Board == mMainMode && highResolution);
+ mMainWindow->actionBoard->setVisible(Board != mMainMode || highResolution);
+ mMainWindow->actionDocument->setVisible(Document != mMainMode || highResolution);
+ mMainWindow->actionWeb->setVisible(Internet != mMainMode || highResolution);
+ mMainWindow->boardToolBar->setIconSize(QSize(highResolution ? 48 : 42, mMainWindow->boardToolBar->iconSize().height()));
+
+ mMainWindow->actionBoard->setEnabled(mMainMode != Board);
+ mMainWindow->actionWeb->setEnabled(mMainMode != Internet);
+ mMainWindow->actionDocument->setEnabled(mMainMode != Document);
+
+ if (Document == mMainMode)
+ {
+ connect(UBApplication::instance(), SIGNAL(focusChanged(QWidget *, QWidget *)), UBApplication::documentController, SLOT(focusChanged(QWidget *, QWidget *)));
+ }
+ else
+ {
+ disconnect(UBApplication::instance(), SIGNAL(focusChanged(QWidget *, QWidget *)), UBApplication::documentController, SLOT(focusChanged(QWidget *, QWidget *)));
+ if (Board == mMainMode)
+ mMainWindow->actionDuplicate->setEnabled(true);
+ }
+
+ UBApplication::boardController->setToolbarTexts();
+
+ UBApplication::webController->adaptToolBar();
+
+}
+
+
+void UBApplicationController::adjustDisplayView()
+{
+ if (mDisplayView)
+ {
+ qreal systemDisplayViewScaleFactor = 1.0;
+
+ QSize pageSize = UBApplication::boardController->activeScene()->nominalSize();
+ QSize displaySize = mDisplayView->size();
+
+ qreal hFactor = ((qreal)displaySize.width()) / ((qreal)pageSize.width());
+ qreal vFactor = ((qreal)displaySize.height()) / ((qreal)pageSize.height());
+
+ systemDisplayViewScaleFactor = qMin(hFactor, vFactor);
+
+ QTransform tr;
+ qreal scaleFactor = systemDisplayViewScaleFactor * UBApplication::boardController->currentZoom();
+
+ tr.scale(scaleFactor, scaleFactor);
+
+ QRect rect = mControlView->rect();
+ QPoint center(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2);
+
+ QTransform recentTransform = mDisplayView->transform();
+
+ if (recentTransform != tr)
+ mDisplayView->setTransform(tr);
+
+ mDisplayView->centerOn(mControlView->mapToScene(center));
+ }
+}
+
+
+void UBApplicationController::adjustPreviousViews(int pActiveSceneIndex, UBDocumentProxy *pActiveDocument)
+{
+ int viewIndex = pActiveSceneIndex;
+
+ foreach(UBBoardView* previousView, mPreviousViews)
+ {
+ if (viewIndex > 0)
+ {
+ viewIndex--;
+
+ UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->loadDocumentScene(pActiveDocument, viewIndex);
+
+ if (scene)
+ {
+ previousView->setScene(scene);
+
+ qreal ratio = ((qreal)previousView->geometry().width()) / ((qreal)previousView->geometry().height());
+ QRectF sceneRect = scene->normalizedSceneRect(ratio);
+ qreal scaleRatio = previousView->geometry().width() / sceneRect.width();
+
+ previousView->resetTransform();
+
+ previousView->scale(scaleRatio, scaleRatio);
+
+ previousView->centerOn(sceneRect.center());
+ }
+ }
+ else
+ {
+ previousView->setScene(mBlackScene);
+ }
+ }
+}
+
+
+void UBApplicationController::blackout()
+{
+ mDisplayManager->blackout();
+}
+
+
+void UBApplicationController::addCapturedPixmap(const QPixmap &pPixmap, bool pageMode, const QUrl& sourceUrl)
+{
+ if (!pPixmap.isNull())
+ {
+ qreal sf = UBApplication::boardController->systemScaleFactor();
+ qreal scaledWidth = ((qreal)pPixmap.width()) / sf;
+ qreal scaledHeight = ((qreal)pPixmap.height()) / sf;
+
+ QSize pageNominalSize = UBApplication::boardController->activeScene()->nominalSize();
+
+ int newWidth = qMin((int)scaledWidth, pageNominalSize.width());
+ int newHeight = qMin((int)scaledHeight, pageNominalSize.height());
+
+ if (pageMode)
+ {
+ newHeight = pPixmap.height();
+ }
+
+ QSizeF scaledSize(scaledWidth, scaledHeight);
+ scaledSize.scale(newWidth, newHeight, Qt::KeepAspectRatio);
+
+ qreal scaleFactor = qMin(scaledSize.width() / (qreal)pPixmap.width(), scaledSize.height() / (qreal)pPixmap.height());
+
+ QPointF pos(0.0, 0.0);
+
+ if (pageMode)
+ {
+ pos.setY(pageNominalSize.height() / -2 + scaledSize.height() / 2);
+ }
+
+ UBApplication::boardController->paletteManager()->addItem(pPixmap, pos, scaleFactor, sourceUrl);
+ }
+}
+
+
+void UBApplicationController::addCapturedEmbedCode(const QString& embedCode)
+{
+ if (!embedCode.isEmpty())
+ {
+ showBoard();
+
+ const QString userWidgetPath = UBSettings::settings()->userInteractiveDirectory() + "/" + tr("Web"); // TODO UB 4.x synch with w3cWidget
+ QDir userWidgetDir(userWidgetPath);
+
+ int width = 300;
+ int height = 150;
+
+ QString widgetPath = UBGraphicsW3CWidgetItem::createHtmlWrapperInDir(embedCode, userWidgetDir,
+ QSize(width, height), UBStringUtils::toCanonicalUuid(QUuid::createUuid()));
+
+ if (widgetPath.length() > 0)
+ UBApplication::boardController->downloadURL(QUrl::fromLocalFile(widgetPath));
+ }
+}
+
+
+void UBApplicationController::showBoard()
+{
+ mMainWindow->webToolBar->hide();
+ mMainWindow->documentToolBar->hide();
+ mMainWindow->tutorialToolBar->hide();
+ mMainWindow->boardToolBar->show();
+
+// if (mMainMode == Document)
+// {
+// int selectedSceneIndex = UBApplication::documentController->getSelectedItemIndex();
+// if (selectedSceneIndex != -1)
+// {
+// UBApplication::boardController->setActiveDocumentScene(UBApplication::documentController->selectedDocument(), selectedSceneIndex, true);
+// }
+// }
+
+ mMainMode = Board;
+
+ adaptToolBar();
+
+ mirroringEnabled(false);
+
+ mMainWindow->switchToBoardWidget();
+
+ if (UBApplication::boardController)
+ {
+ UBApplication::boardController->activeScene()->setRenderingContext(UBGraphicsScene::Screen);
+ UBApplication::boardController->show();
+ }
+
+ mIsShowingDesktop = false;
+ UBPlatformUtils::setDesktopMode(false);
+
+ mUninoteController->hideWindow();
+
+ mMainWindow->show();
+
+ emit mainModeChanged(Board);
+
+ UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool();
+ if (UBStylusTool::Selector != currentTool)
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+
+ UBApplication::boardController->freezeW3CWidgets(false);
+ UBApplication::boardController->activeScene()->updateGroupButtonState();
+}
+
+
+void UBApplicationController::showInternet()
+{
+
+ if (UBApplication::boardController)
+ {
+ UBApplication::boardController->activeScene()->setRenderingContext(UBGraphicsScene::NonScreen);
+ UBApplication::boardController->persistCurrentScene();
+ UBApplication::boardController->hide();
+ }
+
+ if (UBSettings::settings()->webUseExternalBrowser->get().toBool())
+ {
+ showDesktop(true);
+ UBApplication::webController->show(UBWebController::WebBrowser);
+ // really no have emit mainModeChanged here ? potential problem with virtual keyboard ?
+ }
+ else
+ {
+ mMainWindow->boardToolBar->hide();
+ mMainWindow->documentToolBar->hide();
+ mMainWindow->tutorialToolBar->hide();
+ mMainWindow->webToolBar->show();
+
+ mMainMode = Internet;
+
+ adaptToolBar();
+
+ mMainWindow->show();
+ mUninoteController->hideWindow();
+
+ UBApplication::webController->show(UBWebController::WebBrowser);
+
+ emit mainModeChanged(Internet);
+ }
+}
+
+
+void UBApplicationController::showDocument()
+{
+ mMainWindow->webToolBar->hide();
+ mMainWindow->boardToolBar->hide();
+ mMainWindow->tutorialToolBar->hide();
+ mMainWindow->documentToolBar->show();
+
+ mMainMode = Document;
+
+ adaptToolBar();
+
+ mirroringEnabled(false);
+
+ mMainWindow->switchToDocumentsWidget();
+
+ if (UBApplication::boardController)
+ {
+ if (UBApplication::boardController->activeScene()->isModified() || (UBApplication::boardController->paletteManager()->teacherGuideDockWidget() && UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified()))
+ {
+ UBApplication::boardController->activeScene()->setRenderingContext(UBGraphicsScene::NonScreen);
+ UBApplication::boardController->persistCurrentScene();
+ }
+ UBApplication::boardController->hide();
+ }
+
+ UBDocumentController *docCtrl = UBApplication::documentController;
+ if (docCtrl) {
+ docCtrl->show();
+ if (docCtrl->firstSelectedTreeProxy()) {
+ docCtrl->setDocument(docCtrl->firstSelectedTreeProxy(), true);
+ }
+ }
+
+ mMainWindow->show();
+
+ mUninoteController->hideWindow();
+
+ emit mainModeChanged(Document);
+}
+
+void UBApplicationController::showDesktop(bool dontSwitchFrontProcess)
+{
+ int desktopWidgetIndex = qApp->desktop()->screenNumber(mMainWindow);
+
+ if (UBApplication::boardController)
+ UBApplication::boardController->hide();
+
+ mMainWindow->hide();
+ mUninoteController->showWindow();
+
+ if (mMirror)
+ {
+ QRect rect = qApp->desktop()->screenGeometry(desktopWidgetIndex);
+ mMirror->setSourceRect(rect);
+ }
+
+ mIsShowingDesktop = true;
+ emit desktopMode(true);
+
+ if (!dontSwitchFrontProcess) {
+ UBPlatformUtils::bringPreviousProcessToFront();
+ }
+
+ UBDrawingController::drawingController()->setInDestopMode(true);
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+}
+
+
+void UBApplicationController::showTutorial()
+{
+
+ if (UBApplication::boardController)
+ {
+ UBApplication::boardController->persistCurrentScene();
+ UBApplication::boardController->hide();
+ }
+
+ if (UBSettings::settings()->webUseExternalBrowser->get().toBool())
+ {
+ showDesktop(true);
+ UBApplication::webController->show(UBWebController::Tutorial);
+ UBApplication::boardController->activeScene()->setRenderingContext(UBGraphicsScene::NonScreen);
+ }
+ else{
+ mMainWindow->webToolBar->hide();
+ mMainWindow->boardToolBar->hide();
+ mMainWindow->documentToolBar->hide();
+ mMainWindow->tutorialToolBar->show();
+
+
+ mMainMode = Tutorial;
+
+ adaptToolBar();
+
+ mUninoteController->hideWindow();
+
+ UBApplication::webController->show(UBWebController::Tutorial);
+
+ mirroringEnabled(false);
+ emit mainModeChanged(mMainMode);
+ }
+}
+
+
+void UBApplicationController::showSankoreEditor()
+{
+
+ if (UBApplication::boardController)
+ {
+ UBApplication::boardController->activeScene()->setRenderingContext(UBGraphicsScene::NonScreen);
+ UBApplication::boardController->persistCurrentScene();
+ UBApplication::boardController->hide();
+ }
+
+// it's needed not to duplicate webbrowser search in web mode. If I've breaked smbd's code let Ivan know
+ UBApplication::webController->show(UBWebController::Paraschool);
+
+ mMainWindow->webToolBar->hide();
+ mMainWindow->boardToolBar->hide();
+ mMainWindow->documentToolBar->hide();
+ mMainWindow->tutorialToolBar->show();
+
+
+ mMainMode = ParaschoolEditor;
+
+ adaptToolBar();
+
+ mUninoteController->hideWindow();
+
+ mirroringEnabled(false);
+ emit mainModeChanged(mMainMode);
+}
+
+void UBApplicationController::checkUpdate()
+{
+ if(mHttp)
+ delete mHttp;
+ QUrl url("http://ftp.open-sankore.org/update.json");
+ mHttp = new QHttp(url.host());
+ connect(mHttp, SIGNAL(requestFinished(int,bool)), this, SLOT(updateRequestFinished(int,bool)));
+ mHttp->get(url.path());
+}
+
+void UBApplicationController::updateRequestFinished(int id, bool error)
+{
+ if (error){
+ qWarning() << "http command id" << id << "return the error: " << mHttp->errorString();
+ mHttp->close();
+ }
+ else{
+ QString responseString = QString(mHttp->readAll());
+ if (!responseString.isEmpty() && responseString.contains("version") && responseString.contains("url")){
+ mHttp->close();
+ downloadJsonFinished(responseString);
+ }
+ }
+}
+
+
+
+void UBApplicationController::downloadJsonFinished(QString currentJson)
+{
+ QScriptValue scriptValue;
+ QScriptEngine scriptEngine;
+ scriptValue = scriptEngine.evaluate ("(" + currentJson + ")");
+
+ UBVersion installedVersion (qApp->applicationVersion().left(4));
+ UBVersion jsonVersion (scriptValue.property("version").toString().left(4));
+
+ if (installedVersion.isValid() && jsonVersion.isValid() && jsonVersion > installedVersion) {
+ if (UBApplication::mainWindow->yesNoQuestion(tr("Update available"), tr ("New update available, would you go to the web page ?"))){
+ QUrl url(scriptValue.property ("url").toString());
+ QDesktopServices::openUrl (url);
+ }
+ }
+ else {
+ if (isNoUpdateDisplayed) {
+ mMainWindow->information(tr("Update"), tr("No update available"));
+ }
+ }
+}
+
+void UBApplicationController::checkUpdateAtLaunch()
+{
+ if(UBSettings::settings()->appEnableAutomaticSoftwareUpdates->get().toBool()){
+ isNoUpdateDisplayed = false;
+ checkUpdate ();
+ }
+}
+
+void UBApplicationController::checkUpdateRequest()
+{
+ isNoUpdateDisplayed = true;
+ checkUpdate ();
+}
+
+void UBApplicationController::hideDesktop()
+{
+ if (mMainMode == Board)
+ {
+ showBoard();
+ }
+ else if (mMainMode == Internet)
+ {
+ showInternet();
+ }
+ else if (mMainMode == Document)
+ {
+ showDocument();
+ }
+ else if (mMainMode == Tutorial)
+ {
+ showTutorial();
+ }
+ else if (mMainMode == ParaschoolEditor)
+ {
+ showSankoreEditor();
+ }
+
+ mIsShowingDesktop = false;
+
+ mDisplayManager->adjustScreens(-1);
+
+ emit desktopMode(false);
+}
+
+void UBApplicationController::setMirrorSourceWidget(QWidget* pWidget)
+{
+ if (mMirror)
+ {
+ mMirror->setSourceWidget(pWidget);
+ }
+}
+
+
+void UBApplicationController::mirroringEnabled(bool enabled)
+{
+ if (mMirror)
+ {
+ if (enabled)
+ {
+ mMirror->start();
+ mDisplayManager->setDisplayWidget(mMirror);
+
+ }
+ else
+ {
+ mDisplayManager->setDisplayWidget(mDisplayView);
+ mMirror->stop();
+ }
+
+ mMirror->setVisible(enabled && mDisplayManager->numScreens() > 1);
+ mUninoteController->updateShowHideState(enabled);
+ UBApplication::mainWindow->actionWebShowHideOnDisplay->setChecked(enabled);
+ }
+ else
+ {
+ mDisplayManager->setDisplayWidget(mDisplayView);
+ }
+}
+
+
+void UBApplicationController::closing()
+{
+ if (mMirror)
+ mMirror->stop();
+
+ if (mUninoteController)
+ {
+ mUninoteController->hideWindow();
+ mUninoteController->close();
+ }
+
+ if (UBApplication::documentController)
+ UBApplication::documentController->closing();
+}
+
+
+void UBApplicationController::showMessage(const QString& message, bool showSpinningWheel)
+{
+ if (!UBApplication::closingDown())
+ {
+ if (mMainMode == Document)
+ {
+ UBApplication::boardController->hideMessage();
+ UBApplication::documentController->showMessage(message, showSpinningWheel);
+ }
+ else
+ {
+ UBApplication::documentController->hideMessage();
+ UBApplication::boardController->showMessage(message, showSpinningWheel);
+ }
+ }
+}
+
+
+void UBApplicationController::importFile(const QString& pFilePath)
+{
+ const QFile fileToOpen(pFilePath);
+
+ if (!fileToOpen.exists())
+ return;
+
+ UBDocumentProxy* document = 0;
+
+ bool success = false;
+
+ document = UBDocumentManager::documentManager()->importFile(fileToOpen, "");
+
+ success = (document != 0);
+
+ if (success && document)
+ {
+ if (mMainMode == Board || mMainMode == Internet)
+ {
+ if (UBApplication::boardController)
+ {
+ UBApplication::boardController->setActiveDocumentScene(document, 0);
+ showBoard();
+ }
+ }
+ else if (mMainMode == Document)
+ {
+ if (UBApplication::documentController)
+ UBApplication::documentController->selectDocument(document);
+ }
+ }
+}
+
+void UBApplicationController::useMultiScreen(bool use)
+{
+ mDisplayManager->setUseMultiScreen(use);
+ mDisplayManager->adjustScreens(0);
+ UBSettings::settings()->appUseMultiscreen->set(use);
+
+}
+
+
+QStringList UBApplicationController::widgetInlineJavaScripts()
+{
+ QString scriptDirPath = UBPlatformUtils::applicationResourcesDirectory() + "/widget-inline-js";
+ QDir scriptDir(scriptDirPath);
+
+ QStringList scripts;
+
+ if (scriptDir.exists())
+ {
+ QStringList files = scriptDir.entryList(QDir::Files | QDir::NoDotAndDotDot, QDir::Name);
+
+ foreach(QString file, files)
+ {
+ QFile scriptFile(scriptDirPath + "/" + file);
+ if (file.endsWith(".js") && scriptFile.open(QIODevice::ReadOnly))
+ {
+ QString s = QString::fromUtf8(scriptFile.readAll());
+
+ if (s.length() > 0)
+ scripts << s;
+
+ }
+ }
+ }
+
+ qSort(scripts);
+
+ return scripts;
+}
+
+
+
+void UBApplicationController::actionCut()
+{
+ if (!UBApplication::closingDown())
+ {
+ if (mMainMode == Board)
+ {
+ UBApplication::boardController->cut();
+ }
+ else if(mMainMode == Document)
+ {
+ UBApplication::documentController->cut();
+ }
+ else if(mMainMode == Internet)
+ {
+ UBApplication::webController->cut();
+ }
+ }
+}
+
+
+void UBApplicationController::actionCopy()
+{
+ if (!UBApplication::closingDown())
+ {
+ if (mMainMode == Board)
+ {
+ UBApplication::boardController->copy();
+ }
+ else if(mMainMode == Document)
+ {
+ UBApplication::documentController->copy();
+ }
+ else if(mMainMode == Internet)
+ {
+ UBApplication::webController->copy();
+ }
+ }
+}
+
+
+void UBApplicationController::actionPaste()
+{
+ if (!UBApplication::closingDown())
+ {
+ if (mMainMode == Board)
+ {
+ UBApplication::boardController->paste();
+ }
+ else if (mMainMode == Document)
+ {
+ UBApplication::documentController->paste();
+ }
+ else if(mMainMode == Internet)
+ {
+ UBApplication::webController->paste();
+ }
+ }
+}
diff --git a/Sankore-3.1/src/core/UBApplicationController.h b/Sankore-3.1/src/core/UBApplicationController.h
index 54b65db..66eb03e 100644
--- a/Sankore-3.1/src/core/UBApplicationController.h
+++ b/Sankore-3.1/src/core/UBApplicationController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBAPPLICATIONCONTROLLER_H_
#define UBAPPLICATIONCONTROLLER_H_
diff --git a/Sankore-3.1/src/core/UBDisplayManager.cpp b/Sankore-3.1/src/core/UBDisplayManager.cpp
index 315cdd9..72a977b 100644
--- a/Sankore-3.1/src/core/UBDisplayManager.cpp
+++ b/Sankore-3.1/src/core/UBDisplayManager.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBDisplayManager.h"
#include "frameworks/UBPlatformUtils.h"
diff --git a/Sankore-3.1/src/core/UBDisplayManager.h b/Sankore-3.1/src/core/UBDisplayManager.h
index 3f8e2d5..9f5283a 100644
--- a/Sankore-3.1/src/core/UBDisplayManager.h
+++ b/Sankore-3.1/src/core/UBDisplayManager.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDISPLAYMANAGER_H_
#define UBDISPLAYMANAGER_H_
diff --git a/Sankore-3.1/src/core/UBDocumentManager.cpp b/Sankore-3.1/src/core/UBDocumentManager.cpp
index f78ebd6..89afe30 100644
--- a/Sankore-3.1/src/core/UBDocumentManager.cpp
+++ b/Sankore-3.1/src/core/UBDocumentManager.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,297 +20,324 @@
*/
-#include "UBDocumentManager.h"
-
-#include "frameworks/UBStringUtils.h"
-
-#include "adaptors/UBExportFullPDF.h"
-#include "adaptors/UBExportDocument.h"
-#include "adaptors/UBExportWeb.h"
-#include "adaptors/UBExportCFF.h"
-#include "adaptors/UBWebPublisher.h"
-#include "adaptors/UBImportDocument.h"
-#include "adaptors/UBImportPDF.h"
-#include "adaptors/UBImportImage.h"
-#include "adaptors/UBImportCFF.h"
-
-#include "domain/UBGraphicsScene.h"
-#include "domain/UBGraphicsSvgItem.h"
-#include "domain/UBGraphicsPixmapItem.h"
-
-#include "document/UBDocumentProxy.h"
-#include "document/UBDocumentController.h"
-#include "board/UBBoardController.h"
-
-#include "UBApplication.h"
-#include "UBSettings.h"
-#include "UBPersistenceManager.h"
-
-#include "../adaptors/UBExportWeb.h"
-
-#include "core/memcheck.h"
-
-UBDocumentManager* UBDocumentManager::sDocumentManager = 0;
-
-UBDocumentManager* UBDocumentManager::documentManager()
-{
- if (!sDocumentManager)
- {
- sDocumentManager = new UBDocumentManager(qApp);
- }
- return sDocumentManager;
-}
-
-
-UBDocumentManager::UBDocumentManager(QObject *parent)
- :QObject(parent)
-{
- // TODO UB 4.7 string used in document persistence (folder names)
- QString dummyImages = tr("images");
- QString dummyVideos = tr("videos");
- QString dummyObjects = tr("objects");
- QString dummyWidgets = tr("widgets");
-
- UBExportCFF* cffExporter = new UBExportCFF(this);
- UBExportFullPDF* exportFullPdf = new UBExportFullPDF(this);
- UBExportDocument* exportDocument = new UBExportDocument(this);
- UBWebPublisher* webPublished = new UBWebPublisher(this);
- mExportAdaptors.append(exportDocument);
- mExportAdaptors.append(webPublished);
- mExportAdaptors.append(exportFullPdf);
- mExportAdaptors.append(cffExporter);
-// UBExportWeb* exportWeb = new UBExportWeb(this);
-// mExportAdaptors.append(exportWeb);
-
- UBImportDocument* documentImport = new UBImportDocument(this);
- mImportAdaptors.append(documentImport);
- UBImportPDF* pdfImport = new UBImportPDF(this);
- mImportAdaptors.append(pdfImport);
- UBImportImage* imageImport = new UBImportImage(this);
- mImportAdaptors.append(imageImport);
- UBImportCFF* cffImport = new UBImportCFF(this);
- mImportAdaptors.append(cffImport);
-}
-
-
-UBDocumentManager::~UBDocumentManager()
-{
- // NOOP
-}
-
-
-QStringList UBDocumentManager::importFileExtensions()
-{
- QStringList result;
-
- foreach (UBImportAdaptor *importAdaptor, mImportAdaptors)
- {
- result << importAdaptor->supportedExtentions();
- }
- return result;
-}
-
-
-QString UBDocumentManager::importFileFilter()
-{
- QString result;
-
- result += tr("All supported files (*.%1)").arg(importFileExtensions().join(" *."));
- foreach (UBImportAdaptor *importAdaptor, mImportAdaptors)
- {
- if (importAdaptor->importFileFilter().length() > 0)
- {
- if (result.length())
- {
- result += ";;";
- }
- result += importAdaptor->importFileFilter();
- }
- }
- qDebug() << "import file filter" << result;
- return result;
-}
-
-
-UBDocumentProxy* UBDocumentManager::importFile(const QFile& pFile, const QString& pGroup)
-{
- QFileInfo fileInfo(pFile);
-
- foreach (UBImportAdaptor *adaptor, mImportAdaptors)
- {
- if (adaptor->supportedExtentions().lastIndexOf(fileInfo.suffix().toLower()) != -1)
- {
- UBDocumentProxy* document;
- UBApplication::setDisabled(true);
-
- if (adaptor->isDocumentBased())
- {
- UBDocumentBasedImportAdaptor* importAdaptor = (UBDocumentBasedImportAdaptor*)adaptor;
-
- document = importAdaptor->importFile(pFile, pGroup);
-
- }
- else
- {
- UBPageBasedImportAdaptor* importAdaptor = (UBPageBasedImportAdaptor*)adaptor;
-
- // Document import procedure.....
- QString documentName = QFileInfo(pFile.fileName()).completeBaseName();
- document = UBPersistenceManager::persistenceManager()->createDocument(pGroup, documentName);
-
- QUuid uuid = QUuid::createUuid();
- QString filepath = pFile.fileName();
- if (importAdaptor->folderToCopy() != "")
- {
- bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(document, pFile.fileName(), importAdaptor->folderToCopy() , uuid, filepath);
- if (!b)
- {
- UBPersistenceManager::persistenceManager()->deleteDocument(document);
- UBApplication::setDisabled(false);
- return NULL;
- }
- }
-
- QList<UBGraphicsItem*> pages = importAdaptor->import(uuid, filepath);
- int nPage = 0;
- foreach(UBGraphicsItem* page, pages)
- {
- UBApplication::showMessage(tr("Inserting page %1 of %2").arg(++nPage).arg(pages.size()), true);
-#ifdef Q_WS_MACX
- //Workaround for issue 912
- QApplication::processEvents();
-#endif
- int pageIndex = document->pageCount();
- UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(document, pageIndex);
- importAdaptor->placeImportedItemToScene(scene, page);
- UBPersistenceManager::persistenceManager()->persistDocumentScene(document, scene, pageIndex);
- }
-
- UBPersistenceManager::persistenceManager()->persistDocumentMetadata(document);
- UBApplication::showMessage(tr("Import successful."));
- }
-
- UBApplication::setDisabled(false);
- return document;
- }
-
- }
- return NULL;
-}
-
-
-int UBDocumentManager::addFilesToDocument(UBDocumentProxy* document, QStringList fileNames)
-{
- int nImportedDocuments = 0;
- foreach(const QString& fileName, fileNames)
- {
- UBApplication::showMessage(tr("Importing file %1").arg(fileName));
-
- QFile file(fileName);
- QFileInfo fileInfo(file);
-
- foreach (UBImportAdaptor *adaptor, mImportAdaptors)
- {
- if (adaptor->supportedExtentions().lastIndexOf(fileInfo.suffix().toLower()) != -1)
- {
- UBApplication::setDisabled(true);
-
- if (adaptor->isDocumentBased())
- {
- UBDocumentBasedImportAdaptor* importAdaptor = (UBDocumentBasedImportAdaptor*)adaptor;
-
- if (importAdaptor->addFileToDocument(document, file))
- nImportedDocuments++;
- }
- else
- {
- UBPageBasedImportAdaptor* importAdaptor = (UBPageBasedImportAdaptor*)adaptor;
-
- QUuid uuid = QUuid::createUuid();
- QString filepath = file.fileName();
- if (importAdaptor->folderToCopy() != "")
- {
- bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(document, file.fileName(), importAdaptor->folderToCopy() , uuid, filepath);
- if (!b)
- {
- continue;
- }
- }
-
- QList<UBGraphicsItem*> pages = importAdaptor->import(uuid, filepath);
- int nPage = 0;
- foreach(UBGraphicsItem* page, pages)
- {
- UBApplication::showMessage(tr("Inserting page %1 of %2").arg(++nPage).arg(pages.size()), true);
- int pageIndex = document->pageCount();
- UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(document, pageIndex);
- importAdaptor->placeImportedItemToScene(scene, page);
- UBPersistenceManager::persistenceManager()->persistDocumentScene(document, scene, pageIndex);
- UBApplication::boardController->addEmptyThumbPage();
- }
-
- UBPersistenceManager::persistenceManager()->persistDocumentMetadata(document);
- UBApplication::showMessage(tr("Import of file %1 successful.").arg(file.fileName()));
- nImportedDocuments++;
- }
-
- UBApplication::setDisabled(false);
- }
- }
- }
- return nImportedDocuments;
-}
-
-
-int UBDocumentManager::addImageDirToDocument(const QDir& pDir, UBDocumentProxy* pDocument)
-{
- QStringList filenames = pDir.entryList(QDir::Files | QDir::NoDotAndDotDot);
-
- filenames = UBStringUtils::sortByLastDigit(filenames);
-
- QStringList fileNames;
-
- foreach(QString f, filenames)
- {
- fileNames << pDir.absolutePath() + "/" + f;
- }
-
- return addFilesToDocument(pDocument, fileNames);
-
-}
-
-
-UBDocumentProxy* UBDocumentManager::importDir(const QDir& pDir, const QString& pGroup)
-{
- UBDocumentProxy* doc = UBPersistenceManager::persistenceManager()->createDocument(pGroup, pDir.dirName());
-
- int result = addImageDirToDocument(pDir, doc);
-
- if (result > 0)
- {
- doc->setMetaData(UBSettings::documentGroupName, pGroup);
- doc->setMetaData(UBSettings::documentName, pDir.dirName());
-
- UBPersistenceManager::persistenceManager()->persistDocumentMetadata(doc);
-
- UBApplication::showMessage(tr("File %1 saved").arg(pDir.dirName()));
-
- }
- else
- {
- UBPersistenceManager::persistenceManager()->deleteDocument(doc);
- }
-
- return doc;
-}
-
-
-QList<UBExportAdaptor*> UBDocumentManager::supportedExportAdaptors()
-{
- return mExportAdaptors;
-}
-
-void UBDocumentManager::emitDocumentUpdated(UBDocumentProxy* pDocument)
-{
- emit documentUpdated(pDocument);
-}
+
+#include "UBDocumentManager.h"
+
+#include "frameworks/UBStringUtils.h"
+
+#include "adaptors/UBExportFullPDF.h"
+#include "adaptors/UBExportDocument.h"
+#include "adaptors/UBExportWeb.h"
+#include "adaptors/UBExportCFF.h"
+#include "adaptors/UBExportDocumentSetAdaptor.h"
+#include "adaptors/UBWebPublisher.h"
+#include "adaptors/UBImportDocument.h"
+#include "adaptors/UBImportPDF.h"
+#include "adaptors/UBImportImage.h"
+#include "adaptors/UBImportCFF.h"
+#include "adaptors/UBImportDocumentSetAdaptor.h"
+
+#include "domain/UBGraphicsScene.h"
+#include "domain/UBGraphicsSvgItem.h"
+#include "domain/UBGraphicsPixmapItem.h"
+
+#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
+#include "board/UBBoardController.h"
+
+#include "UBApplication.h"
+#include "UBSettings.h"
+#include "UBPersistenceManager.h"
+
+#include "../adaptors/UBExportWeb.h"
+
+#include "core/memcheck.h"
+
+UBDocumentManager* UBDocumentManager::sDocumentManager = 0;
+
+UBDocumentManager* UBDocumentManager::documentManager()
+{
+ if (!sDocumentManager)
+ {
+ sDocumentManager = new UBDocumentManager(qApp);
+ }
+ return sDocumentManager;
+}
+
+
+UBDocumentManager::UBDocumentManager(QObject *parent)
+ :QObject(parent)
+{
+ // TODO UB 4.7 string used in document persistence (folder names)
+ QString dummyImages = tr("images");
+ QString dummyVideos = tr("videos");
+ QString dummyObjects = tr("objects");
+ QString dummyWidgets = tr("widgets");
+
+ UBExportCFF* cffExporter = new UBExportCFF(this);
+ UBExportFullPDF* exportFullPdf = new UBExportFullPDF(this);
+ UBExportDocument* exportDocument = new UBExportDocument(this);
+ UBWebPublisher* webPublished = new UBWebPublisher(this);
+ UBExportDocumentSetAdaptor *exportDocumentSet = new UBExportDocumentSetAdaptor(this);
+ mExportAdaptors.append(exportDocument);
+ mExportAdaptors.append(exportDocumentSet);
+ mExportAdaptors.append(webPublished);
+ mExportAdaptors.append(exportFullPdf);
+ mExportAdaptors.append(cffExporter);
+
+// UBExportWeb* exportWeb = new UBExportWeb(this);
+// mExportAdaptors.append(exportWeb);
+
+ UBImportDocument* documentImport = new UBImportDocument(this);
+ mImportAdaptors.append(documentImport);
+ UBImportDocumentSetAdaptor *documentSetImport = new UBImportDocumentSetAdaptor(this);
+ mImportAdaptors.append(documentSetImport);
+ UBImportPDF* pdfImport = new UBImportPDF(this);
+ mImportAdaptors.append(pdfImport);
+ UBImportImage* imageImport = new UBImportImage(this);
+ mImportAdaptors.append(imageImport);
+ UBImportCFF* cffImport = new UBImportCFF(this);
+ mImportAdaptors.append(cffImport);
+}
+
+
+UBDocumentManager::~UBDocumentManager()
+{
+ // NOOP
+}
+
+
+QStringList UBDocumentManager::importFileExtensions()
+{
+ QStringList result;
+
+ foreach (UBImportAdaptor *importAdaptor, mImportAdaptors)
+ {
+ result << importAdaptor->supportedExtentions();
+ }
+ return result;
+}
+
+
+QString UBDocumentManager::importFileFilter()
+{
+ QString result;
+
+ result += tr("All supported files (*.%1)").arg(importFileExtensions().join(" *."));
+ foreach (UBImportAdaptor *importAdaptor, mImportAdaptors)
+ {
+ if (importAdaptor->importFileFilter().length() > 0)
+ {
+ if (result.length())
+ {
+ result += ";;";
+ }
+ result += importAdaptor->importFileFilter();
+ }
+ }
+ qDebug() << "import file filter" << result;
+ return result;
+}
+
+QFileInfoList UBDocumentManager::importUbx(const QString &Incomingfile, const QString &destination)
+{
+ UBImportDocumentSetAdaptor *docSetAdaptor;
+ foreach (UBImportAdaptor *curAdaptor, mImportAdaptors) {
+ docSetAdaptor = qobject_cast<UBImportDocumentSetAdaptor*>(curAdaptor);
+ if (docSetAdaptor) {
+ break;
+ }
+ }
+ if (!docSetAdaptor) {
+ return QFileInfoList();
+ }
+
+ return docSetAdaptor->importData(Incomingfile, destination);
+}
+
+UBDocumentProxy* UBDocumentManager::importFile(const QFile& pFile, const QString& pGroup)
+{
+ QFileInfo fileInfo(pFile);
+
+ foreach (UBImportAdaptor *adaptor, mImportAdaptors)
+ {
+ if (adaptor->supportedExtentions().lastIndexOf(fileInfo.suffix().toLower()) != -1)
+ {
+ UBDocumentProxy* document;
+ UBApplication::setDisabled(true);
+
+ if (adaptor->isDocumentBased())
+ {
+ UBDocumentBasedImportAdaptor* importAdaptor = (UBDocumentBasedImportAdaptor*)adaptor;
+
+ document = importAdaptor->importFile(pFile, pGroup);
+
+ }
+ else
+ {
+ UBPageBasedImportAdaptor* importAdaptor = (UBPageBasedImportAdaptor*)adaptor;
+
+ // Document import procedure.....
+ QString documentName = QFileInfo(pFile.fileName()).completeBaseName();
+ document = UBPersistenceManager::persistenceManager()->createDocument(pGroup
+ ,documentName
+ , true
+ , QString()
+ , 0
+ , true);
+
+ QUuid uuid = QUuid::createUuid();
+ QString filepath = pFile.fileName();
+ if (importAdaptor->folderToCopy() != "")
+ {
+ bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(document, pFile.fileName(), importAdaptor->folderToCopy() , uuid, filepath);
+ if (!b)
+ {
+ UBApplication::setDisabled(false);
+ return NULL;
+ }
+ }
+
+ QList<UBGraphicsItem*> pages = importAdaptor->import(uuid, filepath);
+ int nPage = 0;
+ foreach(UBGraphicsItem* page, pages)
+ {
+ UBApplication::showMessage(tr("Inserting page %1 of %2").arg(++nPage).arg(pages.size()), true);
+#ifdef Q_WS_MACX
+ //Workaround for issue 912
+ QApplication::processEvents();
+#endif
+ int pageIndex = document->pageCount();
+ UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(document, pageIndex);
+ importAdaptor->placeImportedItemToScene(scene, page);
+ UBPersistenceManager::persistenceManager()->persistDocumentScene(document, scene, pageIndex);
+ }
+
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(document);
+ UBApplication::showMessage(tr("Import successful."));
+ }
+
+ UBApplication::setDisabled(false);
+ return document;
+ }
+
+ }
+ return NULL;
+}
+
+
+int UBDocumentManager::addFilesToDocument(UBDocumentProxy* document, QStringList fileNames)
+{
+ int nImportedDocuments = 0;
+ foreach(const QString& fileName, fileNames)
+ {
+ UBApplication::showMessage(tr("Importing file %1").arg(fileName));
+
+ QFile file(fileName);
+ QFileInfo fileInfo(file);
+
+ foreach (UBImportAdaptor *adaptor, mImportAdaptors)
+ {
+ if (adaptor->supportedExtentions().lastIndexOf(fileInfo.suffix().toLower()) != -1)
+ {
+ UBApplication::setDisabled(true);
+
+ if (adaptor->isDocumentBased())
+ {
+ UBDocumentBasedImportAdaptor* importAdaptor = (UBDocumentBasedImportAdaptor*)adaptor;
+
+ if (importAdaptor->addFileToDocument(document, file))
+ nImportedDocuments++;
+ }
+ else
+ {
+ UBPageBasedImportAdaptor* importAdaptor = (UBPageBasedImportAdaptor*)adaptor;
+
+ QUuid uuid = QUuid::createUuid();
+ QString filepath = file.fileName();
+ if (importAdaptor->folderToCopy() != "")
+ {
+ bool b = UBPersistenceManager::persistenceManager()->addFileToDocument(document, file.fileName(), importAdaptor->folderToCopy() , uuid, filepath);
+ if (!b)
+ {
+ continue;
+ }
+ }
+
+ QList<UBGraphicsItem*> pages = importAdaptor->import(uuid, filepath);
+ int nPage = 0;
+ foreach(UBGraphicsItem* page, pages)
+ {
+ UBApplication::showMessage(tr("Inserting page %1 of %2").arg(++nPage).arg(pages.size()), true);
+ int pageIndex = document->pageCount();
+ UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(document, pageIndex);
+ importAdaptor->placeImportedItemToScene(scene, page);
+ UBPersistenceManager::persistenceManager()->persistDocumentScene(document, scene, pageIndex);
+ UBApplication::boardController->addEmptyThumbPage();
+ }
+
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(document);
+ UBApplication::showMessage(tr("Import of file %1 successful.").arg(file.fileName()));
+ nImportedDocuments++;
+ }
+
+ UBApplication::setDisabled(false);
+ }
+ }
+ }
+ return nImportedDocuments;
+}
+
+
+int UBDocumentManager::addImageDirToDocument(const QDir& pDir, UBDocumentProxy* pDocument)
+{
+ QStringList filenames = pDir.entryList(QDir::Files | QDir::NoDotAndDotDot);
+
+ filenames = UBStringUtils::sortByLastDigit(filenames);
+
+ QStringList fileNames;
+
+ foreach(QString f, filenames)
+ {
+ fileNames << pDir.absolutePath() + "/" + f;
+ }
+
+ return addFilesToDocument(pDocument, fileNames);
+
+}
+
+
+UBDocumentProxy* UBDocumentManager::importDir(const QDir& pDir, const QString& pGroup)
+{
+ UBDocumentProxy* doc = UBPersistenceManager::persistenceManager()->createDocument(pGroup, pDir.dirName());
+
+ int result = addImageDirToDocument(pDir, doc);
+
+ if (result > 0)
+ {
+ doc->setMetaData(UBSettings::documentGroupName, pGroup);
+ doc->setMetaData(UBSettings::documentName, pDir.dirName());
+
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(doc);
+
+ UBApplication::showMessage(tr("File %1 saved").arg(pDir.dirName()));
+
+ }
+ else
+ {
+ UBPersistenceManager::persistenceManager()->deleteDocument(doc);
+ }
+
+ return doc;
+}
+
+
+QList<UBExportAdaptor*> UBDocumentManager::supportedExportAdaptors()
+{
+ return mExportAdaptors;
+}
+
+void UBDocumentManager::emitDocumentUpdated(UBDocumentProxy* pDocument)
+{
+ emit documentUpdated(pDocument);
+}
diff --git a/Sankore-3.1/src/core/UBDocumentManager.h b/Sankore-3.1/src/core/UBDocumentManager.h
index 4fec25f..30970e5 100644
--- a/Sankore-3.1/src/core/UBDocumentManager.h
+++ b/Sankore-3.1/src/core/UBDocumentManager.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOCUMENTMANAGER_H_
#define UBDOCUMENTMANAGER_H_
@@ -29,10 +30,9 @@ class UBExportAdaptor;
class UBImportAdaptor;
class UBDocumentProxy;
-
class UBDocumentManager : public QObject
{
- Q_OBJECT;
+ Q_OBJECT
public:
static UBDocumentManager* documentManager();
@@ -41,6 +41,7 @@ class UBDocumentManager : public QObject
QString importFileFilter();
QStringList importFileExtensions();
+ QFileInfoList importUbx(const QString &Incomingfile, const QString &destination);
UBDocumentProxy* importFile(const QFile& pFile, const QString& pGroup);
int addFilesToDocument(UBDocumentProxy* pDocument, QStringList fileNames);
diff --git a/Sankore-3.1/src/core/UBDownloadManager.cpp b/Sankore-3.1/src/core/UBDownloadManager.cpp
index f56a254..f04f186 100644
--- a/Sankore-3.1/src/core/UBDownloadManager.cpp
+++ b/Sankore-3.1/src/core/UBDownloadManager.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBDownloadManager.h"
#include "core/UBApplication.h"
#include "core/UBPersistenceManager.h"
@@ -31,9 +32,10 @@
#include "core/memcheck.h"
-UBAsyncLocalFileDownloader::UBAsyncLocalFileDownloader(sDownloadFileDesc desc, QObject *parent)
+UBAsyncLocalFileDownloader::UBAsyncLocalFileDownloader(sDownloadFileDesc desc, QByteArray data, QObject *parent)
: QThread(parent)
, mDesc(desc)
+, mData(data)
, m_bAborting(false)
{
@@ -47,13 +49,13 @@ UBAsyncLocalFileDownloader *UBAsyncLocalFileDownloader::download()
void UBAsyncLocalFileDownloader::run()
{
+ mMutex.lock();
+ sDownloadFileDesc descriptor = mDesc;
+ mMutex.unlock();
- if(mDesc.srcUrl.startsWith("file://"))
- mDesc.srcUrl = QUrl(mDesc.srcUrl).toLocalFile();
- else
- mDesc.srcUrl = QUrl::fromLocalFile(mDesc.srcUrl).toLocalFile();
+ descriptor.srcUrl = QUrl::fromUserInput(descriptor.srcUrl).toLocalFile();
- QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(mDesc.srcUrl);
+ QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(descriptor.srcUrl);
int position=mimeType.indexOf(";");
if(position != -1)
@@ -65,20 +67,20 @@ void UBAsyncLocalFileDownloader::run()
QString destDirectory;
if (UBMimeType::Video == itemMimeType)
destDirectory = UBPersistenceManager::videoDirectory;
- else
+ else
if (UBMimeType::Audio == itemMimeType)
destDirectory = UBPersistenceManager::audioDirectory;
- if (mDesc.originalSrcUrl.isEmpty())
- mDesc.originalSrcUrl = mDesc.srcUrl;
+ if (descriptor.originalSrcUrl.isEmpty())
+ descriptor.originalSrcUrl = descriptor.srcUrl;
QString uuid = QUuid::createUuid();
- UBPersistenceManager::persistenceManager()->addFileToDocument(UBApplication::boardController->selectedDocument(),
- mDesc.srcUrl,
- destDirectory,
- uuid,
- mTo,
- NULL);
+ UBPersistenceManager::persistenceManager()->addFileToDocument(UBApplication::boardController->selectedDocument(),
+ descriptor.srcUrl,
+ destDirectory,
+ uuid,
+ mTo,
+ NULL);
if (m_bAborting)
{
@@ -86,7 +88,7 @@ void UBAsyncLocalFileDownloader::run()
QFile::remove(mTo);
}
else
- emit signal_asyncCopyFinished(mDesc.id, !mTo.isEmpty(), QUrl::fromLocalFile(mTo), QUrl(mDesc.originalSrcUrl), "", NULL, mDesc.pos, mDesc.size, mDesc.isBackground);
+ emit signal_asyncCopyFinished(descriptor.id, !mTo.isEmpty(), QUrl::fromLocalFile(mTo), QUrl(descriptor.originalSrcUrl), "", NULL, descriptor.pos, descriptor.size, descriptor.isBackground);
}
void UBAsyncLocalFileDownloader::abort()
@@ -284,11 +286,12 @@ void UBDownloadManager::onDownloadFinished(int id, bool pSuccess, QUrl sourceUrl
desc.contentTypeHeader = pContentTypeHeader;
emit downloadFinished(pSuccess, desc, pData);
- } else if(desc.dest == sDownloadFileDesc::board) {
+ }
+ else if(desc.dest == sDownloadFileDesc::board) {
// The downloaded file is modal so we must put it on the board
- emit addDownloadedFileToBoard(pSuccess, sourceUrl, contentUrl, pContentTypeHeader, pData, pPos, pSize, isBackground);
+ emit addDownloadedFileToBoard(pSuccess, sourceUrl, contentUrl, pContentTypeHeader, pData, pPos, pSize, false, isBackground);
}
- else
+ else if(desc.dest == sDownloadFileDesc::library)
{
emit addDownloadedFileToLibrary(pSuccess, sourceUrl, pContentTypeHeader, pData, desc.name);
}
@@ -379,7 +382,7 @@ void UBDownloadManager::startFileDownload(sDownloadFileDesc desc)
{
if (desc.srcUrl.startsWith("file://") || desc.srcUrl.startsWith("/"))
{
- UBAsyncLocalFileDownloader * cpHelper = new UBAsyncLocalFileDownloader(desc, this);
+ UBAsyncLocalFileDownloader * cpHelper = new UBAsyncLocalFileDownloader(desc, QByteArray(), this);
connect(cpHelper, SIGNAL(signal_asyncCopyFinished(int, bool, QUrl, QUrl, QString, QByteArray, QPointF, QSize, bool)), this, SLOT(onDownloadFinished(int, bool, QUrl, QUrl,QString, QByteArray, QPointF, QSize, bool)));
QObject *res = dynamic_cast<QObject *>(cpHelper->download());
if (!res)
@@ -388,17 +391,18 @@ void UBDownloadManager::startFileDownload(sDownloadFileDesc desc)
mDownloads[desc.id] = res;
}
else
- {
+ {
UBDownloadHttpFile* http = new UBDownloadHttpFile(desc.id, this);
connect(http, SIGNAL(downloadProgress(int, qint64,qint64)), this, SLOT(onDownloadProgress(int,qint64,qint64)));
connect(http, SIGNAL(downloadFinished(int, bool, QUrl, QUrl, QString, QByteArray, QPointF, QSize, bool)), this, SLOT(onDownloadFinished(int, bool, QUrl, QUrl, QString, QByteArray, QPointF, QSize, bool)));
-
+ connect(http, SIGNAL(downloadError(int)), this, SLOT(onDownloadError(int)));
+
//the desc.srcUrl is encoded. So we have to decode it before.
QUrl url;
url.setEncodedUrl(desc.srcUrl.toUtf8());
// We send here the request and store its reply in order to be able to cancel it if needed
mDownloads[desc.id] = dynamic_cast<QObject *>(http->get(url, desc.pos, desc.size, desc.isBackground));
- }
+ }
}
/**
@@ -451,7 +455,7 @@ void UBDownloadManager::cancelDownloads()
if (netReply)
netReply->abort();
else
- {
+ {
UBAsyncLocalFileDownloader *localDownload = dynamic_cast<UBAsyncLocalFileDownloader *>(it.value());
if (localDownload)
localDownload->abort();
@@ -469,20 +473,88 @@ void UBDownloadManager::cancelDownloads()
void UBDownloadManager::onDownloadError(int id)
{
QNetworkReply *pReply = dynamic_cast<QNetworkReply *>(mDownloads.value(id));
-
+
if(NULL != pReply)
{
+ QString errorString = tr("Download failed.");
// Check which error occured:
switch(pReply->error())
{
+ case QNetworkReply::ConnectionRefusedError:
+ errorString += " " + (tr("the remote server refused the connection (the server is not accepting requests)"));
+ break;
+ case QNetworkReply::RemoteHostClosedError:
+ errorString += " " + (tr("the remote server closed the connection prematurely, before the entire reply was received and processed"));
+ break;
+ case QNetworkReply::HostNotFoundError:
+ errorString += " " + (tr("the remote host name was not found (invalid hostname)"));
+ break;
+ case QNetworkReply::TimeoutError:
+ errorString += " " + (tr("the connection to the remote server timed out"));
+ break;
case QNetworkReply::OperationCanceledError:
- // For futur developments: do something in case of download aborting (message? remove the download?)
- break;
-
+ errorString += " " + (tr("the operation was canceled via calls to abort() or close() before it was finished."));
+ break;
+ case QNetworkReply::SslHandshakeFailedError:
+ errorString += " " + (tr("the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted."));
+ break;
+ case QNetworkReply::TemporaryNetworkFailureError:
+ errorString += " " + (tr("the connection was broken due to disconnection from the network, however the system has initiated roaming to another access point. The request should be resubmitted and will be processed as soon as the connection is re-established."));
+ break;
+ case QNetworkReply::ProxyConnectionRefusedError:
+ errorString += " " + (tr("the connection to the proxy server was refused (the proxy server is not accepting requests)"));
+ break;
+ case QNetworkReply::ProxyConnectionClosedError:
+ errorString += " " + (tr("the proxy server closed the connection prematurely, before the entire reply was received and processed"));
+ break;
+ case QNetworkReply::ProxyNotFoundError:
+ errorString += " " + (tr("the proxy host name was not found (invalid proxy hostname)"));
+ break;
+ case QNetworkReply::ProxyTimeoutError:
+ errorString += " " + (tr("the connection to the proxy timed out or the proxy did not reply in time to the request sent"));
+ break;
+ case QNetworkReply::ProxyAuthenticationRequiredError:
+ errorString += " " + (tr("the proxy requires authentication in order to honour the request but did not accept any credentials offered (if any)"));
+ break;
+ case QNetworkReply::ContentAccessDenied:
+ errorString += " " + (tr("the access to the remote content was denied (similar to HTTP error 401)"));
+ break;
+ case QNetworkReply::ContentOperationNotPermittedError:
+ errorString += " " + (tr("the operation requested on the remote content is not permitted"));
+ break;
+ case QNetworkReply::ContentNotFoundError:
+ errorString += " " + (tr("the remote content was not found at the server (similar to HTTP error 404)"));
+ break;
+ case QNetworkReply::AuthenticationRequiredError:
+ errorString += " " + (tr("the remote server requires authentication to serve the content but the credentials provided were not accepted (if any)"));
+ break;
+ case QNetworkReply::ContentReSendError:
+ errorString += " " + (tr("the request needed to be sent again, but this failed for example because the upload data could not be read a second time."));
+ break;
+ case QNetworkReply::ProtocolUnknownError:
+ errorString += " " + (tr("the Network Access API cannot honor the request because the protocol is not known"));
+ break;
+ case QNetworkReply::ProtocolInvalidOperationError:
+ errorString += " " + (tr("the requested operation is invalid for this protocol"));
+ break;
+ case QNetworkReply::UnknownNetworkError:
+ errorString += " " + (tr("an unknown network-related error was detected"));
+ break;
+ case QNetworkReply::UnknownProxyError:
+ errorString += " " + (tr("an unknown proxy-related error was detected"));
+ break;
+ case QNetworkReply::UnknownContentError:
+ errorString += " " + (tr("an unknown error related to the remote content was detected"));
+ break;
+ case QNetworkReply::ProtocolFailure:
+ errorString += " " + (tr("a breakdown in protocol was detected (parsing error, invalid or unexpected responses, etc.)"));
+ break;
default:
// Check the documentation of QNetworkReply in Qt Assistant for the different error cases
break;
}
+ UBApplication::showMessage(errorString);
+ cancelDownload(id);
}
}
@@ -501,7 +573,7 @@ void UBDownloadManager::cancelDownload(int id)
{
if (!mDownloads.size())
return;
-
+
// Stop the download
QNetworkReply *pNetworkDownload = dynamic_cast<QNetworkReply *>(mDownloads[id]);
@@ -513,7 +585,7 @@ void UBDownloadManager::cancelDownload(int id)
if (pLocalDownload)
{
if (pLocalDownload->isRunning())
- pLocalDownload->abort();
+ pLocalDownload->abort();
}
}
diff --git a/Sankore-3.1/src/core/UBDownloadManager.h b/Sankore-3.1/src/core/UBDownloadManager.h
index 22861c1..8e940ca 100644
--- a/Sankore-3.1/src/core/UBDownloadManager.h
+++ b/Sankore-3.1/src/core/UBDownloadManager.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOWNLOADMANAGER_H
#define UBDOWNLOADMANAGER_H
@@ -99,9 +100,9 @@ class UBAsyncLocalFileDownloader : public QThread
{
Q_OBJECT
public:
- UBAsyncLocalFileDownloader(sDownloadFileDesc desc, QObject *parent = 0);
+ UBAsyncLocalFileDownloader(sDownloadFileDesc desc, QByteArray data = QByteArray(), QObject *parent = 0);
- UBAsyncLocalFileDownloader *download();
+ UBAsyncLocalFileDownloader *download();
void run();
void abort();
@@ -111,7 +112,9 @@ signals:
private:
+ QMutex mMutex;
sDownloadFileDesc mDesc;
+ QByteArray mData;
bool m_bAborting;
QString mFrom;
QString mTo;
@@ -139,7 +142,7 @@ signals:
void downloadFinished(bool pSuccess, int id, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData);
void downloadFinished(bool pSuccess, sDownloadFileDesc desc, QByteArray pData);
void downloadModalFinished();
- void addDownloadedFileToBoard(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground);
+ void addDownloadedFileToBoard(bool pSuccess, QUrl sourceUrl, QUrl contentUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isSyncOperation, bool isBackground);
void addDownloadedFileToLibrary(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QString pTitle);
void cancelAllDownloads();
void allDownloadsFinished();
diff --git a/Sankore-3.1/src/core/UBDownloadThread.cpp b/Sankore-3.1/src/core/UBDownloadThread.cpp
index 2563ea3..48e158b 100644
--- a/Sankore-3.1/src/core/UBDownloadThread.cpp
+++ b/Sankore-3.1/src/core/UBDownloadThread.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QDebug>
#include <QNetworkProxy>
#include <QNetworkDiskCache>
diff --git a/Sankore-3.1/src/core/UBDownloadThread.h b/Sankore-3.1/src/core/UBDownloadThread.h
index fbfb27c..a9b3863 100644
--- a/Sankore-3.1/src/core/UBDownloadThread.h
+++ b/Sankore-3.1/src/core/UBDownloadThread.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOWNLOADTHREAD_H
#define UBDOWNLOADTHREAD_H
diff --git a/Sankore-3.1/src/core/UBIdleTimer.cpp b/Sankore-3.1/src/core/UBIdleTimer.cpp
index f874c7e..cc214d4 100644
--- a/Sankore-3.1/src/core/UBIdleTimer.cpp
+++ b/Sankore-3.1/src/core/UBIdleTimer.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBIdleTimer.h"
#include <QApplication>
diff --git a/Sankore-3.1/src/core/UBIdleTimer.h b/Sankore-3.1/src/core/UBIdleTimer.h
index c4ec233..e0963f6 100644
--- a/Sankore-3.1/src/core/UBIdleTimer.h
+++ b/Sankore-3.1/src/core/UBIdleTimer.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBIDLETIMER_H_
#define UBIDLETIMER_H_
diff --git a/Sankore-3.1/src/core/UBMimeData.cpp b/Sankore-3.1/src/core/UBMimeData.cpp
index b0c4a07..dc30098 100644
--- a/Sankore-3.1/src/core/UBMimeData.cpp
+++ b/Sankore-3.1/src/core/UBMimeData.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBMimeData.h"
#include <QtGui>
@@ -60,6 +61,4 @@ UBMimeDataGraphicsItem::UBMimeDataGraphicsItem(QList<UBItem*> pItems)
UBMimeDataGraphicsItem::~UBMimeDataGraphicsItem()
{
- foreach(UBItem* item, mItems)
- delete item;
}
diff --git a/Sankore-3.1/src/core/UBMimeData.h b/Sankore-3.1/src/core/UBMimeData.h
index 59b0432..2e01d32 100644
--- a/Sankore-3.1/src/core/UBMimeData.h
+++ b/Sankore-3.1/src/core/UBMimeData.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBMIMEDATA_H_
#define UBMIMEDATA_H_
diff --git a/Sankore-3.1/src/core/UBPersistenceManager.cpp b/Sankore-3.1/src/core/UBPersistenceManager.cpp
index 62da1ff..e822f72 100644
--- a/Sankore-3.1/src/core/UBPersistenceManager.cpp
+++ b/Sankore-3.1/src/core/UBPersistenceManager.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,10 +20,15 @@
*/
+
#include "UBPersistenceManager.h"
#include "gui/UBMainWindow.h"
#include <QtXml>
+#include <QVariant>
+#include <QDomDocument>
+#include <QXmlStreamWriter>
+#include <QModelIndex>
#include "frameworks/UBPlatformUtils.h"
#include "frameworks/UBFileSystemUtils.h"
@@ -47,6 +52,8 @@
#include "interfaces/IDataStorage.h"
+#include "document/UBDocumentController.h"
+
#include "core/memcheck.h"
const QString UBPersistenceManager::imageDirectory = "images"; // added to UBPersistenceManager::mAllDirectories
@@ -56,6 +63,13 @@ const QString UBPersistenceManager::videoDirectory = "videos"; // added to UBPer
const QString UBPersistenceManager::audioDirectory = "audios"; // added to
const QString UBPersistenceManager::teacherGuideDirectory = "teacherGuideObjects";
+const QString UBPersistenceManager::myDocumentsName = "MyDocuments";
+const QString UBPersistenceManager::modelsName = "Models";
+const QString UBPersistenceManager::untitledDocumentsName = "UntitledDocuments";
+const QString UBPersistenceManager::fFolders = "folders.xml";
+const QString UBPersistenceManager::tFolder = "folder";
+const QString UBPersistenceManager::aName = "name";
+
UBPersistenceManager * UBPersistenceManager::sSingleton = 0;
UBPersistenceManager::UBPersistenceManager(QObject *pParent)
@@ -63,6 +77,8 @@ UBPersistenceManager::UBPersistenceManager(QObject *pParent)
, mHasPurgedDocuments(false)
{
+ xmlFolderStructureFilename = "model";
+
mDocumentSubDirectories << imageDirectory;
mDocumentSubDirectories << objectDirectory;
mDocumentSubDirectories << widgetDirectory;
@@ -70,7 +86,13 @@ UBPersistenceManager::UBPersistenceManager(QObject *pParent)
mDocumentSubDirectories << audioDirectory;
mDocumentSubDirectories << teacherGuideDirectory;
- documentProxies = allDocumentProxies();
+ mDocumentRepositoryPath = UBSettings::userDocumentDirectory();
+ mFoldersXmlStorageName = mDocumentRepositoryPath + "/" + fFolders;
+
+ mDocumentTreeStructureModel = new UBDocumentTreeModel(this);
+ createDocumentProxiesStructure();
+
+
emit proxyListChanged();
}
@@ -93,56 +115,189 @@ void UBPersistenceManager::destroy()
UBPersistenceManager::~UBPersistenceManager()
{
- foreach(QPointer<UBDocumentProxy> proxyGuard, documentProxies)
- {
- if (!proxyGuard.isNull())
- delete proxyGuard.data();
- }
}
-QList<QPointer<UBDocumentProxy> > UBPersistenceManager::allDocumentProxies()
+void UBPersistenceManager::createDocumentProxiesStructure(bool interactive)
{
mDocumentRepositoryPath = UBSettings::userDocumentDirectory();
QDir rootDir(mDocumentRepositoryPath);
rootDir.mkpath(rootDir.path());
+ QFileInfoList contentList = rootDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Time | QDir::Reversed);
+ createDocumentProxiesStructure(contentList, interactive);
+
+ if (QFileInfo(mFoldersXmlStorageName).exists()) {
+ QDomDocument xmlDom;
+ QFile inFile(mFoldersXmlStorageName);
+ if (inFile.open(QIODevice::ReadOnly)) {
+ QString domString(inFile.readAll());
+
+ int errorLine = 0; int errorColumn = 0;
+ QString errorStr;
+
+ if (xmlDom.setContent(domString, &errorStr, &errorLine, &errorColumn)) {
+ loadFolderTreeFromXml("", xmlDom.firstChildElement());
+ } else {
+ qDebug() << "Error reading content of " << mFoldersXmlStorageName << endl
+ << "Error:" << inFile.errorString()
+ << "Line:" << errorLine
+ << "Column:" << errorColumn;
+ }
+ inFile.close();
+ } else {
+ qDebug() << "Error reading" << mFoldersXmlStorageName << endl
+ << "Error:" << inFile.errorString();
+ }
+ }
+}
- QFileSystemWatcher* watcher = new QFileSystemWatcher(this);
- watcher->addPath(mDocumentRepositoryPath);
-
- connect(watcher, SIGNAL(directoryChanged(const QString&)), this, SLOT(documentRepositoryChanged(const QString&)));
-
- QList<QPointer<UBDocumentProxy> > proxies;
-
- foreach(QString path, rootDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot,
- QDir::Time | QDir::Reversed))
+void UBPersistenceManager::createDocumentProxiesStructure(const QFileInfoList &contentInfo, bool interactive)
+{
+ foreach(QFileInfo path, contentInfo)
{
- QString fullPath = rootDir.path() + "/" + path;
+ QString fullPath = path.absoluteFilePath();
QDir dir(fullPath);
if (dir.entryList(QDir::Files | QDir::NoDotAndDotDot).size() > 0)
{
- UBDocumentProxy* proxy = new UBDocumentProxy(fullPath); // deleted in UBPersistenceManager::destructor
-
QMap<QString, QVariant> metadatas = UBMetadataDcSubsetAdaptor::load(fullPath);
+ QString docGroupName = metadatas.value(UBSettings::documentGroupName, QString()).toString();
+ QString docName = metadatas.value(UBSettings::documentName, QString()).toString();
- foreach(QString key, metadatas.keys())
- {
- proxy->setMetaData(key, metadatas.value(key));
+ if (docName.isEmpty()) {
+ qDebug() << "Group name and document name are empty in UBPersistenceManager::createDocumentProxiesStructure()";
+ continue;
}
- proxy->setPageCount(sceneCount(proxy));
+ QModelIndex parentIndex = mDocumentTreeStructureModel->goTo(docGroupName);
+ if (!parentIndex.isValid()) {
+ return;
+ }
- proxies << QPointer<UBDocumentProxy>(proxy);
+ UBDocumentProxy* docProxy = new UBDocumentProxy(fullPath); // managed in UBDocumentTreeNode
+ foreach(QString key, metadatas.keys()) {
+ docProxy->setMetaData(key, metadatas.value(key));
+ }
+ docProxy->setPageCount(sceneCount(docProxy));
+ bool addDoc = false;
+ if (!interactive) {
+ addDoc = true;
+ } else if (processInteractiveReplacementDialog(docProxy) == QDialog::Accepted) {
+ addDoc = true;
+ }
+ if (addDoc) {
+ mDocumentTreeStructureModel->addDocument(docProxy, parentIndex);
+ }
}
}
+}
- return proxies;
+QDialog::DialogCode UBPersistenceManager::processInteractiveReplacementDialog(UBDocumentProxy *pProxy)
+{
+ //TODO claudio remove this hack necessary on double click on ubz file
+ Qt::CursorShape saveShape;
+ if(UBApplication::overrideCursor()){
+ saveShape = UBApplication::overrideCursor()->shape();
+ UBApplication::overrideCursor()->setShape(Qt::ArrowCursor);
+ }
+ else
+ saveShape = Qt::ArrowCursor;
+
+ QDialog::DialogCode result = QDialog::Rejected;
+
+ if (UBApplication::documentController
+ && UBApplication::documentController->mainWidget()) {
+ QString docGroupName = pProxy->metaData(UBSettings::documentGroupName).toString();
+ QModelIndex parentIndex = mDocumentTreeStructureModel->goTo(docGroupName);
+ if (!parentIndex.isValid()) {
+ UBApplication::overrideCursor()->setShape(saveShape);
+ return QDialog::Rejected;
+ }
+
+ QStringList docList = mDocumentTreeStructureModel->nodeNameList(parentIndex);
+ QString docName = pProxy->metaData(UBSettings::documentName).toString();
+
+ if (docList.contains(docName)) {
+ UBDocumentReplaceDialog *replaceDialog = new UBDocumentReplaceDialog(docName
+ , docList
+ , /*UBApplication::documentController->mainWidget()*/0
+ , Qt::Widget);
+ if (replaceDialog->exec() == QDialog::Accepted) {
+ result = QDialog::Accepted;
+ QString resultName = replaceDialog->lineEditText();
+ int i = docList.indexOf(resultName);
+ if (i != -1) { //replace
+ QModelIndex replaceIndex = mDocumentTreeStructureModel->index(i, 0, parentIndex);
+ UBDocumentProxy *replaceProxy = mDocumentTreeStructureModel->proxyData(replaceIndex);
+ if (replaceProxy) {
+ deleteDocument(replaceProxy);
+ }
+ if (replaceIndex.isValid()) {
+ mDocumentTreeStructureModel->removeRow(i, parentIndex);
+ }
+ }
+ pProxy->setMetaData(UBSettings::documentName, resultName);
+ }
+ replaceDialog->setParent(0);
+ delete replaceDialog;
+ } else {
+ result = QDialog::Accepted;
+ }
+ }
+ //TODO claudio the if is an hack
+ if(UBApplication::overrideCursor())
+ UBApplication::overrideCursor()->setShape(saveShape);
+
+ return result;
+}
+
+QString UBPersistenceManager::adjustDocumentVirtualPath(const QString &str)
+{
+ QStringList pathList = str.split("/", QString::SkipEmptyParts);
+
+ if (pathList.isEmpty()) {
+ pathList.append(myDocumentsName);
+ pathList.append(untitledDocumentsName);
+ }
+
+ if (pathList.first() != myDocumentsName
+ && pathList.first() != UBSettings::trashedDocumentGroupNamePrefix
+ && pathList.first() != modelsName) {
+ pathList.prepend(myDocumentsName);
+ }
+
+ return pathList.join("/");
}
+void UBPersistenceManager::closing()
+{
+ QDir rootDir(mDocumentRepositoryPath);
+ rootDir.mkpath(rootDir.path());
+
+ QFile outFile(mFoldersXmlStorageName);
+ if (outFile.open(QIODevice::WriteOnly)) {
+ QXmlStreamWriter writer(&outFile);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument();
+ writer.writeStartElement("content");
+ saveFoldersTreeToXml(writer, QModelIndex());
+ writer.writeEndElement();
+ writer.writeEndDocument();
+
+ outFile.close();
+ } else {
+ qDebug() << "failed to open document" << mFoldersXmlStorageName << "for writing" << endl
+ << "Error string:" << outFile.errorString();
+ }
+}
+
+bool UBPersistenceManager::isSceneInCached(UBDocumentProxy *proxy, int index) const
+{
+ return mSceneCache.contains(proxy, index);
+}
QStringList UBPersistenceManager::allShapes()
{
@@ -238,11 +393,22 @@ QStringList UBPersistenceManager::allWidgets(const QDir& dir)
}
-UBDocumentProxy* UBPersistenceManager::createDocument(const QString& pGroupName, const QString& pName, bool withEmptyPage)
+UBDocumentProxy* UBPersistenceManager::createDocument(const QString& pGroupName
+ , const QString& pName
+ , bool withEmptyPage
+ , QString directory
+ , int pageCount
+ , bool promptDialogIfExists)
{
- checkIfDocumentRepositoryExists();
-
- UBDocumentProxy *doc = new UBDocumentProxy(); // deleted in UBPersistenceManager::destructor
+ UBDocumentProxy *doc;
+ if(directory.length() != 0 ){
+ doc = new UBDocumentProxy(directory); // deleted in UBPersistenceManager::destructor
+ doc->setPageCount(pageCount);
+ }
+ else{
+ checkIfDocumentRepositoryExists();
+ doc = new UBDocumentProxy();
+ }
if (pGroupName.length() > 0)
{
@@ -261,18 +427,44 @@ UBDocumentProxy* UBPersistenceManager::createDocument(const QString& pGroupName,
if (withEmptyPage) createDocumentSceneAt(doc, 0);
- documentProxies.insert(0, QPointer<UBDocumentProxy>(doc));
-
- emit proxyListChanged();
+ bool addDoc = false;
+ if (!promptDialogIfExists) {
+ addDoc = true;
+ } else if (processInteractiveReplacementDialog(doc) == QDialog::Accepted) {
+ addDoc = true;
+ }
+ if (addDoc) {
+ mDocumentTreeStructureModel->addDocument(doc);
+ emit proxyListChanged();
+ } else {
+ deleteDocument(doc);
+ doc = 0;
+ }
- emit documentCreated(doc);
+ return doc;
+}
- mDocumentCreatedDuringSession << doc;
+UBDocumentProxy* UBPersistenceManager::createNewDocument(const QString& pGroupName
+ , const QString& pName
+ , bool withEmptyPage
+ , QString directory
+ , int pageCount
+ , bool promptDialogIfExists)
+{
+ UBDocumentProxy *resultDoc = createDocument(pGroupName, pName, withEmptyPage, directory, pageCount, promptDialogIfExists);
+ if (resultDoc) {
+ mDocumentTreeStructureModel->markDocumentAsNew(resultDoc);
+ }
- return doc;
+ return resultDoc;
}
-UBDocumentProxy* UBPersistenceManager::createDocumentFromDir(const QString& pDocumentDirectory, const QString& pGroupName, const QString& pName, bool withEmptyPage, bool addTitlePage)
+UBDocumentProxy* UBPersistenceManager::createDocumentFromDir(const QString& pDocumentDirectory
+ , const QString& pGroupName
+ , const QString& pName
+ , bool withEmptyPage
+ , bool addTitlePage
+ , bool promptDialogIfExists)
{
checkIfDocumentRepositoryExists();
@@ -307,11 +499,21 @@ UBDocumentProxy* UBPersistenceManager::createDocumentFromDir(const QString& pDoc
UBSvgSubsetAdaptor::setSceneUuid(doc, i, QUuid::createUuid());
}
- documentProxies << QPointer<UBDocumentProxy>(doc);
-
- emit proxyListChanged();
-
- emit documentCreated(doc);
+ //work around the
+ bool addDoc = false;
+ if (!promptDialogIfExists) {
+ addDoc = true;
+ } else if (processInteractiveReplacementDialog(doc) == QDialog::Accepted) {
+ addDoc = true;
+ }
+ if (addDoc) {
+ mDocumentTreeStructureModel->addDocument(doc);
+ emit proxyListChanged();
+ emit documentCreated(doc);
+ } else {
+ deleteDocument(doc);
+ doc = 0;
+ }
return doc;
}
@@ -323,20 +525,14 @@ void UBPersistenceManager::deleteDocument(UBDocumentProxy* pDocumentProxy)
emit documentWillBeDeleted(pDocumentProxy);
+ Q_ASSERT(QFileInfo(pDocumentProxy->persistencePath()).exists());
UBFileSystemUtils::deleteDir(pDocumentProxy->persistencePath());
- documentProxies.removeAll(QPointer<UBDocumentProxy>(pDocumentProxy));
- mDocumentCreatedDuringSession.removeAll(pDocumentProxy);
-
mSceneCache.removeAllScenes(pDocumentProxy);
pDocumentProxy->deleteLater();
-
- emit proxyListChanged();
-
}
-
UBDocumentProxy* UBPersistenceManager::duplicateDocument(UBDocumentProxy* pDocumentProxy)
{
checkIfDocumentRepositoryExists();
@@ -367,8 +563,6 @@ UBDocumentProxy* UBPersistenceManager::duplicateDocument(UBDocumentProxy* pDocum
copy->setPageCount(sceneCount(copy));
- documentProxies << QPointer<UBDocumentProxy>(copy);
-
emit proxyListChanged();
emit documentCreated(copy);
@@ -408,7 +602,7 @@ void UBPersistenceManager::deleteDocumentScenes(UBDocumentProxy* proxy, const QL
QString sourceGroupName = proxy->metaData(UBSettings::documentGroupName).toString();
QString sourceName = proxy->metaData(UBSettings::documentName).toString();
- UBDocumentProxy *trashDocProxy = createDocument(UBSettings::trashedDocumentGroupNamePrefix + sourceGroupName, sourceName, false);
+ UBDocumentProxy *trashDocProxy = createDocument(UBSettings::trashedDocumentGroupNamePrefix/* + sourceGroupName*/, sourceName, false);
foreach(int index, compactedIndexes)
{
@@ -600,6 +794,11 @@ UBGraphicsScene* UBPersistenceManager::loadDocumentScene(UBDocumentProxy* proxy,
}
}
+void UBPersistenceManager::reassignDocProxy(UBDocumentProxy *newDocument, UBDocumentProxy *oldDocument)
+{
+ return mSceneCache.reassignDocProxy(newDocument, oldDocument);
+}
+
void UBPersistenceManager::persistDocumentScene(UBDocumentProxy* pDocumentProxy, UBGraphicsScene* pScene, const int pSceneIndex)
{
checkIfDocumentRepositoryExists();
@@ -614,7 +813,7 @@ void UBPersistenceManager::persistDocumentScene(UBDocumentProxy* pDocumentProxy,
UBBoardPaletteManager* paletteManager = UBApplication::boardController->paletteManager();
bool teacherGuideModified = false;
if(UBApplication::app()->boardController->currentPage() == pSceneIndex && paletteManager->teacherGuideDockWidget())
- teacherGuideModified = paletteManager->teacherGuideDockWidget()->teacherGuideWidget()->isModified();
+ teacherGuideModified = paletteManager->teacherGuideDockWidget()->teacherGuideWidget()->isModified();
if (pDocumentProxy->isModified() || teacherGuideModified)
UBMetadataDcSubsetAdaptor::persist(pDocumentProxy);
@@ -760,7 +959,7 @@ bool UBPersistenceManager::addDirectoryContentToDocument(const QString& document
foreach(QString dir, mDocumentSubDirectories)
{
qDebug() << "copying " << documentRootFolder << "/" << dir << " to " << pDocument->persistencePath() << "/" + dir;
-
+
QDir srcDir(documentRootFolder + "/" + dir);
if (srcDir.exists())
if (!UBFileSystemUtils::copyDir(documentRootFolder + "/" + dir, pDocument->persistencePath() + "/" + dir))
@@ -773,48 +972,6 @@ bool UBPersistenceManager::addDirectoryContentToDocument(const QString& document
}
-void UBPersistenceManager::upgradeDocumentIfNeeded(UBDocumentProxy* pDocumentProxy)
-{
- int pageCount = pDocumentProxy->pageCount();
-
- for(int index = 0 ; index < pageCount; index++)
- {
- UBSvgSubsetAdaptor::upgradeScene(pDocumentProxy, index);
- }
-
- pDocumentProxy->setMetaData(UBSettings::documentVersion, UBSettings::currentFileVersion);
-
- UBMetadataDcSubsetAdaptor::persist(pDocumentProxy);
-}
-
-
-void UBPersistenceManager::upgradeAllDocumentsIfNeeded()
-{
- foreach(QPointer<UBDocumentProxy> proxy, documentProxies)
- {
- upgradeDocumentIfNeeded(proxy);
- }
-}
-
-
-
-UBDocumentProxy* UBPersistenceManager::documentByUuid(const QUuid& pUuid)
-{
- for(int i = 0 ; i < documentProxies.length(); i++)
- {
- UBDocumentProxy* proxy = documentProxies.at(i);
-
- if (proxy && proxy->uuid() == pUuid)
- {
- return proxy;
- }
- }
-
- return 0;
-
-}
-
-
bool UBPersistenceManager::isEmpty(UBDocumentProxy* pDocumentProxy)
{
if(!pDocumentProxy)
@@ -843,24 +1000,27 @@ bool UBPersistenceManager::isEmpty(UBDocumentProxy* pDocumentProxy)
void UBPersistenceManager::purgeEmptyDocuments()
{
- if(!mHasPurgedDocuments) // hack to workaround the fact that app closing is called twice :-(
- {
- QList<UBDocumentProxy*> toBeDeleted;
+ QList<UBDocumentProxy*> toBeDeleted;
- foreach(UBDocumentProxy* docProxy, mDocumentCreatedDuringSession)
- {
- if (isEmpty(docProxy))
- {
- toBeDeleted << docProxy;
- }
- }
-
- foreach(UBDocumentProxy* docProxy, toBeDeleted)
+ foreach(UBDocumentProxy* docProxy, mDocumentTreeStructureModel->newDocuments())
+ {
+ if (isEmpty(docProxy)
+ && !docProxy->metaData("sessionTitle").toString().size()
+ && !docProxy->metaData("sessionAuthors").toString().size()
+ && !docProxy->metaData("sessionObjectives").toString().size()
+ && !docProxy->metaData("sessionKeywords").toString().size()
+ && !docProxy->metaData("sessionGradeLevel").toString().size()
+ && !docProxy->metaData("sessionSubjects").toString().size()
+ && !docProxy->metaData("sessionType").toString().size()
+ )
{
- deleteDocument(docProxy);
+ toBeDeleted << docProxy;
}
+ }
- mHasPurgedDocuments = true;
+ foreach(UBDocumentProxy* docProxy, toBeDeleted)
+ {
+ deleteDocument(docProxy);
}
}
@@ -872,7 +1032,7 @@ QString UBPersistenceManager::teacherGuideAbsoluteObjectPath(UBDocumentProxy* pD
QString UBPersistenceManager::addObjectToTeacherGuideDirectory(UBDocumentProxy* pDocumentProxy, QString pPath)
{
QString path = UBFileSystemUtils::removeLocalFilePrefix(pPath);
- QFileInfo fi(path);
+ QFileInfo fi(path);
QString uuid = QUuid::createUuid();
if (!fi.exists() || !pDocumentProxy)
@@ -922,8 +1082,8 @@ QString UBPersistenceManager::addWidgetToTeacherGuideDirectory(UBDocumentProxy*
return destPath;
}
-bool UBPersistenceManager::addFileToDocument(UBDocumentProxy* pDocumentProxy,
- QString path,
+bool UBPersistenceManager::addFileToDocument(UBDocumentProxy* pDocumentProxy,
+ QString path,
const QString& subdir,
QUuid objectUuid,
QString& destinationPath,
@@ -974,12 +1134,12 @@ bool UBPersistenceManager::addFileToDocument(UBDocumentProxy* pDocumentProxy,
}
else
{
- return false;
+ return false;
}
}
-bool UBPersistenceManager::addGraphicsWidgteToDocument(UBDocumentProxy *pDocumentProxy,
- QString path,
+bool UBPersistenceManager::addGraphicsWidgetToDocument(UBDocumentProxy *pDocumentProxy,
+ QString path,
QUuid objectUuid,
QString& destinationPath)
{
@@ -1028,6 +1188,42 @@ void UBPersistenceManager::checkIfDocumentRepositoryExists()
}
}
+void UBPersistenceManager::saveFoldersTreeToXml(QXmlStreamWriter &writer, const QModelIndex &parentIndex)
+{
+ for (int i = 0; i < mDocumentTreeStructureModel->rowCount(parentIndex); i++)
+ {
+ QModelIndex currentIndex = mDocumentTreeStructureModel->index(i, 0, parentIndex);
+ if (mDocumentTreeStructureModel->isCatalog(currentIndex))
+ {
+ writer.writeStartElement(tFolder);
+ writer.writeAttribute(aName, mDocumentTreeStructureModel->nodeFromIndex(currentIndex)->nodeName());
+ saveFoldersTreeToXml(writer, currentIndex);
+ writer.writeEndElement();
+ }
+ }
+}
+
+void UBPersistenceManager::loadFolderTreeFromXml(const QString &path, const QDomElement &element)
+{
+
+ QDomElement iterElement = element.firstChildElement();
+ while(!iterElement.isNull())
+ {
+ QString leafPath;
+ if (tFolder == iterElement.tagName())
+ {
+ leafPath = iterElement.attribute(aName);
+
+ if (!leafPath.isEmpty())
+ {
+ mDocumentTreeStructureModel->goTo(path + "/" + leafPath);
+ if (!iterElement.firstChildElement().isNull())
+ loadFolderTreeFromXml(path + "/" + leafPath, iterElement);
+ }
+ }
+ iterElement = iterElement.nextSiblingElement();
+ }
+}
bool UBPersistenceManager::mayHaveVideo(UBDocumentProxy* pDocumentProxy)
{
diff --git a/Sankore-3.1/src/core/UBPersistenceManager.h b/Sankore-3.1/src/core/UBPersistenceManager.h
index b306bc8..5f4e763 100644
--- a/Sankore-3.1/src/core/UBPersistenceManager.h
+++ b/Sankore-3.1/src/core/UBPersistenceManager.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBPERSISTENCEMANAGER_H_
#define UBPERSISTENCEMANAGER_H_
@@ -27,9 +28,13 @@
#include "UBSceneCache.h"
+class QDomNode;
+class QDomElement;
class UBDocument;
class UBDocumentProxy;
class UBGraphicsScene;
+class UBDocumentTreeNode;
+class UBDocumentTreeModel;
class UBPersistenceManager : public QObject
{
@@ -50,11 +55,36 @@ class UBPersistenceManager : public QObject
static const QString widgetDirectory;
static const QString teacherGuideDirectory;
+ static const QString myDocumentsName;
+ static const QString modelsName;
+ static const QString untitledDocumentsName;
+ static const QString fFolders;
+ static const QString tFolder;
+ static const QString aName;
+
static UBPersistenceManager* persistenceManager();
static void destroy();
- virtual UBDocumentProxy* createDocument(const QString& pGroupName = "", const QString& pName = "", bool withEmptyPage = true);
- virtual UBDocumentProxy* createDocumentFromDir(const QString& pDocumentDirectory, const QString& pGroupName = "", const QString& pName = "", bool withEmptyPage = false, bool addTitlePage = false);
+ virtual UBDocumentProxy* createDocument(const QString& pGroupName = ""
+ , const QString& pName = ""
+ , bool withEmptyPage = true
+ , QString directory =QString()
+ , int pageCount = 0
+ , bool promptDialogIfExists = false);
+
+ virtual UBDocumentProxy *createNewDocument(const QString& pGroupName = ""
+ , const QString& pName = ""
+ , bool withEmptyPage = true
+ , QString directory =QString()
+ , int pageCount = 0
+ , bool promptDialogIfExists = false);
+
+ virtual UBDocumentProxy* createDocumentFromDir(const QString& pDocumentDirectory
+ , const QString& pGroupName = ""
+ , const QString& pName = ""
+ , bool withEmptyPage = false
+ , bool addTitlePage = false
+ , bool promptDialogIfExists = false);
virtual UBDocumentProxy* persistDocumentMetadata(UBDocumentProxy* pDocumentProxy);
@@ -77,8 +107,11 @@ class UBPersistenceManager : public QObject
virtual UBGraphicsScene* loadDocumentScene(UBDocumentProxy* pDocumentProxy, int sceneIndex);
UBGraphicsScene *getDocumentScene(UBDocumentProxy* pDocumentProxy, int sceneIndex) {return mSceneCache.value(pDocumentProxy, sceneIndex);}
+ void reassignDocProxy(UBDocumentProxy *newDocument, UBDocumentProxy *oldDocument);
- QList<QPointer<UBDocumentProxy> > documentProxies;
+// QList<QPointer<UBDocumentProxy> > documentProxies;
+ UBDocumentTreeNode *mDocumentTreeStructure;
+ UBDocumentTreeModel *mDocumentTreeStructureModel;
virtual QStringList allShapes();
virtual QStringList allGips();
@@ -95,11 +128,9 @@ class UBPersistenceManager : public QObject
bool addDirectoryContentToDocument(const QString& documentRootFolder, UBDocumentProxy* pDocument);
- virtual void upgradeDocumentIfNeeded(UBDocumentProxy* pDocumentProxy);
-
- virtual void upgradeAllDocumentsIfNeeded();
-
- virtual UBDocumentProxy* documentByUuid(const QUuid& pUuid);
+ void createDocumentProxiesStructure(bool interactive = false);
+ void createDocumentProxiesStructure(const QFileInfoList &contentInfo, bool interactive = false);
+ QDialog::DialogCode processInteractiveReplacementDialog(UBDocumentProxy *pProxy);
QStringList documentSubDirectories()
{
@@ -109,7 +140,7 @@ class UBPersistenceManager : public QObject
virtual bool isEmpty(UBDocumentProxy* pDocumentProxy);
virtual void purgeEmptyDocuments();
- bool addGraphicsWidgteToDocument(UBDocumentProxy *mDocumentProxy, QString path, QUuid objectUuid, QString& destinationPath);
+ bool addGraphicsWidgetToDocument(UBDocumentProxy *mDocumentProxy, QString path, QUuid objectUuid, QString& destinationPath);
bool addFileToDocument(UBDocumentProxy* pDocumentProxy, QString path, const QString& subdir, QUuid objectUuid, QString& destinationPath, QByteArray* data = NULL);
bool mayHaveVideo(UBDocumentProxy* pDocumentProxy);
@@ -118,6 +149,11 @@ class UBPersistenceManager : public QObject
bool mayHaveSVGImages(UBDocumentProxy* pDocumentProxy);
bool mayHaveWidget(UBDocumentProxy* pDocumentProxy);
+ QString adjustDocumentVirtualPath(const QString &str);
+
+ void closing();
+ bool isSceneInCached(UBDocumentProxy *proxy, int index) const;
+
signals:
void proxyListChanged();
@@ -129,37 +165,28 @@ class UBPersistenceManager : public QObject
void documentSceneCreated(UBDocumentProxy* pDocumentProxy, int pIndex);
void documentSceneWillBeDeleted(UBDocumentProxy* pDocumentProxy, int pIndex);
- private:
-
+private:
int sceneCount(const UBDocumentProxy* pDocumentProxy);
-
static QStringList getSceneFileNames(const QString& folder);
-
- QList<QPointer<UBDocumentProxy> > allDocumentProxies();
-
void renamePage(UBDocumentProxy* pDocumentProxy,
- const int sourceIndex, const int targetIndex);
-
+ const int sourceIndex, const int targetIndex);
void copyPage(UBDocumentProxy* pDocumentProxy,
- const int sourceIndex, const int targetIndex);
-
+ const int sourceIndex, const int targetIndex);
void generatePathIfNeeded(UBDocumentProxy* pDocumentProxy);
-
void checkIfDocumentRepositoryExists();
- UBSceneCache mSceneCache;
+ void saveFoldersTreeToXml(QXmlStreamWriter &writer, const QModelIndex &parentIndex);
+ void loadFolderTreeFromXml(const QString &path, const QDomElement &element);
- QStringList mDocumentSubDirectories;
+ QString xmlFolderStructureFilename;
+ UBSceneCache mSceneCache;
+ QStringList mDocumentSubDirectories;
QMutex mDeletedListMutex;
-
bool mHasPurgedDocuments;
-
- QList<UBDocumentProxy*> mDocumentCreatedDuringSession;
-
QString mDocumentRepositoryPath;
-
QHash<int,QString>teacherBarNodeString;
+ QString mFoldersXmlStorageName;
private slots:
void documentRepositoryChanged(const QString& path);
diff --git a/Sankore-3.1/src/core/UBPreferencesController.cpp b/Sankore-3.1/src/core/UBPreferencesController.cpp
index 15fd16e..ac51948 100644
--- a/Sankore-3.1/src/core/UBPreferencesController.cpp
+++ b/Sankore-3.1/src/core/UBPreferencesController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBPreferencesController.h"
#include "UBSettings.h"
@@ -118,6 +119,8 @@ void UBPreferencesController::wire()
connect(mPreferencesUI->closeButton, SIGNAL(released()), this, SLOT(close()));
connect(mPreferencesUI->defaultSettingsButton, SIGNAL(released()), this, SLOT(defaultSettings()));
+ connect(mPreferencesUI->startupTipsCheckBox,SIGNAL(clicked(bool)),this,SLOT(onStartupTipsClicked(bool)));
+
// OSK preferences
@@ -199,6 +202,8 @@ void UBPreferencesController::init()
break;
}
+ mPreferencesUI->startupTipsCheckBox->setChecked(settings->appStartupHintsEnabled->get().toBool());
+
mPreferencesUI->startModeComboBox->setCurrentIndex(settings->appStartMode->get().toInt());
mPreferencesUI->useExternalBrowserCheckBox->setChecked(settings->webUseExternalBrowser->get().toBool());
@@ -236,6 +241,72 @@ void UBPreferencesController::init()
mPreferencesUI->PSCredentialsPersistenceCheckBox->setChecked(settings->getCommunityDataPersistence());
persistanceCheckboxUpdate();
+ mIsoCodeAndLanguage.insert(tr("Default"),"NO_VALUE");
+ mIsoCodeAndLanguage.insert(tr("Arabic"),"ar");
+ mIsoCodeAndLanguage.insert(tr("Basque"),"eu");
+ mIsoCodeAndLanguage.insert(tr("Bulgarian"),"bg");
+ mIsoCodeAndLanguage.insert(tr("Catalan"),"ca");
+ mIsoCodeAndLanguage.insert(tr("Corsican"),"co");
+ mIsoCodeAndLanguage.insert(tr("Czech"),"cs");
+ mIsoCodeAndLanguage.insert(tr("Danish"),"da");
+ mIsoCodeAndLanguage.insert(tr("German"),"de");
+ mIsoCodeAndLanguage.insert(tr("Greek"),"el");
+ mIsoCodeAndLanguage.insert(tr("English"),"en");
+ mIsoCodeAndLanguage.insert(tr("English UK"),"en_UK");
+ mIsoCodeAndLanguage.insert(tr("Spanish"),"es");
+ mIsoCodeAndLanguage.insert(tr("French"),"fr");
+ mIsoCodeAndLanguage.insert(tr("Swiss French"),"fr_CH");
+ mIsoCodeAndLanguage.insert(tr("Hindi"),"hi");
+ mIsoCodeAndLanguage.insert(tr("Italian"),"it");
+ mIsoCodeAndLanguage.insert(tr("Hebrew"),"iw");
+ mIsoCodeAndLanguage.insert(tr("Japanese"),"ja");
+ mIsoCodeAndLanguage.insert(tr("Korean"),"ko");
+ mIsoCodeAndLanguage.insert(tr("Malagasy"),"mg");
+ mIsoCodeAndLanguage.insert(tr("Norwegian"),"nb");
+ mIsoCodeAndLanguage.insert(tr("Dutch"),"nl");
+ mIsoCodeAndLanguage.insert(tr("Polish"),"pl");
+ mIsoCodeAndLanguage.insert(tr("Portuguese"),"pt");
+ mIsoCodeAndLanguage.insert(tr("Romansh"),"rm");
+ mIsoCodeAndLanguage.insert(tr("Romanian"),"ro");
+ mIsoCodeAndLanguage.insert(tr("Russian"),"ru");
+ mIsoCodeAndLanguage.insert(tr("Slovak"),"sk");
+ mIsoCodeAndLanguage.insert(tr("Swedish"),"sv");
+ mIsoCodeAndLanguage.insert(tr("Turkish"),"tr");
+ mIsoCodeAndLanguage.insert(tr("Chinese"),"zh");
+ mIsoCodeAndLanguage.insert(tr("Chinese Simplified"),"zh_CN");
+ mIsoCodeAndLanguage.insert(tr("Chinese Traditional"),"zh_TW");
+
+ QStringList list;
+ list << mIsoCodeAndLanguage.keys();
+ list.sort();
+ mPreferencesUI->languageComboBox->addItems(list);
+ QString currentIsoLanguage = UBSettings::settings()->appPreferredLanguage->get().toString();
+ if(currentIsoLanguage.length()){
+ QString language;
+ foreach(QString eachKey, mIsoCodeAndLanguage.keys())
+ if(mIsoCodeAndLanguage[eachKey] == currentIsoLanguage)
+ language = eachKey;
+ mPreferencesUI->languageComboBox->setCurrentIndex(list.indexOf(language));
+ }
+ else
+ mPreferencesUI->languageComboBox->setCurrentIndex(list.indexOf("Default"));
+
+ connect(mPreferencesUI->languageComboBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(onLanguageChanged(QString)));
+ connect(mPreferencesUI->quitOpenSankorePushButton,SIGNAL(clicked()),UBApplication::app(),SLOT(closing()));
+ mPreferencesUI->quitOpenSankorePushButton->setDisabled(true);
+
+}
+
+void UBPreferencesController::onStartupTipsClicked(bool clicked)
+{
+ UBSettings::settings()->appStartupHintsEnabled->setBool(clicked);
+}
+
+void UBPreferencesController::onLanguageChanged(QString currentItem)
+{
+ QString isoCode = mIsoCodeAndLanguage[currentItem] == "NO_VALUE" ? "" : mIsoCodeAndLanguage[currentItem];
+ UBSettings::settings()->appPreferredLanguage->setString(isoCode);
+ mPreferencesUI->quitOpenSankorePushButton->setEnabled(true);
}
void UBPreferencesController::onCommunityUsernameChanged()
@@ -325,6 +396,7 @@ void UBPreferencesController::defaultSettings()
mPreferencesUI->verticalChoice->setChecked(settings->appToolBarOrientationVertical->reset().toBool());
mPreferencesUI->horizontalChoice->setChecked(!settings->appToolBarOrientationVertical->reset().toBool());
mPreferencesUI->startModeComboBox->setCurrentIndex(0);
+ onLanguageChanged("Default");
}
else if (mPreferencesUI->mainTabWidget->currentWidget() == mPreferencesUI->penTab)
{
diff --git a/Sankore-3.1/src/core/UBPreferencesController.h b/Sankore-3.1/src/core/UBPreferencesController.h
index b82b00c..aa3212d 100644
--- a/Sankore-3.1/src/core/UBPreferencesController.h
+++ b/Sankore-3.1/src/core/UBPreferencesController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBPREFERENCESCONTROLLER_H_
#define UBPREFERENCESCONTROLLER_H_
@@ -73,6 +74,8 @@ class UBPreferencesController : public QObject
void wire();
void init();
+ QMap<QString,QString>mIsoCodeAndLanguage;
+
UBPreferencesDialog* mPreferencesWindow;
Ui::preferencesDialog* mPreferencesUI;
UBBrushPropertiesFrame* mPenProperties;
@@ -91,6 +94,8 @@ class UBPreferencesController : public QObject
void onCommunityUsernameChanged();
void onCommunityPasswordChanged();
void onCommunityPersistenceChanged();
+ void onLanguageChanged(QString currentItem);
+ void onStartupTipsClicked(bool clicked);
private slots:
void adjustScreens(int screen);
diff --git a/Sankore-3.1/src/core/UBSceneCache.cpp b/Sankore-3.1/src/core/UBSceneCache.cpp
index 11dc8b8..4cbe661 100644
--- a/Sankore-3.1/src/core/UBSceneCache.cpp
+++ b/Sankore-3.1/src/core/UBSceneCache.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBSceneCache.h"
#include "domain/UBGraphicsScene.h"
@@ -142,11 +143,10 @@ void UBSceneCache::removeAllScenes(UBDocumentProxy* proxy)
{
for(int i = 0 ; i < proxy->pageCount(); i++)
{
- removeScene(proxy, i);
+ removeScene(proxy, i);
}
}
-
void UBSceneCache::moveScene(UBDocumentProxy* proxy, int sourceIndex, int targetIndex)
{
UBSceneCacheID keySource(proxy, sourceIndex);
@@ -189,7 +189,6 @@ void UBSceneCache::moveScene(UBDocumentProxy* proxy, int sourceIndex, int target
}
-
void UBSceneCache::shiftUpScenes(UBDocumentProxy* proxy, int startIncIndex, int endIncIndex)
{
for(int i = endIncIndex; i >= startIncIndex; i--)
@@ -198,6 +197,32 @@ void UBSceneCache::shiftUpScenes(UBDocumentProxy* proxy, int startIncIndex, int
}
}
+void UBSceneCache::reassignDocProxy(UBDocumentProxy *newDocument, UBDocumentProxy *oldDocument)
+{
+ if (!newDocument || !oldDocument) {
+ return;
+ }
+ if (newDocument->pageCount() != oldDocument->pageCount()) {
+ return;
+ }
+ if (!QFileInfo(oldDocument->persistencePath()).exists()) {
+ return;
+ }
+ for (int i = 0; i < oldDocument->pageCount(); i++) {
+
+ UBSceneCacheID sourceKey(oldDocument, i);
+ UBGraphicsScene *currentScene = value(sourceKey);
+ if (currentScene) {
+ currentScene->setDocument(newDocument);
+ }
+ mCachedKeyFIFO.removeAll(sourceKey);
+ int count = QHash<UBSceneCacheID, UBGraphicsScene*>::remove(sourceKey);
+ mCachedSceneCount -= count;
+
+ insert(newDocument, i, currentScene);
+ }
+
+}
void UBSceneCache::internalMoveScene(UBDocumentProxy* proxy, int sourceIndex, int targetIndex)
{
diff --git a/Sankore-3.1/src/core/UBSceneCache.h b/Sankore-3.1/src/core/UBSceneCache.h
index 210b8c2..83b3fa4 100644
--- a/Sankore-3.1/src/core/UBSceneCache.h
+++ b/Sankore-3.1/src/core/UBSceneCache.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBSCENECACHE_H
#define UBSCENECACHE_H
@@ -93,6 +94,7 @@ class UBSceneCache : public QHash<UBSceneCacheID, UBGraphicsScene*>
void shiftUpScenes(UBDocumentProxy* proxy, int startIncIndex, int endIncIndex);
+ void reassignDocProxy(UBDocumentProxy *newDocument, UBDocumentProxy *oldDocument);
private:
diff --git a/Sankore-3.1/src/core/UBSetting.cpp b/Sankore-3.1/src/core/UBSetting.cpp
index 3e87194..23f12fe 100644
--- a/Sankore-3.1/src/core/UBSetting.cpp
+++ b/Sankore-3.1/src/core/UBSetting.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBSetting.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/core/UBSetting.h b/Sankore-3.1/src/core/UBSetting.h
index 56c6a71..d40e873 100644
--- a/Sankore-3.1/src/core/UBSetting.h
+++ b/Sankore-3.1/src/core/UBSetting.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBSETTING_H_
#define UBSETTING_H_
diff --git a/Sankore-3.1/src/core/UBSettings.cpp b/Sankore-3.1/src/core/UBSettings.cpp
index ad4cfa2..03764b7 100644
--- a/Sankore-3.1/src/core/UBSettings.cpp
+++ b/Sankore-3.1/src/core/UBSettings.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBSettings.h"
#include <QtGui>
@@ -164,7 +165,10 @@ UBSettings::UBSettings(QObject *parent)
mUserSettings = new QSettings(userSettingsFile, QSettings::IniFormat, parent);
- init();
+ appPreferredLanguage = new UBSetting(this,"App","PreferredLanguage", "");
+
+
+// init();
}
@@ -218,22 +222,42 @@ void UBSettings::init()
appEnableAutomaticSoftwareUpdates = new UBSetting(this, "App", "EnableAutomaticSoftwareUpdates", true);
appEnableSoftwareUpdates = new UBSetting(this, "App", "EnableSoftwareUpdates", true);
appToolBarOrientationVertical = new UBSetting(this, "App", "ToolBarOrientationVertical", false);
- appPreferredLanguage = new UBSetting(this,"App","PreferredLanguage", "");
rightLibPaletteBoardModeWidth = new UBSetting(this, "Board", "RightLibPaletteBoardModeWidth", 270);
rightLibPaletteBoardModeIsCollapsed = new UBSetting(this,"Board", "RightLibPaletteBoardModeIsCollapsed",false);
rightLibPaletteDesktopModeWidth = new UBSetting(this, "Board", "RightLibPaletteDesktopModeWidth", 270);
rightLibPaletteDesktopModeIsCollapsed = new UBSetting(this,"Board", "RightLibPaletteDesktopModeIsCollapsed",false);
+ rightLibPaletteWebModeWidth = new UBSetting(this, "Board", "RightLibPaletteWebModeWidth", 270);
+ rightLibPaletteWebModeIsCollapsed = new UBSetting(this,"Board", "RightLibPaletteWebModeIsCollapsed",false);
leftLibPaletteBoardModeWidth = new UBSetting(this, "Board", "LeftLibPaletteBoardModeWidth",270);
leftLibPaletteBoardModeIsCollapsed = new UBSetting(this,"Board","LeftLibPaletteBoardModeIsCollapsed",false);
leftLibPaletteDesktopModeWidth = new UBSetting(this, "Board", "LeftLibPaletteDesktopModeWidth",270);
leftLibPaletteDesktopModeIsCollapsed = new UBSetting(this,"Board","LeftLibPaletteDesktopModeIsCollapsed",false);
+ userCrossDarkBackground = new UBColorListSetting(this, "Board", "crossDarkBackgroundColor", "127 127 127", 0.75);
+ userCrossLightBackground = new UBColorListSetting(this, "Board", "crossLightBackgroundColor", "83 173 173", 1);
+
+ QColor bgCrossColor;
+ QStringList colors;
+ colors = userCrossDarkBackground->get().toString().split(" ", QString::SkipEmptyParts);
+ if (3 == colors.count())
+ crossDarkBackground = QColor(colors[0].toInt(),colors[1].toInt(),colors[2].toInt());
+ if (4 == colors.count())
+ crossDarkBackground = QColor(colors[0].toInt(),colors[1].toInt(),colors[2].toInt(), colors[3].toInt());
+
+ colors = userCrossLightBackground->get().toString().split(" ", QString::SkipEmptyParts);
+ if (3 == colors.count())
+ crossLightBackground = QColor(colors[0].toInt(),colors[1].toInt(),colors[2].toInt());
+ if (4 == colors.count())
+ crossLightBackground = QColor(colors[0].toInt(),colors[1].toInt(),colors[2].toInt(), colors[3].toInt());
+
appIsInSoftwareUpdateProcess = new UBSetting(this, "App", "IsInSoftwareUpdateProcess", false);
appLastSessionDocumentUUID = new UBSetting(this, "App", "LastSessionDocumentUUID", "");
appLastSessionPageIndex = new UBSetting(this, "App", "LastSessionPageIndex", 0);
appUseMultiscreen = new UBSetting(this, "App", "UseMusliscreenMode", true);
+ appStartupHintsEnabled = new UBSetting(this,"App","EnableStartupHints",true);
+
appStartMode = new UBSetting(this, "App", "StartMode", "");
featureSliderPosition = new UBSetting(this, "Board", "FeatureSliderPosition", 40);
@@ -252,6 +276,13 @@ void UBSettings::init()
boardUseHighResTabletEvent = new UBSetting(this, "Board", "UseHighResTabletEvent", true);
boardKeyboardPaletteKeyBtnSize = new UBSetting(this, "Board", "KeyboardPaletteKeyBtnSize", "16x16");
+
+
+ cacheKeepAspectRatio = new UBSetting(this, "Cache", "KeepAspectRatio", true);
+ cacheMode = new UBSetting(this, "Cache", "CasheMode", 0);
+ casheLastHoleSize = new UBSetting(this, "Cache", "LastHoleSize", QSize(20,20));
+ cacheColor = new UBColorListSetting(this, "Cache", "Color", "0 0 0", 0.75);
+
ValidateKeyboardPaletteKeyBtnSize();
pageSize = new UBSetting(this, "Board", "DefaultPageSize", documentSizes.value(DocumentSizeRatio::Ratio4_3));
@@ -348,6 +379,7 @@ void UBSettings::init()
appOnlineUserName = new UBSetting(this, "App", "OnlineUserName", "");
boardShowToolsPalette = new UBSetting(this, "Board", "ShowToolsPalette", "false");
+ magnifierDrawingMode = new UBSetting(this, "Board", "MagnifierDrawingMode", "0");
svgViewBoxMargin = new UBSetting(this, "SVG", "ViewBoxMargin", "50");
@@ -888,6 +920,16 @@ QString UBSettings::userDocumentDirectory()
return documentDirectory;
}
+QString UBSettings::userBookmarkDirectory()
+{
+ static QString bookmarkDirectory = "";
+ if(bookmarkDirectory.isEmpty()){
+ bookmarkDirectory = userDataDirectory() + "/bookmark";
+ checkDirectory(bookmarkDirectory);
+ }
+ return bookmarkDirectory;
+}
+
QString UBSettings::userFavoriteListFilePath()
{
static QString filePath = "";
@@ -1000,6 +1042,34 @@ QString UBSettings::userInteractiveDirectory()
return interactiveDirectory;
}
+QString UBSettings::userApplicationDirectory()
+{
+ static QString applicationDirectory = "";
+ if(applicationDirectory.isEmpty()){
+ if (sAppSettings && getAppSettings()->contains("App/UserApplicationDirectory")) {
+ applicationDirectory = getAppSettings()->value("App/UserApplicationDirectory").toString();
+ applicationDirectory = replaceWildcard(applicationDirectory);
+ if(checkDirectory(applicationDirectory))
+ return applicationDirectory;
+ else
+ qCritical() << "failed to create directory " << applicationDirectory;
+ }
+ applicationDirectory = userDataDirectory() + "/application";
+ checkDirectory(applicationDirectory);
+ }
+ return applicationDirectory;
+}
+
+QString UBSettings::userWidgetPath()
+{
+ return userInteractiveDirectory() + tr("/Web");
+}
+
+QString UBSettings::userRelativeWidgetPath()
+{
+ QString result = userWidgetPath().replace(userInteractiveDirectory(), "");
+ return result.startsWith("/") ? result.right(result.count() - 1) : result;
+}
QString UBSettings::applicationInteractivesDirectory()
{
@@ -1072,6 +1142,19 @@ QString UBSettings::applicationAnimationsLibraryDirectory()
}
}
+QString UBSettings::applicationStartupHintsDirectory()
+{
+ QString defaultRelativePath = QString("./startupHints");
+
+ QString configPath = value("StartupHintsDirectory", QVariant(defaultRelativePath)).toString();
+
+ if (configPath.startsWith(".")) {
+ return UBPlatformUtils::applicationResourcesDirectory() + configPath.right(configPath.size() - 1);
+ }
+ else
+ return configPath;
+}
+
QString UBSettings::userInteractiveFavoritesDirectory()
{
static QString dirPath = "";
diff --git a/Sankore-3.1/src/core/UBSettings.h b/Sankore-3.1/src/core/UBSettings.h
index 3871289..0e65e8f 100644
--- a/Sankore-3.1/src/core/UBSettings.h
+++ b/Sankore-3.1/src/core/UBSettings.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBSETTINGS_H_
#define UBSETTINGS_H_
@@ -39,6 +40,7 @@ class UBSettings : public QObject
static UBSettings* settings();
static void destroy();
+ void init();
private:
@@ -117,11 +119,10 @@ class UBSettings : public QObject
int libraryIconSize();
void setLibraryIconsize(const int& size);
- void init();
-
//user directories
static QString userDataDirectory();
static QString userDocumentDirectory();
+ static QString userBookmarkDirectory();
static QString userFavoriteListFilePath();
static QString userTrashDirPath();
static QString userImageDirectory();
@@ -130,6 +131,9 @@ class UBSettings : public QObject
static QString userSearchDirectory();
static QString userAnimationDirectory();
static QString userInteractiveDirectory();
+ static QString userApplicationDirectory();
+ static QString userWidgetPath();
+ static QString userRelativeWidgetPath();
static QString userInteractiveFavoritesDirectory();
static QString userPodcastRecordingDirectory();
@@ -145,6 +149,7 @@ class UBSettings : public QObject
QString applicationAudiosLibraryDirectory();
QString applicationVideosLibraryDirectory();
QString applicationAnimationsLibraryDirectory();
+ QString applicationStartupHintsDirectory();
QNetworkProxy* httpProxy();
@@ -242,6 +247,8 @@ class UBSettings : public QObject
UBSetting* appUseMultiscreen;
+ UBSetting* appStartupHintsEnabled;
+
UBSetting* boardPenFineWidth;
UBSetting* boardPenMediumWidth;
UBSetting* boardPenStrongWidth;
@@ -267,6 +274,9 @@ class UBSettings : public QObject
UBColorListSetting* boardPenDarkBackgroundColors;
UBColorListSetting* boardPenDarkBackgroundSelectedColors;
+ UBSetting* userCrossDarkBackground;
+ UBSetting* userCrossLightBackground;
+
UBSetting* boardMarkerAlpha;
UBColorListSetting* boardMarkerLightBackgroundColors;
@@ -349,6 +359,8 @@ class UBSettings : public QObject
UBSetting* rightLibPaletteBoardModeIsCollapsed;
UBSetting* rightLibPaletteDesktopModeWidth;
UBSetting* rightLibPaletteDesktopModeIsCollapsed;
+ UBSetting* rightLibPaletteWebModeWidth;
+ UBSetting* rightLibPaletteWebModeIsCollapsed;
UBSetting* leftLibPaletteBoardModeWidth;
UBSetting* leftLibPaletteBoardModeIsCollapsed;
UBSetting* leftLibPaletteDesktopModeWidth;
@@ -371,6 +383,13 @@ class UBSettings : public QObject
UBSetting* libIconSize;
+ UBSetting* magnifierDrawingMode;
+
+ UBSetting *cacheKeepAspectRatio;
+ UBSetting *cacheMode;
+ UBSetting *casheLastHoleSize;
+ UBSetting *cacheColor;
+
public slots:
void setPenWidthIndex(int index);
diff --git a/Sankore-3.1/src/core/main.cpp b/Sankore-3.1/src/core/main.cpp
index e965109..af7c60e 100644
--- a/Sankore-3.1/src/core/main.cpp
+++ b/Sankore-3.1/src/core/main.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include <QTextCodec>
diff --git a/Sankore-3.1/src/core/memcheck.h b/Sankore-3.1/src/core/memcheck.h
index 8d0a107..2c90405 100644
--- a/Sankore-3.1/src/core/memcheck.h
+++ b/Sankore-3.1/src/core/memcheck.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if defined(WIN32) && defined(_DEBUG)
#include <cstdlib>
#define DEBUG_NEW new( _NORMAL_BLOCK, __FILE__, __LINE__ )
diff --git a/Sankore-3.1/src/customWidgets/UBActionableWidget.cpp b/Sankore-3.1/src/customWidgets/UBActionableWidget.cpp
index d1d055f..ba334ac 100644
--- a/Sankore-3.1/src/customWidgets/UBActionableWidget.cpp
+++ b/Sankore-3.1/src/customWidgets/UBActionableWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QPainter>
#include <QDebug>
diff --git a/Sankore-3.1/src/customWidgets/UBActionableWidget.h b/Sankore-3.1/src/customWidgets/UBActionableWidget.h
index 7a477b1..cdc8e76 100644
--- a/Sankore-3.1/src/customWidgets/UBActionableWidget.h
+++ b/Sankore-3.1/src/customWidgets/UBActionableWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBACTIONABLEWIDGET_H
#define UBACTIONABLEWIDGET_H
diff --git a/Sankore-3.1/src/customWidgets/UBGraphicsItemAction.cpp b/Sankore-3.1/src/customWidgets/UBGraphicsItemAction.cpp
new file mode 100644
index 0000000..323577b
--- /dev/null
+++ b/Sankore-3.1/src/customWidgets/UBGraphicsItemAction.cpp
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+#include "UBGraphicsItemAction.h"
+#include "core/UBApplication.h"
+#include "core/UBPersistenceManager.h"
+#include "board/UBBoardController.h"
+#include "web/UBWebController.h"
+#include "document/UBDocumentController.h"
+#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentContainer.h"
+
+#include "board/UBBoardController.h"
+
+
+UBGraphicsItemAction::UBGraphicsItemAction(eUBGraphicsItemLinkType linkType, QObject *parent) :
+ QObject(parent)
+{
+ mLinkType = linkType;
+}
+
+ void UBGraphicsItemAction::actionRemoved()
+ {
+ //NOOP
+ }
+
+
+UBGraphicsItemPlayAudioAction::UBGraphicsItemPlayAudioAction(QString audioFile, bool isNewAction, QObject *parent) :
+ UBGraphicsItemAction(eLinkToAudio,parent)
+ , mMediaObject(0)
+ , mIsLoading(true)
+{
+ Q_ASSERT(audioFile.length() > 0);
+ if(isNewAction){
+ QString extension = QFileInfo(audioFile).completeSuffix();
+ QString destDir = UBApplication::boardController->selectedDocument()->persistencePath() + "/" + UBPersistenceManager::audioDirectory;
+ QString destFile = destDir + "/" + QUuid::createUuid().toString() + "." + extension;
+ if(!QDir(destDir).exists())
+ QDir(UBApplication::boardController->selectedDocument()->persistencePath()).mkdir(destDir);
+ QFile(audioFile).copy(destFile);
+ mAudioPath = destFile;
+ }
+ else{
+ //another hack
+ if(UBApplication::documentController && UBApplication::documentController->selectedDocument())
+ mAudioPath = UBApplication::documentController->selectedDocument()->persistencePath() + "/" + audioFile;
+ else return;
+ }
+ mAudioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this);
+ mMediaObject = new Phonon::MediaObject(this);
+ Phonon::createPath(mMediaObject, mAudioOutput);
+ mMediaObject->setCurrentSource(Phonon::MediaSource(mAudioPath));
+}
+
+
+UBGraphicsItemPlayAudioAction::UBGraphicsItemPlayAudioAction() :
+ UBGraphicsItemAction(eLinkToAudio,NULL)
+ , mMediaObject(0)
+ , mIsLoading(true)
+{
+}
+
+
+void UBGraphicsItemPlayAudioAction::setPath(QString audioPath)
+{
+ Q_ASSERT(audioPath.length() > 0);
+ mAudioPath = audioPath;
+ mAudioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this);
+ mMediaObject = new Phonon::MediaObject(this);
+ Phonon::createPath(mMediaObject, mAudioOutput);
+ mMediaObject->setCurrentSource(Phonon::MediaSource(mAudioPath));
+}
+
+UBGraphicsItemPlayAudioAction::~UBGraphicsItemPlayAudioAction()
+{
+ if(!mMediaObject && mMediaObject->state() == Phonon::PlayingState)
+ mMediaObject->stop();
+}
+
+void UBGraphicsItemPlayAudioAction::play()
+{
+ if(mMediaObject->state() == Phonon::PlayingState){
+ mMediaObject->stop();
+ }
+ mMediaObject->seek(0);
+ mMediaObject->play();
+}
+
+
+QStringList UBGraphicsItemPlayAudioAction::save()
+{
+ //Another hack
+ if(UBApplication::documentController && UBApplication::documentController->selectedDocument()){
+ QString documentPath = UBApplication::documentController->selectedDocument()->persistencePath() + "/";
+ return QStringList() << QString("%1").arg(eLinkToAudio) << mAudioPath.replace(documentPath,"");
+ }
+ else{
+ int index = mAudioPath.indexOf("/audios/");
+ QString relativePath = mAudioPath.remove(0,index + 1);
+ return QStringList() << QString("%1").arg(eLinkToAudio) << relativePath;
+ }
+}
+
+void UBGraphicsItemPlayAudioAction::actionRemoved()
+{
+ QFile(mAudioPath).remove();
+}
+
+
+UBGraphicsItemMoveToPageAction::UBGraphicsItemMoveToPageAction(eUBGraphicsItemMovePageAction actionType, int page, QObject* parent) :
+ UBGraphicsItemAction(eLinkToPage,parent)
+{
+ mActionType = actionType;
+ mPage = page;
+}
+
+void UBGraphicsItemMoveToPageAction::play()
+{
+ UBBoardController* boardController = UBApplication::boardController;
+
+ switch (mActionType) {
+ case eMoveToFirstPage:
+ boardController->firstScene();
+ break;
+ case eMoveToLastPage:
+ boardController->lastScene();
+ break;
+ case eMoveToPreviousPage:
+ boardController->previousScene();
+ break;
+ case eMoveToNextPage:
+ boardController->nextScene();
+ break;
+ case eMoveToPage:
+ if(mPage > 0 && mPage < boardController->pageCount())
+ boardController->setActiveDocumentScene(mPage);
+ else
+ qWarning() << "scene number " << mPage << "ins't accessible anymore";
+ break;
+ default:
+ break;
+ }
+}
+
+QStringList UBGraphicsItemMoveToPageAction::save()
+{
+ return QStringList() << QString("%1").arg(eLinkToPage) << QString("%1").arg(mActionType) << QString("%1").arg(mPage);
+}
+
+
+UBGraphicsItemLinkToWebPageAction::UBGraphicsItemLinkToWebPageAction(QString url, QObject *parent) :
+ UBGraphicsItemAction(eLinkToWebUrl,parent)
+{
+ Q_ASSERT(url.length());
+ if(!url.startsWith("http://"))
+ url = "http://" + url;
+ mUrl = url;
+}
+
+void UBGraphicsItemLinkToWebPageAction::play()
+{
+ UBApplication::webController->loadUrl(QUrl(mUrl));
+}
+
+QStringList UBGraphicsItemLinkToWebPageAction::save()
+{
+ return QStringList() << QString("%1").arg(eLinkToWebUrl) << mUrl;
+}
diff --git a/Sankore-3.1/src/customWidgets/UBGraphicsItemAction.h b/Sankore-3.1/src/customWidgets/UBGraphicsItemAction.h
new file mode 100644
index 0000000..26a5513
--- /dev/null
+++ b/Sankore-3.1/src/customWidgets/UBGraphicsItemAction.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+#ifndef UBGRAPHICSITEMSACTIONS_H
+#define UBGRAPHICSITEMSACTIONS_H
+
+#include <QObject>
+#include <phonon>
+
+
+enum eUBGraphicsItemMovePageAction {
+ eMoveToFirstPage = 0,
+ eMoveToLastPage,
+ eMoveToPreviousPage,
+ eMoveToNextPage,
+ eMoveToPage
+} ;
+
+enum eUBGraphicsItemLinkType
+{
+ eLinkToAudio = 0,
+ eLinkToPage,
+ eLinkToWebUrl
+};
+
+class UBGraphicsItemAction : public QObject
+{
+ Q_OBJECT
+public:
+ UBGraphicsItemAction(eUBGraphicsItemLinkType linkType,QObject* parent = 0);
+ virtual void play() = 0;
+ virtual QStringList save() = 0;
+ virtual void actionRemoved();
+ virtual QString path() {return "";}
+ eUBGraphicsItemLinkType linkType() { return mLinkType;}
+
+signals:
+
+public slots:
+private:
+ eUBGraphicsItemLinkType mLinkType;
+
+};
+
+
+class UBGraphicsItemPlayAudioAction : public UBGraphicsItemAction
+{
+ Q_OBJECT
+
+public:
+ UBGraphicsItemPlayAudioAction(QString audioFile, bool isNewAction = true, QObject* parent = 0);
+ UBGraphicsItemPlayAudioAction();
+ ~UBGraphicsItemPlayAudioAction();
+ void play();
+ QStringList save();
+ void actionRemoved();
+ QString path() {return mAudioPath;}
+ void setPath(QString audioPath);
+
+private:
+ QString mAudioPath;
+ Phonon::MediaObject *mMediaObject;
+ Phonon::AudioOutput *mAudioOutput;
+ bool mIsLoading;
+};
+
+
+class UBGraphicsItemMoveToPageAction : public UBGraphicsItemAction
+{
+ Q_OBJECT
+
+public:
+ UBGraphicsItemMoveToPageAction(eUBGraphicsItemMovePageAction actionType, int page = 0, QObject* parent = 0);
+ void play();
+ QStringList save();
+
+private:
+ eUBGraphicsItemMovePageAction mActionType;
+ int mPage;
+
+};
+
+class UBGraphicsItemLinkToWebPageAction : public UBGraphicsItemAction
+{
+ Q_OBJECT
+
+public:
+ UBGraphicsItemLinkToWebPageAction(QString url, QObject* parent = 0);
+ void play();
+ QStringList save();
+
+private:
+ QString mUrl;
+};
+
+#endif // UBGRAPHICSITEMSACTIONS_H
diff --git a/Sankore-3.1/src/customWidgets/UBMediaWidget.cpp b/Sankore-3.1/src/customWidgets/UBMediaWidget.cpp
index 8890c68..48aecdb 100644
--- a/Sankore-3.1/src/customWidgets/UBMediaWidget.cpp
+++ b/Sankore-3.1/src/customWidgets/UBMediaWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "core/UBApplication.h"
#include "globals/UBGlobals.h"
#include "UBMediaWidget.h"
diff --git a/Sankore-3.1/src/customWidgets/UBMediaWidget.h b/Sankore-3.1/src/customWidgets/UBMediaWidget.h
index 7a18652..973b922 100644
--- a/Sankore-3.1/src/customWidgets/UBMediaWidget.h
+++ b/Sankore-3.1/src/customWidgets/UBMediaWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBMEDIAWIDGET_H
#define UBMEDIAWIDGET_H
diff --git a/Sankore-3.1/src/customWidgets/customWidgets.pri b/Sankore-3.1/src/customWidgets/customWidgets.pri
index a3c6403..553f670 100644
--- a/Sankore-3.1/src/customWidgets/customWidgets.pri
+++ b/Sankore-3.1/src/customWidgets/customWidgets.pri
@@ -1,8 +1,10 @@
HEADERS += \
src/customWidgets/UBMediaWidget.h \
- src/customWidgets/UBActionableWidget.h
+ src/customWidgets/UBActionableWidget.h \
+ src/customWidgets/UBGraphicsItemAction.h
SOURCES += \
src/customWidgets/UBMediaWidget.cpp \
- src/customWidgets/UBActionableWidget.cpp
+ src/customWidgets/UBActionableWidget.cpp \
+ src/customWidgets/UBGraphicsItemAction.cpp
diff --git a/Sankore-3.1/src/desktop/UBCustomCaptureWindow.cpp b/Sankore-3.1/src/desktop/UBCustomCaptureWindow.cpp
index c00920f..fa7045d 100644
--- a/Sankore-3.1/src/desktop/UBCustomCaptureWindow.cpp
+++ b/Sankore-3.1/src/desktop/UBCustomCaptureWindow.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/desktop/UBCustomCaptureWindow.h b/Sankore-3.1/src/desktop/UBCustomCaptureWindow.h
index 544f50f..c82a092 100644
--- a/Sankore-3.1/src/desktop/UBCustomCaptureWindow.h
+++ b/Sankore-3.1/src/desktop/UBCustomCaptureWindow.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/desktop/UBDesktopAnnotationController.cpp b/Sankore-3.1/src/desktop/UBDesktopAnnotationController.cpp
index e11b401..470dd9d 100644
--- a/Sankore-3.1/src/desktop/UBDesktopAnnotationController.cpp
+++ b/Sankore-3.1/src/desktop/UBDesktopAnnotationController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -41,6 +41,7 @@
#include "board/UBBoardPaletteManager.h"
#include "domain/UBGraphicsScene.h"
+#include "domain/UBGraphicsPolygonItem.h"
#include "UBCustomCaptureWindow.h"
#include "UBWindowCapture.h"
@@ -178,6 +179,25 @@ UBDesktopPalette* UBDesktopAnnotationController::desktopPalette()
return mDesktopPalette;
}
+QPainterPath UBDesktopAnnotationController::desktopPalettePath() const
+{
+ QPainterPath result;
+ if (mDesktopPalette && mDesktopPalette->isVisible()) {
+ result.addRect(mDesktopPalette->geometry());
+ }
+ if (mDesktopPenPalette && mDesktopPenPalette->isVisible()) {
+ result.addRect(mDesktopPenPalette->geometry());
+ }
+ if (mDesktopMarkerPalette && mDesktopMarkerPalette->isVisible()) {
+ result.addRect(mDesktopMarkerPalette->geometry());
+ }
+ if (mDesktopEraserPalette && mDesktopEraserPalette->isVisible()) {
+ result.addRect(mDesktopEraserPalette->geometry());
+ }
+
+ return result;
+}
+
/**
* \brief Toggle the visibility of the pen associated palette
* @param checked as the visibility state
@@ -820,6 +840,7 @@ void UBDesktopAnnotationController::updateMask(bool bTransparent)
// Here we have to generate a new mask This method is certainly resource
// consuming but for the moment this is the only solution that I found.
mMask = QPixmap(mTransparentDrawingView->width(), mTransparentDrawingView->height());
+ mMask.fill(Qt::transparent);
QPainter p;
@@ -836,7 +857,7 @@ void UBDesktopAnnotationController::updateMask(bool bTransparent)
if(UBApplication::boardController->paletteManager()->mKeyboardPalette->isVisible())
{
p.drawRect(UBApplication::boardController->paletteManager()->mKeyboardPalette->geometry().x(), UBApplication::boardController->paletteManager()->mKeyboardPalette->geometry().y(),
- UBApplication::boardController->paletteManager()->mKeyboardPalette->width(), UBApplication::boardController->paletteManager()->mKeyboardPalette->height());
+ UBApplication::boardController->paletteManager()->mKeyboardPalette->width(), UBApplication::boardController->paletteManager()->mKeyboardPalette->height());
}
if(UBApplication::boardController->paletteManager()->leftPalette()->isVisible())
@@ -896,7 +917,7 @@ void UBDesktopAnnotationController::updateMask(bool bTransparent)
{
QGraphicsItem* pCrntItem = allItems.at(i);
- if(pCrntItem->isVisible())
+ if(pCrntItem->isVisible() && pCrntItem->type() == UBGraphicsPolygonItem::Type)
{
QPainterPath crntPath = pCrntItem->shape();
QRectF rect = crntPath.boundingRect();
@@ -907,7 +928,7 @@ void UBDesktopAnnotationController::updateMask(bool bTransparent)
annotationPainter.end();
- mTransparentDrawingView->setMask(mMask.createMaskFromColor(Qt::black));
+ mTransparentDrawingView->setMask(mMask.mask());
}
else
{
diff --git a/Sankore-3.1/src/desktop/UBDesktopAnnotationController.h b/Sankore-3.1/src/desktop/UBDesktopAnnotationController.h
index a3c3b23..d32faba 100644
--- a/Sankore-3.1/src/desktop/UBDesktopAnnotationController.h
+++ b/Sankore-3.1/src/desktop/UBDesktopAnnotationController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -60,6 +60,7 @@ class UBDesktopAnnotationController : public QObject
void hideWindow();
UBDesktopPalette *desktopPalette();
+ QPainterPath desktopPalettePath() const;
UBBoardView *drawingView();
void TransparentWidgetResized();
diff --git a/Sankore-3.1/src/desktop/UBDesktopPalette.cpp b/Sankore-3.1/src/desktop/UBDesktopPalette.cpp
index aba1ad1..4a53132 100644
--- a/Sankore-3.1/src/desktop/UBDesktopPalette.cpp
+++ b/Sankore-3.1/src/desktop/UBDesktopPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBDesktopPalette.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/desktop/UBDesktopPalette.h b/Sankore-3.1/src/desktop/UBDesktopPalette.h
index ca3c340..63dc396 100644
--- a/Sankore-3.1/src/desktop/UBDesktopPalette.h
+++ b/Sankore-3.1/src/desktop/UBDesktopPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBUNINOTESWINDOW_H_
#define UBUNINOTESWINDOW_H_
#include <QtGui>
diff --git a/Sankore-3.1/src/desktop/UBDesktopPropertyPalette.cpp b/Sankore-3.1/src/desktop/UBDesktopPropertyPalette.cpp
index 83f1c3f..f5d88bc 100644
--- a/Sankore-3.1/src/desktop/UBDesktopPropertyPalette.cpp
+++ b/Sankore-3.1/src/desktop/UBDesktopPropertyPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,6 +18,15 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
+
+
+#include "UBDesktopPropertyPalette.h"
+
+#include "core/UBApplication.h"
+#include "board/UBBoardController.h"
+#include "board/UBDrawingController.h"
+#include "gui/UBMainWindow.h"
+#include "gui/UBToolbarButtonGroup.h"
#include "gui/UBRightPalette.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/desktop/UBDesktopPropertyPalette.h b/Sankore-3.1/src/desktop/UBDesktopPropertyPalette.h
index f6d9ebd..95d070e 100644
--- a/Sankore-3.1/src/desktop/UBDesktopPropertyPalette.h
+++ b/Sankore-3.1/src/desktop/UBDesktopPropertyPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/desktop/UBWindowCapture.h b/Sankore-3.1/src/desktop/UBWindowCapture.h
index 81ffcee..7737504 100644
--- a/Sankore-3.1/src/desktop/UBWindowCapture.h
+++ b/Sankore-3.1/src/desktop/UBWindowCapture.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWINDOWCAPTURE_H_
#define UBWINDOWCAPTURE_H_
diff --git a/Sankore-3.1/src/desktop/UBWindowCaptureDelegate_win.cpp b/Sankore-3.1/src/desktop/UBWindowCaptureDelegate_win.cpp
index 53ca5ae..1b63803 100644
--- a/Sankore-3.1/src/desktop/UBWindowCaptureDelegate_win.cpp
+++ b/Sankore-3.1/src/desktop/UBWindowCaptureDelegate_win.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBWindowCaptureDelegate_win.h"
#include <windows.h>
diff --git a/Sankore-3.1/src/desktop/UBWindowCaptureDelegate_win.h b/Sankore-3.1/src/desktop/UBWindowCaptureDelegate_win.h
index 2a3a3b1..081e1e6 100644
--- a/Sankore-3.1/src/desktop/UBWindowCaptureDelegate_win.h
+++ b/Sankore-3.1/src/desktop/UBWindowCaptureDelegate_win.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWINDOWCAPTUREDELEGATE_H_
#define UBWINDOWCAPTUREDELEGATE_H_
diff --git a/Sankore-3.1/src/desktop/UBWindowCapture_linux.cpp b/Sankore-3.1/src/desktop/UBWindowCapture_linux.cpp
index f28dbc2..f6510f5 100644
--- a/Sankore-3.1/src/desktop/UBWindowCapture_linux.cpp
+++ b/Sankore-3.1/src/desktop/UBWindowCapture_linux.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/desktop/UBWindowCapture_mac.mm b/Sankore-3.1/src/desktop/UBWindowCapture_mac.mm
index bc63657..68eb260 100644
--- a/Sankore-3.1/src/desktop/UBWindowCapture_mac.mm
+++ b/Sankore-3.1/src/desktop/UBWindowCapture_mac.mm
@@ -1,3 +1,24 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#include "UBWindowCapture.h"
#include "UBDesktopAnnotationController.h"
diff --git a/Sankore-3.1/src/desktop/UBWindowCapture_win.cpp b/Sankore-3.1/src/desktop/UBWindowCapture_win.cpp
index 433d9f3..60bf187 100644
--- a/Sankore-3.1/src/desktop/UBWindowCapture_win.cpp
+++ b/Sankore-3.1/src/desktop/UBWindowCapture_win.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/desktop/desktop.pri b/Sankore-3.1/src/desktop/desktop.pri
index 5fb3934..70282f8 100644
--- a/Sankore-3.1/src/desktop/desktop.pri
+++ b/Sankore-3.1/src/desktop/desktop.pri
@@ -17,6 +17,4 @@ win32 {
macx:OBJECTIVE_SOURCES += src/desktop/UBWindowCapture_mac.mm
-linux-g++:SOURCES += src/desktop/UBWindowCapture_linux.cpp
-linux-g++-32:SOURCES += src/desktop/UBWindowCapture_linux.cpp
-linux-g++-64:SOURCES += src/desktop/UBWindowCapture_linux.cpp
+linux-*:SOURCES += src/desktop/UBWindowCapture_linux.cpp
diff --git a/Sankore-3.1/src/document/UBDocumentContainer.cpp b/Sankore-3.1/src/document/UBDocumentContainer.cpp
index 81899b8..5feb801 100644
--- a/Sankore-3.1/src/document/UBDocumentContainer.cpp
+++ b/Sankore-3.1/src/document/UBDocumentContainer.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,128 +18,127 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBDocumentContainer.h"
-#include "adaptors/UBThumbnailAdaptor.h"
-#include "core/UBPersistenceManager.h"
-#include "core/memcheck.h"
-
-
-UBDocumentContainer::UBDocumentContainer(QObject * parent)
- :QObject(parent)
- ,mCurrentDocument(NULL)
-{}
-
-UBDocumentContainer::~UBDocumentContainer()
-{
- foreach(const QPixmap* pm, mDocumentThumbs){
- delete pm;
- pm = NULL;
- }
-}
-
-void UBDocumentContainer::setDocument(UBDocumentProxy* document, bool forceReload)
-{
- if (mCurrentDocument != document || forceReload)
- {
- mCurrentDocument = document;
- reloadThumbnails();
- emit documentSet(mCurrentDocument);
- }
-}
-
-void UBDocumentContainer::duplicatePages(QList<int>& pageIndexes)
-{
- int offset = 0;
- foreach(int sceneIndex, pageIndexes)
- {
- UBPersistenceManager::persistenceManager()->duplicateDocumentScene(mCurrentDocument, sceneIndex + offset);
- offset++;
- }
-}
-
-bool UBDocumentContainer::movePageToIndex(int source, int target)
-{
- if (source==0)
- {
- // Title page - cant be moved
- return false;
- }
- UBPersistenceManager::persistenceManager()->moveSceneToIndex(mCurrentDocument, source, target);
- deleteThumbPage(source);
- insertThumbPage(target);
- emit documentThumbnailsUpdated(this);
- return true;
-}
-
-void UBDocumentContainer::deletePages(QList<int>& pageIndexes)
-{
- UBPersistenceManager::persistenceManager()->deleteDocumentScenes(mCurrentDocument, pageIndexes);
- int offset = 0;
- foreach(int index, pageIndexes)
- {
- deleteThumbPage(index - offset);
- offset++;
- }
- emit documentThumbnailsUpdated(this);
-}
-
-void UBDocumentContainer::addPage(int index)
-{
- UBPersistenceManager::persistenceManager()->createDocumentSceneAt(mCurrentDocument, index);
- insertThumbPage(index);
- emit documentThumbnailsUpdated(this);
-}
-
-void UBDocumentContainer::updatePage(int index)
-{
- updateThumbPage(index);
- emit documentThumbnailsUpdated(this);
-}
-
-void UBDocumentContainer::deleteThumbPage(int index)
-{
- mDocumentThumbs.removeAt(index);
-}
-
-void UBDocumentContainer::updateThumbPage(int index)
-{
- mDocumentThumbs[index] = UBThumbnailAdaptor::get(mCurrentDocument, index);
- emit documentPageUpdated(index);
-}
-
-void UBDocumentContainer::insertThumbPage(int index)
-{
- mDocumentThumbs.insert(index, UBThumbnailAdaptor::get(mCurrentDocument, index));
-}
-
-void UBDocumentContainer::reloadThumbnails()
-{
- if (mCurrentDocument)
- {
- UBThumbnailAdaptor::load(mCurrentDocument, mDocumentThumbs);
- qDebug() << "Reloading Thumbnails. new mDocumentThumbs size: " << mDocumentThumbs.size();
- emit documentThumbnailsUpdated(this);
- }
-}
-
-int UBDocumentContainer::pageFromSceneIndex(int sceneIndex)
-{
- if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
- return sceneIndex;
- return sceneIndex+1;
-}
-
-int UBDocumentContainer::sceneIndexFromPage(int page)
-{
- if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
- return page;
- return page-1;
-}
-
-void UBDocumentContainer::addEmptyThumbPage()
-{
- const QPixmap* pThumb = new QPixmap();
- mDocumentThumbs.append(pThumb);
-}
+
+
+#include "UBDocumentContainer.h"
+#include "adaptors/UBThumbnailAdaptor.h"
+#include "core/UBPersistenceManager.h"
+#include "core/memcheck.h"
+
+UBDocumentContainer::UBDocumentContainer(QObject * parent)
+ :QObject(parent)
+ ,mCurrentDocument(NULL)
+{}
+
+UBDocumentContainer::~UBDocumentContainer()
+{
+ foreach(const QPixmap* pm, mDocumentThumbs){
+ delete pm;
+ pm = NULL;
+ }
+}
+
+void UBDocumentContainer::setDocument(UBDocumentProxy* document, bool forceReload)
+{
+ if (mCurrentDocument != document || forceReload)
+ {
+ mCurrentDocument = document;
+ reloadThumbnails();
+ emit documentSet(mCurrentDocument);
+ }
+}
+
+void UBDocumentContainer::duplicatePages(QList<int>& pageIndexes)
+{
+ int offset = 0;
+ foreach(int sceneIndex, pageIndexes) {
+ UBPersistenceManager::persistenceManager()->duplicateDocumentScene(mCurrentDocument, sceneIndex + offset);
+ offset++;
+ }
+}
+
+bool UBDocumentContainer::movePageToIndex(int source, int target)
+{
+ if (source==0)
+ {
+ // Title page - cant be moved
+ return false;
+ }
+ UBPersistenceManager::persistenceManager()->moveSceneToIndex(mCurrentDocument, source, target);
+ deleteThumbPage(source);
+ insertThumbPage(target);
+ emit documentThumbnailsUpdated(this);
+ return true;
+}
+
+void UBDocumentContainer::deletePages(QList<int>& pageIndexes)
+{
+ UBPersistenceManager::persistenceManager()->deleteDocumentScenes(mCurrentDocument, pageIndexes);
+ int offset = 0;
+ foreach(int index, pageIndexes)
+ {
+ deleteThumbPage(index - offset);
+ offset++;
+ }
+ emit documentThumbnailsUpdated(this);
+}
+
+void UBDocumentContainer::addPage(int index)
+{
+ UBPersistenceManager::persistenceManager()->createDocumentSceneAt(mCurrentDocument, index);
+ insertThumbPage(index);
+ emit documentThumbnailsUpdated(this);
+}
+
+void UBDocumentContainer::updatePage(int index)
+{
+ updateThumbPage(index);
+ emit documentThumbnailsUpdated(this);
+}
+
+void UBDocumentContainer::deleteThumbPage(int index)
+{
+ mDocumentThumbs.removeAt(index);
+}
+
+void UBDocumentContainer::updateThumbPage(int index)
+{
+ mDocumentThumbs[index] = UBThumbnailAdaptor::get(mCurrentDocument, index);
+ emit documentPageUpdated(index);
+}
+
+void UBDocumentContainer::insertThumbPage(int index)
+{
+ mDocumentThumbs.insert(index, UBThumbnailAdaptor::get(mCurrentDocument, index));
+}
+
+void UBDocumentContainer::reloadThumbnails()
+{
+ if (mCurrentDocument) {
+ UBThumbnailAdaptor::load(mCurrentDocument, mDocumentThumbs);
+ qDebug() << "Reloading Thumbnails. new mDocumentThumbs size: " << mDocumentThumbs.size();
+ } else {
+ UBThumbnailAdaptor::clearThumbs(mDocumentThumbs);
+ }
+ emit documentThumbnailsUpdated(this);
+}
+
+int UBDocumentContainer::pageFromSceneIndex(int sceneIndex)
+{
+ if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
+ return sceneIndex;
+ return sceneIndex+1;
+}
+
+int UBDocumentContainer::sceneIndexFromPage(int page)
+{
+ if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
+ return page;
+ return page-1;
+}
+
+void UBDocumentContainer::addEmptyThumbPage()
+{
+ const QPixmap* pThumb = new QPixmap();
+ mDocumentThumbs.append(pThumb);
+}
diff --git a/Sankore-3.1/src/document/UBDocumentContainer.h b/Sankore-3.1/src/document/UBDocumentContainer.h
index 4481e31..730a47d 100644
--- a/Sankore-3.1/src/document/UBDocumentContainer.h
+++ b/Sankore-3.1/src/document/UBDocumentContainer.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,54 +18,56 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBDOCUMENTCONTAINER_H_
-#define UBDOCUMENTCONTAINER_H_
-
-#include <QtGui>
-#include "UBDocumentProxy.h"
-
-class UBDocumentContainer : public QObject
-{
- Q_OBJECT
-
- public:
- UBDocumentContainer(QObject * parent = 0);
- virtual ~UBDocumentContainer();
-
- void setDocument(UBDocumentProxy* document, bool forceReload = false);
-
- UBDocumentProxy* selectedDocument(){return mCurrentDocument;}
- int pageCount(){return mDocumentThumbs.size();}
- const QPixmap* pageAt(int index){return mDocumentThumbs[index];}
-
- static int pageFromSceneIndex(int sceneIndex);
- static int sceneIndexFromPage(int sceneIndex);
-
- void duplicatePages(QList<int>& pageIndexes);
- bool movePageToIndex(int source, int target);
- void deletePages(QList<int>& pageIndexes);
- void addPage(int index);
- void updatePage(int index);
- void addEmptyThumbPage();
-
- private:
- UBDocumentProxy* mCurrentDocument;
- QList<const QPixmap*> mDocumentThumbs;
-
-
- protected:
- void deleteThumbPage(int index);
- void updateThumbPage(int index);
- void insertThumbPage(int index);
- void reloadThumbnails();
-
- signals:
- void documentSet(UBDocumentProxy* document);
- void documentPageUpdated(int index);
- void documentThumbnailsUpdated(UBDocumentContainer* source);
-};
-
-
-#endif /* UBDOCUMENTPROXY_H_ */
+
+
+
+#ifndef UBDOCUMENTCONTAINER_H_
+#define UBDOCUMENTCONTAINER_H_
+
+#include <QtGui>
+#include "UBDocumentProxy.h"
+
+class UBDocumentContainer : public QObject
+{
+ Q_OBJECT
+
+ public:
+ UBDocumentContainer(QObject * parent = 0);
+ virtual ~UBDocumentContainer();
+
+ virtual void setDocument(UBDocumentProxy* document, bool forceReload = false);
+ void pureSetDocument(UBDocumentProxy *document) {mCurrentDocument = document;}
+
+ UBDocumentProxy* selectedDocument() {return mCurrentDocument;}
+ int pageCount() {return mDocumentThumbs.size();}
+ const QPixmap* pageAt(int index) {return mDocumentThumbs[index];}
+
+ static int pageFromSceneIndex(int sceneIndex);
+ static int sceneIndexFromPage(int sceneIndex);
+
+ void duplicatePages(QList<int>& pageIndexes);
+ bool movePageToIndex(int source, int target);
+ void deletePages(QList<int>& pageIndexes);
+ void addPage(int index);
+ void updatePage(int index);
+ void addEmptyThumbPage();
+ void reloadThumbnails();
+
+ private:
+ UBDocumentProxy* mCurrentDocument;
+ QList<const QPixmap*> mDocumentThumbs;
+
+
+ protected:
+ void deleteThumbPage(int index);
+ void updateThumbPage(int index);
+ void insertThumbPage(int index);
+
+ signals:
+ void documentSet(UBDocumentProxy* document);
+ void documentPageUpdated(int index);
+ void documentThumbnailsUpdated(UBDocumentContainer* source);
+};
+
+
+#endif /* UBDOCUMENTPROXY_H_ */
diff --git a/Sankore-3.1/src/document/UBDocumentController.cpp b/Sankore-3.1/src/document/UBDocumentController.cpp
index 00ae74b..5851f27 100644
--- a/Sankore-3.1/src/document/UBDocumentController.cpp
+++ b/Sankore-3.1/src/document/UBDocumentController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,1697 +18,3328 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBDocumentController.h"
-
-#include <QtCore>
-#include <QtGui>
-
-#include "frameworks/UBFileSystemUtils.h"
-#include "frameworks/UBStringUtils.h"
-#include "frameworks/UBPlatformUtils.h"
-
-#include "core/UBApplication.h"
-#include "core/UBPersistenceManager.h"
-#include "core/UBDocumentManager.h"
-#include "core/UBApplicationController.h"
-#include "core/UBSettings.h"
-#include "core/UBSetting.h"
-
-#include "adaptors/UBExportPDF.h"
-#include "adaptors/UBThumbnailAdaptor.h"
-
-#include "adaptors/UBMetadataDcSubsetAdaptor.h"
-
-#include "board/UBBoardController.h"
-#include "board/UBBoardPaletteManager.h"
-#include "board/UBDrawingController.h"
-
-
-#include "gui/UBThumbnailView.h"
-#include "gui/UBDocumentTreeWidget.h"
-#include "gui/UBMousePressFilter.h"
-#include "gui/UBMessageWindow.h"
-#include "gui/UBMainWindow.h"
-#include "gui/UBDocumentToolsPalette.h"
-
-#include "domain/UBGraphicsScene.h"
-#include "domain/UBGraphicsSvgItem.h"
-#include "domain/UBGraphicsPixmapItem.h"
-
-#include "document/UBDocumentProxy.h"
-
-#include "ui_documents.h"
-#include "ui_mainWindow.h"
-
-#include "core/memcheck.h"
-
-UBDocumentController::UBDocumentController(UBMainWindow* mainWindow)
- : UBDocumentContainer(mainWindow->centralWidget())
- , mSelectionType(None)
- , mParentWidget(mainWindow->centralWidget())
- , mBoardController(UBApplication::boardController)
- , mDocumentUI(0)
- , mMainWindow(mainWindow)
- , mDocumentWidget(0)
- , mIsClosing(false)
- , mToolsPalette(0)
- , mToolsPalettePositionned(false)
- , mTrashTi(0)
- , mDocumentTrashGroupName(tr("Trash"))
- , mDefaultDocumentGroupName(tr("Untitled Documents"))
-{
- setupViews();
- setupToolbar();
- this->selectDocument(UBApplication::boardController->selectedDocument());
- connect(this, SIGNAL(exportDone()), mMainWindow, SLOT(onExportDone()));
- connect(this, SIGNAL(documentThumbnailsUpdated(UBDocumentContainer*)), this, SLOT(refreshDocumentThumbnailsView(UBDocumentContainer*)));
-}
-
-UBDocumentController::~UBDocumentController()
-{
- if (mDocumentUI)
- delete mDocumentUI;
-}
-
-
-void UBDocumentController::createNewDocument()
-{
- UBDocumentGroupTreeItem* group = selectedDocumentGroupTreeItem();
-
- if (group)
- {
- UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(group->groupName());
-
- selectDocument(document);
- }
-}
-
-
-UBDocumentProxyTreeItem* UBDocumentController::findDocument(UBDocumentProxy* proxy)
-{
- QTreeWidgetItemIterator it(mDocumentUI->documentTreeWidget);
-
- while (*it)
- {
- UBDocumentProxyTreeItem *treeItem = dynamic_cast<UBDocumentProxyTreeItem*>((*it));
-
- if (treeItem && treeItem->proxy() == proxy)
- return treeItem;
-
- ++it;
- }
-
- return 0;
-}
-
-
-void UBDocumentController::selectDocument(UBDocumentProxy* proxy, bool setAsCurrentDocument)
-{
- if (proxy==NULL)
- {
- setDocument(NULL);
- return;
- }
-
- QTreeWidgetItemIterator it(mDocumentUI->documentTreeWidget);
-
- mDocumentUI->documentTreeWidget->clearSelection();
- mDocumentUI->documentTreeWidget->setCurrentItem(0);
-
- UBDocumentProxyTreeItem* selected = 0;
-
- while (*it)
- {
- UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>((*it));
-
- if (pi)
- {
- if (setAsCurrentDocument)
- pi->setIcon(0, QIcon(""));
-
- pi->setSelected(false);
-
- if (pi->proxy() == proxy)
- {
- selected = pi;
- }
- }
-
- ++it;
- }
-
- if (selected)
- {
- setDocument(proxy);
-
- selected->setSelected(true);
-
- selected->parent()->setExpanded(true);
- selected->setText(0, proxy->name());
-
- if (setAsCurrentDocument)
- {
- selected->setIcon(0, QIcon(":/images/currentDocument.png"));
- if (proxy != mBoardController->selectedDocument())
- mBoardController->setActiveDocumentScene(proxy);
- }
-
- mDocumentUI->documentTreeWidget->setCurrentItem(selected);
-
- mDocumentUI->documentTreeWidget->scrollToItem(selected);
-
- mSelectionType = Document;
- }
-}
-
-
-void UBDocumentController::createNewDocumentGroup()
-{
- UBDocumentGroupTreeItem* docGroupItem = new UBDocumentGroupTreeItem(0); // deleted by the tree widget
- int i = 1;
- QString newFolderName = tr("New Folder");
- while (allGroupNames().contains(newFolderName))
- {
- newFolderName = tr("New Folder") + " " + QVariant(i++).toString();
- }
- docGroupItem->setGroupName(newFolderName);
-
- int trashIndex = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(mTrashTi);
-
- mDocumentUI->documentTreeWidget->insertTopLevelItem(trashIndex, docGroupItem);
- mDocumentUI->documentTreeWidget->setCurrentItem(docGroupItem);
- mDocumentUI->documentTreeWidget->expandItem(docGroupItem);
-}
-
-
-UBDocumentProxy* UBDocumentController::selectedDocumentProxy()
-{
- UBDocumentProxyTreeItem* proxyItem = selectedDocumentProxyTreeItem();
- return proxyItem ? proxyItem->proxy() : 0;
-}
-
-
-UBDocumentProxyTreeItem* UBDocumentController::selectedDocumentProxyTreeItem()
-{
- if (mDocumentUI && mDocumentUI->documentTreeWidget)
- {
- QList<QTreeWidgetItem *> selectedItems = mDocumentUI->documentTreeWidget->selectedItems();
-
- foreach (QTreeWidgetItem * item, selectedItems)
- {
- UBDocumentProxyTreeItem* proxyItem = dynamic_cast<UBDocumentProxyTreeItem*>(item);
-
- if (proxyItem)
- {
- return proxyItem;
- }
- }
- }
-
- return 0;
-}
-
-
-UBDocumentGroupTreeItem* UBDocumentController::selectedDocumentGroupTreeItem()
-{
- QList<QTreeWidgetItem *> selectedItems = mDocumentUI->documentTreeWidget->selectedItems();
-
- foreach (QTreeWidgetItem * item, selectedItems)
- {
- UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
-
- if (groupItem)
- {
- return groupItem;
- }
- else
- {
- UBDocumentGroupTreeItem* parent = dynamic_cast<UBDocumentGroupTreeItem*>(item->parent());
- if (parent)
- {
- return parent;
- }
- }
- }
-
- return 0;
-}
-
-
-void UBDocumentController::itemSelectionChanged()
-{
- reloadThumbnails();
-
- if (selectedDocumentProxy())
- mSelectionType = Document;
- else if (selectedDocumentGroupTreeItem())
- mSelectionType = Folder;
- else
- mSelectionType = None;
-
- selectionChanged();
-}
-
-
-void UBDocumentController::setupViews()
-{
-
- if (!mDocumentWidget)
- {
- mDocumentWidget = new QWidget(mMainWindow->centralWidget());
- mMainWindow->addDocumentsWidget(mDocumentWidget);
-
- mDocumentUI = new Ui::documents();
-
- mDocumentUI->setupUi(mDocumentWidget);
-
- int thumbWidth = UBSettings::settings()->documentThumbnailWidth->get().toInt();
-
- mDocumentUI->documentZoomSlider->setValue(thumbWidth);
- mDocumentUI->thumbnailWidget->setThumbnailWidth(thumbWidth);
-
- connect(mDocumentUI->documentZoomSlider, SIGNAL(valueChanged(int)), this,
- SLOT(documentZoomSliderValueChanged(int)));
-
- connect(mMainWindow->actionOpen, SIGNAL(triggered()), this, SLOT(openSelectedItem()));
- connect(mMainWindow->actionNewFolder, SIGNAL(triggered()), this, SLOT(createNewDocumentGroup()));
- connect(mMainWindow->actionNewDocument, SIGNAL(triggered()), this, SLOT(createNewDocument()));
-
- connect(mMainWindow->actionImport, SIGNAL(triggered(bool)), this, SLOT(importFile()));
-
- QMenu* addMenu = new QMenu(mDocumentWidget);
- mAddFolderOfImagesAction = addMenu->addAction(tr("Add Folder of Images"));
- mAddImagesAction = addMenu->addAction(tr("Add Images"));
- mAddFileToDocumentAction = addMenu->addAction(tr("Add Pages from File"));
-
- connect(mAddFolderOfImagesAction, SIGNAL(triggered(bool)), this, SLOT(addFolderOfImages()));
- connect(mAddFileToDocumentAction, SIGNAL(triggered(bool)), this, SLOT(addFileToDocument()));
- connect(mAddImagesAction, SIGNAL(triggered(bool)), this, SLOT(addImages()));
-
- foreach (QWidget* menuWidget, mMainWindow->actionDocumentAdd->associatedWidgets())
- {
- QToolButton *tb = qobject_cast<QToolButton*>(menuWidget);
-
- if (tb && !tb->menu())
- {
- tb->setObjectName("ubButtonMenu");
- tb->setPopupMode(QToolButton::InstantPopup);
-
- QMenu* menu = new QMenu(mDocumentWidget);
-
- menu->addAction(mAddFolderOfImagesAction);
- menu->addAction(mAddImagesAction);
- menu->addAction(mAddFileToDocumentAction);
-
- tb->setMenu(menu);
- }
- }
-
- QMenu* exportMenu = new QMenu(mDocumentWidget);
-
- UBDocumentManager *documentManager = UBDocumentManager::documentManager();
- for (int i = 0; i < documentManager->supportedExportAdaptors().length(); i++)
- {
- UBExportAdaptor* adaptor = documentManager->supportedExportAdaptors()[i];
- QAction *currentExportAction = exportMenu->addAction(adaptor->exportName());
- currentExportAction->setData(i);
- connect(currentExportAction, SIGNAL(triggered (bool)), this, SLOT(exportDocument()));
- exportMenu->addAction(currentExportAction);
- }
-
- foreach (QWidget* menuWidget, mMainWindow->actionExport->associatedWidgets())
- {
- QToolButton *tb = qobject_cast<QToolButton*>(menuWidget);
-
- if (tb && !tb->menu())
- {
- tb->setObjectName("ubButtonMenu");
- tb->setPopupMode(QToolButton::InstantPopup);
-
- tb->setMenu(exportMenu);
- }
- }
-
-#ifdef Q_WS_MAC
- mMainWindow->actionDelete->setShortcut(QKeySequence(Qt::Key_Backspace));
-#endif
-
- connect(mMainWindow->actionDelete, SIGNAL(triggered()), this, SLOT(deleteSelectedItem()));
- connect(mMainWindow->actionDuplicate, SIGNAL(triggered()), this, SLOT(duplicateSelectedItem()));
- connect(mMainWindow->actionRename, SIGNAL(triggered()), this, SLOT(renameSelectedItem()));
- connect(mMainWindow->actionAddToWorkingDocument, SIGNAL(triggered()), this, SLOT(addToDocument()));
-
- loadDocumentProxies();
-
- mDocumentUI->documentTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection);
- mDocumentUI->documentTreeWidget->setDragEnabled(true);
- mDocumentUI->documentTreeWidget->viewport()->setAcceptDrops(true);
- mDocumentUI->documentTreeWidget->setDropIndicatorShown(true);
- mDocumentUI->documentTreeWidget->setIndentation(18); // 1.5 * /resources/style/treeview-branch-closed.png width
- mDocumentUI->documentTreeWidget->setDragDropMode(QAbstractItemView::InternalMove);
-
- connect(mDocumentUI->documentTreeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged()));
- connect(mDocumentUI->documentTreeWidget, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(itemChanged(QTreeWidgetItem *, int)));
- connect(mDocumentUI->documentTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(itemClicked(QTreeWidgetItem *, int)));
-
- connect(mDocumentUI->thumbnailWidget, SIGNAL(sceneDropped(UBDocumentProxy*, int, int)), this, SLOT(moveSceneToIndex ( UBDocumentProxy*, int, int)));
- connect(mDocumentUI->thumbnailWidget, SIGNAL(resized()), this, SLOT(thumbnailViewResized()));
- connect(mDocumentUI->thumbnailWidget, SIGNAL(mouseDoubleClick(QGraphicsItem*, int)), this, SLOT(pageDoubleClicked(QGraphicsItem*, int)));
- connect(mDocumentUI->thumbnailWidget, SIGNAL(mouseClick(QGraphicsItem*, int)), this, SLOT(pageClicked(QGraphicsItem*, int)));
-
- connect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
-
- connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentCreated(UBDocumentProxy*)), this, SLOT(addDocumentInTree(UBDocumentProxy*)));
-
- connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)), this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
-
- connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneCreated(UBDocumentProxy*, int)), this, SLOT(documentSceneChanged(UBDocumentProxy*, int)));
-
- connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneWillBeDeleted(UBDocumentProxy*, int)), this, SLOT(documentSceneChanged(UBDocumentProxy*, int)));
-
- mDocumentUI->thumbnailWidget->setBackgroundBrush(UBSettings::documentViewLightColor);
-
- #ifdef Q_WS_MACX
- mMessageWindow = new UBMessageWindow(NULL);
- #else
- mMessageWindow = new UBMessageWindow(mDocumentUI->thumbnailWidget);
- #endif
-
- mMessageWindow->hide();
-
- }
-}
-
-
-QWidget* UBDocumentController::controlView()
-{
- return mDocumentWidget;
-}
-
-
-void UBDocumentController::setupToolbar()
-{
- UBApplication::app()->insertSpaceToToolbarBeforeAction(mMainWindow->documentToolBar, mMainWindow->actionBoard);
- connect(mMainWindow->actionDocumentTools, SIGNAL(triggered()), this, SLOT(toggleDocumentToolsPalette()));
-}
-
-void UBDocumentController::setupPalettes()
-{
-
- mToolsPalette = new UBDocumentToolsPalette(controlView());
-
- mToolsPalette->hide();
-
- bool showToolsPalette = !mToolsPalette->isEmpty();
- mMainWindow->actionDocumentTools->setVisible(showToolsPalette);
-
- if (showToolsPalette)
- {
- mMainWindow->actionDocumentTools->trigger();
- }
-}
-
-
-void UBDocumentController::show()
-{
- selectDocument(mBoardController->selectedDocument());
-
- selectionChanged();
-
- if(!mToolsPalette)
- setupPalettes();
-}
-
-
-void UBDocumentController::hide()
-{
- // NOOP
-}
-
-
-void UBDocumentController::openSelectedItem()
-{
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
- QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
-
- if (selectedItems.count() > 0)
- {
- UBSceneThumbnailPixmap* thumb = dynamic_cast<UBSceneThumbnailPixmap*> (selectedItems.last());
-
- if (thumb)
- {
- UBDocumentProxy* proxy = thumb->proxy();
-
- if (proxy && isOKToOpenDocument(proxy))
- {
- UBApplication::applicationController->showBoard();
- }
- }
- }
- else
- {
- UBDocumentProxy* proxy = selectedDocumentProxy();
-
- if (proxy && isOKToOpenDocument(proxy))
- {
- mBoardController->setActiveDocumentScene(proxy);
- UBApplication::applicationController->showBoard();
- }
- }
-
- QApplication::restoreOverrideCursor();
-}
-
-void UBDocumentController::duplicateSelectedItem()
-{
- if (UBApplication::applicationController->displayMode() != UBApplicationController::Document)
- return;
-
- if (mSelectionType == Page)
- {
- QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
- QList<int> selectedSceneIndexes;
- foreach (QGraphicsItem *item, selectedItems)
- {
- UBSceneThumbnailPixmap *thumb = dynamic_cast<UBSceneThumbnailPixmap*>(item);
- if (thumb)
- {
- UBDocumentProxy *proxy = thumb->proxy();
-
- if (proxy)
- {
- int sceneIndex = thumb->sceneIndex();
- selectedSceneIndexes << sceneIndex;
- }
- }
- }
- if (selectedSceneIndexes.count() > 0)
- {
- duplicatePages(selectedSceneIndexes);
- emit documentThumbnailsUpdated(this);
- selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- UBMetadataDcSubsetAdaptor::persist(selectedDocument());
- mDocumentUI->thumbnailWidget->selectItemAt(selectedSceneIndexes.last() + selectedSceneIndexes.size());
- }
- }
- else
- {
- UBDocumentProxy* source = selectedDocumentProxy();
- UBDocumentGroupTreeItem* group = selectedDocumentGroupTreeItem();
-
- if (source && group)
- {
- QString docName = source->metaData(UBSettings::documentName).toString();
-
- showMessage(tr("Duplicating Document %1").arg(docName), true);
-
- UBDocumentProxy* duplicatedDoc = UBPersistenceManager::persistenceManager()->duplicateDocument(source);
- duplicatedDoc->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- UBMetadataDcSubsetAdaptor::persist(duplicatedDoc);
-
- selectDocument(duplicatedDoc, false);
-
- showMessage(tr("Document %1 copied").arg(docName), false);
- }
- }
-}
-
-void UBDocumentController::moveDocumentToTrash(UBDocumentGroupTreeItem* groupTi, UBDocumentProxyTreeItem *proxyTi)
-{
- int index = proxyTi->parent()->indexOfChild(proxyTi);
- index --;
-
- if (index >= 0)
- {
- if (proxyTi->proxy() == mBoardController->selectedDocument())
- {
- selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(index))->proxy(), true);
- }
- else
- proxyTi->parent()->child(index)->setSelected(true);
- }
- else if (proxyTi->parent()->childCount() > 1)
- {
- if (proxyTi->proxy() == mBoardController->selectedDocument())
- {
- selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(1))->proxy(), true);
- }
- else
- proxyTi->parent()->child(1)->setSelected(true);
- }
- else
- {
- if (proxyTi->proxy() == mBoardController->selectedDocument())
- {
- bool documentFound = false;
- for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
- {
- QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
- UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
- if (!groupItem->isTrashFolder())
- {
- for(int j=0; j<groupItem->childCount(); j++)
- {
- if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument())
- {
- selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true);
- documentFound = true;
- break;
- }
- }
- }
- if (documentFound)
- break;
- }
- if (!documentFound)
- {
- UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(groupTi->groupName());
- selectDocument(document, true);
- }
- }
- else
- proxyTi->parent()->setSelected(true);
- }
-
- QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
- proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
- UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy());
-
- proxyTi->parent()->removeChild(proxyTi);
- mTrashTi->addChild(proxyTi);
- proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
-}
-
-void UBDocumentController::moveFolderToTrash(UBDocumentGroupTreeItem* groupTi)
-{
- bool changeCurrentDocument = false;
- for (int i = 0; i < groupTi->childCount(); i++)
- {
- UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
- if (proxyTi && proxyTi->proxy() && proxyTi->proxy() == mBoardController->selectedDocument())
- {
- changeCurrentDocument = true;
- break;
- }
- }
-
- QList<UBDocumentProxyTreeItem*> toBeDeleted;
-
- for (int i = 0; i < groupTi->childCount(); i++)
- {
- UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
- if (proxyTi && proxyTi->proxy())
- toBeDeleted << proxyTi;
- }
-
- for (int i = 0; i < toBeDeleted.count(); i++)
- {
- UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i);
-
- showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString()));
- // Move document to trash
- QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
- proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
- UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy());
-
- groupTi->removeChild(proxyTi);
- mTrashTi->addChild(proxyTi);
- proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
-
- showMessage(QString("%1 deleted").arg(groupTi->groupName()));
- }
-
- // dont remove default group
- if (!groupTi->isDefaultFolder())
- {
- int index = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(groupTi);
-
- if (index >= 0)
- {
- mDocumentUI->documentTreeWidget->takeTopLevelItem(index);
- }
- }
-
- if (changeCurrentDocument)
- {
- bool documentFound = false;
- for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
- {
- QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
- UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
- if (!groupItem->isTrashFolder() && groupItem != groupTi)
- {
- for(int j=0; j<groupItem->childCount(); j++)
- {
- if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument())
- {
- selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true);
- documentFound = true;
- break;
- }
- }
- }
- if (documentFound)
- break;
- }
- if (!documentFound)
- {
- UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument( mDefaultDocumentGroupName );
- selectDocument(document, true);
- }
- }
-
- reloadThumbnails();
-}
-
-void UBDocumentController::deleteSelectedItem()
-{
- if (mSelectionType == Page)
- {
- QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
-
- deletePages(selectedItems);
- }
- else
- {
-
- UBDocumentProxyTreeItem *proxyTi = selectedDocumentProxyTreeItem();
-
- UBDocumentGroupTreeItem* groupTi = selectedDocumentGroupTreeItem();
-
- if (proxyTi && proxyTi->proxy() && proxyTi->parent())
- {
- if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Document"), tr("Are you sure you want to remove the document '%1'?").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString())))
- {
- if (proxyTi->parent() != mTrashTi)
- {
- moveDocumentToTrash(groupTi, proxyTi);
- }
- else
- {
- // We have to physically delete document
- proxyTi->parent()->removeChild(proxyTi);
- UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy());
-
- if (mTrashTi->childCount()==0)
- selectDocument(NULL);
- else
- selectDocument(((UBDocumentProxyTreeItem*)mTrashTi->child(0))->proxy());
- reloadThumbnails();
- }
- }
- }
- else if (groupTi)
- {
- if (groupTi == mTrashTi)
- {
- if(UBApplication::mainWindow->yesNoQuestion(tr("Empty Trash"), tr("Are you sure you want to empty trash?")))
- {
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- QList<UBDocumentProxyTreeItem*> toBeDeleted;
-
- for (int i = 0; i < groupTi->childCount(); i++)
- {
- UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
- if (proxyTi && proxyTi->proxy())
- toBeDeleted << proxyTi;
- }
-
- showMessage(tr("Emptying trash"));
-
- for (int i = 0; i < toBeDeleted.count(); i++)
- {
- UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i);
-
- proxyTi->parent()->removeChild(proxyTi);
- UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy());
- }
-
- showMessage(tr("Emptied trash"));
-
- QApplication::restoreOverrideCursor();
- mMainWindow->actionDelete->setEnabled(false);
- }
- }
- else
- {
- if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Folder"), tr("Are you sure you want to remove the folder '%1' and all its content?").arg(groupTi->groupName())))
- {
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- moveFolderToTrash(groupTi);
- QApplication::restoreOverrideCursor();
- }
- }
- }
- }
-}
-
-
-void UBDocumentController::exportDocument()
-{
- QAction *currentExportAction = qobject_cast<QAction *>(sender());
- QVariant actionData = currentExportAction->data();
- UBExportAdaptor* selectedExportAdaptor = UBDocumentManager::documentManager()->supportedExportAdaptors()[actionData.toInt()];
-
- UBDocumentProxy* proxy = selectedDocumentProxy();
-
- if (proxy)
- {
- selectedExportAdaptor->persist(proxy);
- emit exportDone();
- }
- else
- {
- showMessage(tr("No document selected!"));
- }
-}
-
-
-void UBDocumentController::documentZoomSliderValueChanged (int value)
-{
- mDocumentUI->thumbnailWidget->setThumbnailWidth(value);
-
- UBSettings::settings()->documentThumbnailWidth->set(value);
-}
-
-
-void UBDocumentController::loadDocumentProxies()
-{
- QList<QPointer<UBDocumentProxy> > proxies = UBPersistenceManager::persistenceManager()->documentProxies;
-
- QStringList emptyGroupNames = UBSettings::settings()->value("Document/EmptyGroupNames", QStringList()).toStringList();
-
- mDocumentUI->documentTreeWidget->clear();
-
- QMap<QString, UBDocumentGroupTreeItem*> groupNamesMap;
-
- UBDocumentGroupTreeItem* emptyGroupNameTi = 0;
-
- mTrashTi = new UBDocumentGroupTreeItem(0, false); // deleted by the tree widget
- mTrashTi->setGroupName(mDocumentTrashGroupName);
- mTrashTi->setIcon(0, QIcon(":/images/trash.png"));
-
- foreach (QPointer<UBDocumentProxy> proxy, proxies)
- {
- if (proxy)
- {
- QString docGroup = proxy->metaData(UBSettings::documentGroupName).toString();
-
- bool isEmptyGroupName = false;
- bool isInTrash = false;
-
- if (docGroup.isEmpty()) // #see https://trac.assembla.com/uniboard/ticket/426
- {
- docGroup = mDefaultDocumentGroupName;
- isEmptyGroupName = true;
- }
- else if (docGroup.startsWith(UBSettings::trashedDocumentGroupNamePrefix))
- {
- isInTrash = true;
- }
-
- QString docName = proxy->metaData(UBSettings::documentName).toString();
-
- if (emptyGroupNames.contains(docGroup))
- emptyGroupNames.removeAll(docGroup);
-
- if (!groupNamesMap.contains(docGroup) && !isInTrash)
- {
- UBDocumentGroupTreeItem* docGroupItem = new UBDocumentGroupTreeItem(0, !isEmptyGroupName); // deleted by the tree widget
- groupNamesMap.insert(docGroup, docGroupItem);
- docGroupItem->setGroupName(docGroup);
-
- if (isEmptyGroupName)
- emptyGroupNameTi = docGroupItem;
- }
-
- UBDocumentGroupTreeItem* docGroupItem;
- if (isInTrash)
- docGroupItem = mTrashTi;
- else
- docGroupItem = groupNamesMap.value(docGroup);
-
- QTreeWidgetItem* docItem = new UBDocumentProxyTreeItem(docGroupItem, proxy, !isInTrash);
- docItem->setText(0, docName);
-
- if (mBoardController->selectedDocument() == proxy)
- {
- mDocumentUI->documentTreeWidget->expandItem(docGroupItem);
- mDocumentUI->documentTreeWidget->setCurrentItem(docGroupItem);
- }
- }
- }
-
- foreach (const QString emptyGroupName, emptyGroupNames)
- {
- UBDocumentGroupTreeItem* docGroupItem = new UBDocumentGroupTreeItem(0); // deleted by the tree widget
- groupNamesMap.insert(emptyGroupName, docGroupItem);
- docGroupItem->setGroupName(emptyGroupName);
- }
-
- QList<QString> groupNamesList = groupNamesMap.keys();
- qSort(groupNamesList);
-
- foreach (const QString groupName, groupNamesList)
- {
- UBDocumentGroupTreeItem* ti = groupNamesMap.value(groupName);
-
- if (ti != emptyGroupNameTi)
- mDocumentUI->documentTreeWidget->addTopLevelItem(ti);
- }
-
- if (emptyGroupNameTi)
- mDocumentUI->documentTreeWidget->addTopLevelItem(emptyGroupNameTi);
-
- mDocumentUI->documentTreeWidget->addTopLevelItem(mTrashTi);
-}
-
-
-void UBDocumentController::itemClicked(QTreeWidgetItem * item, int column )
-{
- Q_UNUSED(item);
- Q_UNUSED(column);
-
- selectDocument(selectedDocumentProxy(), false);
- itemSelectionChanged();
-}
-
-
-void UBDocumentController::itemChanged(QTreeWidgetItem * item, int column)
-{
- UBDocumentProxyTreeItem* proxyItem = dynamic_cast<UBDocumentProxyTreeItem*>(item);
-
- disconnect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*))
- , this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
-
- if (proxyItem)
- {
- if (proxyItem->proxy()->metaData(UBSettings::documentName).toString() != item->text(column))
- {
- proxyItem->proxy()->setMetaData(UBSettings::documentName, item->text(column));
- UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyItem->proxy());
- }
- }
- else
- {
- // it is a group
- UBDocumentGroupTreeItem* editedGroup = dynamic_cast<UBDocumentGroupTreeItem*>(item);
- if (editedGroup)
- {
- for (int i = 0; i < item->childCount(); i++)
- {
- UBDocumentProxyTreeItem* childItem = dynamic_cast<UBDocumentProxyTreeItem*>(item->child(i));
-
- if (childItem)
- {
- QString groupName;
- if (0 != (item->flags() & Qt::ItemIsEditable))
- {
- childItem->proxy()->setMetaData(UBSettings::documentGroupName, item->text(column));
- UBPersistenceManager::persistenceManager()->persistDocumentMetadata(childItem->proxy());
- }
- }
- }
- }
- }
-
- connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)),
- this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
-}
-
-
-void UBDocumentController::importFile()
-{
- UBDocumentGroupTreeItem* group = selectedDocumentGroupTreeItem();
- UBDocumentManager *docManager = UBDocumentManager::documentManager();
-
- if (group)
- {
- QString defaultPath = UBSettings::settings()->lastImportFilePath->get().toString();
- QString filePath = QFileDialog::getOpenFileName(mParentWidget, tr("Open Supported File"),
- defaultPath, docManager->importFileFilter());
-
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- QApplication::processEvents();
- QFileInfo fileInfo(filePath);
- UBSettings::settings()->lastImportFilePath->set(QVariant(fileInfo.absolutePath()));
-
- if (filePath.length() > 0)
- {
- UBDocumentProxy* createdDocument = 0;
- QApplication::processEvents();
- QFile selectedFile(filePath);
-
- QString groupName = group->groupName();
-
- if (groupName == mDefaultDocumentGroupName || fileInfo.suffix() != "ubz")
- groupName = "";
-
- showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true);
-
- createdDocument = docManager->importFile(selectedFile, groupName);
-
- if (createdDocument)
- {
- selectDocument(createdDocument, false);
- }
- else
- {
- showMessage(tr("Failed to import file ... "));
- }
- }
-
- QApplication::restoreOverrideCursor();
- }
-}
-
-void UBDocumentController::addFolderOfImages()
-{
- UBDocumentProxy* document = selectedDocumentProxy();
-
- if (document)
- {
- QString defaultPath = UBSettings::settings()->lastImportFolderPath->get().toString();
-
- QString imagesDir = QFileDialog::getExistingDirectory(mParentWidget, tr("Import all Images from Folder"), defaultPath);
- QDir parentImageDir(imagesDir);
- parentImageDir.cdUp();
-
- UBSettings::settings()->lastImportFolderPath->set(QVariant(parentImageDir.absolutePath()));
-
- if (imagesDir.length() > 0)
- {
- QDir dir(imagesDir);
-
- int importedImageNumber
- = UBDocumentManager::documentManager()->addImageDirToDocument(dir, document);
-
- if (importedImageNumber == 0)
- {
- showMessage(tr("Folder does not contain any image files"));
- UBApplication::applicationController->showDocument();
- }
- else
- {
- document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- UBMetadataDcSubsetAdaptor::persist(document);
- reloadThumbnails();
- }
- }
- }
-}
-
-
-void UBDocumentController::addFileToDocument()
-{
- UBDocumentProxy* document = selectedDocumentProxy();
-
- if (document)
- {
- addFileToDocument(document);
- reloadThumbnails();
- }
-}
-
-
-bool UBDocumentController::addFileToDocument(UBDocumentProxy* document)
-{
- QString defaultPath = UBSettings::settings()->lastImportFilePath->get().toString();
- QString filePath = QFileDialog::getOpenFileName(mParentWidget, tr("Open Supported File"), defaultPath, UBDocumentManager::documentManager()->importFileFilter());
-
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
- QApplication::processEvents();
-
- QFileInfo fileInfo(filePath);
- UBSettings::settings()->lastImportFilePath->set(QVariant(fileInfo.absolutePath()));
-
- bool success = false;
-
- if (filePath.length() > 0)
- {
- QApplication::processEvents(); // NOTE: We performed this just a few lines before. Is it really necessary to do it again here??
- QFile selectedFile(filePath);
-
- showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true);
-
- QStringList fileNames;
- fileNames << filePath;
- success = UBDocumentManager::documentManager()->addFilesToDocument(document, fileNames);
-
- if (success)
- {
- document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- UBMetadataDcSubsetAdaptor::persist(document);
- }
- else
- {
- showMessage(tr("Failed to import file ... "));
- }
- }
-
- QApplication::restoreOverrideCursor();
-
- return success;
-}
-
-
-void UBDocumentController::moveSceneToIndex(UBDocumentProxy* proxy, int source, int target)
-{
- if (UBDocumentContainer::movePageToIndex(source, target))
- {
- proxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- UBMetadataDcSubsetAdaptor::persist(proxy);
-
- mDocumentUI->thumbnailWidget->hightlightItem(target);
- }
-}
-
-
-void UBDocumentController::thumbnailViewResized()
-{
- int maxWidth = qMin(UBSettings::maxThumbnailWidth, mDocumentUI->thumbnailWidget->width());
-
- mDocumentUI->documentZoomSlider->setMaximum(maxWidth);
-}
-
-
-void UBDocumentController::pageSelectionChanged()
-{
- if (mIsClosing)
- return;
-
- bool pageSelected = mDocumentUI->thumbnailWidget->selectedItems().count() > 0;
-
- if (pageSelected)
- mSelectionType = Page;
- else
- mSelectionType = None;
-
- selectionChanged();
-}
-
-
-void UBDocumentController::selectionChanged()
-{
- if (mIsClosing)
- return;
-
- int pageCount = -1;
-
- UBDocumentProxyTreeItem* proxyTi = selectedDocumentProxyTreeItem();
-
- if (proxyTi && proxyTi->proxy())
- pageCount = proxyTi->proxy()->pageCount();
-
- bool pageSelected = (mSelectionType == Page);
- bool groupSelected = (mSelectionType == Folder);
- bool docSelected = (mSelectionType == Document);
-
- bool trashSelected = false;
- if (groupSelected && selectedDocumentGroupTreeItem())
- trashSelected = selectedDocumentGroupTreeItem()->isTrashFolder();
-
- if ((docSelected || pageSelected) && proxyTi)
- trashSelected = dynamic_cast<UBDocumentGroupTreeItem*>(proxyTi->parent())->isTrashFolder();
-
- bool defaultGroupSelected = false;
- if (groupSelected && selectedDocumentGroupTreeItem())
- defaultGroupSelected = selectedDocumentGroupTreeItem()->isDefaultFolder();
-
- mMainWindow->actionNewDocument->setEnabled((groupSelected || docSelected || pageSelected) && !trashSelected);
- mMainWindow->actionExport->setEnabled((docSelected || pageSelected) && !trashSelected);
- bool firstSceneSelected = false;
- if(docSelected)
- mMainWindow->actionDuplicate->setEnabled(!trashSelected);
- else if(pageSelected){
- QList<QGraphicsItem*> selection = mDocumentUI->thumbnailWidget->selectedItems();
- if(pageCount == 1)
- mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(0)));
- else{
- for(int i = 0; i < selection.count() && !firstSceneSelected; i += 1){
- if(dynamic_cast<UBSceneThumbnailPixmap*>(selection.at(i))->sceneIndex() == 0){
- mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(0)));
- firstSceneSelected = true;
- }
- }
- if(!firstSceneSelected)
- mMainWindow->actionDuplicate->setEnabled(!trashSelected);
- }
- }
- else
- mMainWindow->actionDuplicate->setEnabled(false);
-
- mMainWindow->actionOpen->setEnabled((docSelected || pageSelected) && !trashSelected);
- mMainWindow->actionRename->setEnabled((groupSelected || docSelected) && !trashSelected && !defaultGroupSelected);
-
- mMainWindow->actionAddToWorkingDocument->setEnabled(pageSelected
- && !(selectedDocumentProxy() == mBoardController->selectedDocument()) && !trashSelected);
-
- bool deleteEnabled = false;
- if (trashSelected)
- {
- if (docSelected)
- deleteEnabled = true;
- else if (groupSelected && selectedDocumentGroupTreeItem())
- {
- if (selectedDocumentGroupTreeItem()->childCount() > 0)
- deleteEnabled = true;
- }
- }
- else
- {
- deleteEnabled = groupSelected || docSelected || pageSelected;
- }
-
- if (pageSelected && (pageCount == mDocumentUI->thumbnailWidget->selectedItems().count()))
- {
- deleteEnabled = false;
- }
-
- if(pageSelected && firstSceneSelected)
- deleteEnabled = false;
-
- mMainWindow->actionDelete->setEnabled(deleteEnabled);
-
- if (trashSelected)
- {
- if (docSelected)
- {
- mMainWindow->actionDelete->setIcon(QIcon(":/images/toolbar/deleteDocument.png"));
- mMainWindow->actionDelete->setText(tr("Delete"));
- }
- else
- {
- mMainWindow->actionDelete->setIcon(QIcon(":/images/trash.png"));
- mMainWindow->actionDelete->setText(tr("Empty"));
- }
- }
- else
- {
- mMainWindow->actionDelete->setIcon(QIcon(":/images/trash.png"));
- mMainWindow->actionDelete->setText(tr("Trash"));
- }
-
- mMainWindow->actionDocumentAdd->setEnabled((docSelected || pageSelected) && !trashSelected);
- mMainWindow->actionImport->setEnabled(!trashSelected);
-
-}
-
-
-void UBDocumentController::documentSceneChanged(UBDocumentProxy* proxy, int pSceneIndex)
-{
- Q_UNUSED(pSceneIndex);
-
- if (proxy == selectedDocumentProxy())
- {
- reloadThumbnails();
- }
-}
-
-
-void UBDocumentController::pageDoubleClicked(QGraphicsItem* item, int index)
-{
- Q_UNUSED(item);
- Q_UNUSED(index);
-
- bool pageSelected = (mSelectionType == Page);
- bool groupSelected = (mSelectionType == Folder);
- bool docSelected = (mSelectionType == Document);
-
- bool trashSelected = false;
- if (groupSelected && selectedDocumentGroupTreeItem())
- trashSelected = selectedDocumentGroupTreeItem()->isTrashFolder();
- UBDocumentProxyTreeItem* proxyTi = selectedDocumentProxyTreeItem();
- if ((docSelected || pageSelected) && proxyTi)
- trashSelected = dynamic_cast<UBDocumentGroupTreeItem*>(proxyTi->parent())->isTrashFolder();
- if (trashSelected) return;
-
- openSelectedItem();
-}
-
-
-void UBDocumentController::pageClicked(QGraphicsItem* item, int index)
-{
- Q_UNUSED(item);
- Q_UNUSED(index);
-
- pageSelectionChanged();
-}
-
-
-void UBDocumentController::closing()
-{
- mIsClosing = true;
-
- QStringList emptyGroups;
-
- for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
- {
- QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
-
- if (item->childCount() == 0)
- {
- UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
- if (groupItem)
- {
- QString groupName = groupItem->groupName();
- if (!emptyGroups.contains(groupName) && groupName != mDocumentTrashGroupName)
- emptyGroups << groupName;
- }
- }
- }
-
- UBSettings::settings()->setValue("Document/EmptyGroupNames", emptyGroups);
-
-}
-
-void UBDocumentController::addToDocument()
-{
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
- QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
-
- if (selectedItems.count() > 0)
- {
- int oldActiveSceneIndex = mBoardController->activeSceneIndex();
-
- QList<QPair<UBDocumentProxy*, int> > pageInfoList;
-
- foreach (QGraphicsItem* item, selectedItems)
- {
- UBSceneThumbnailPixmap* thumb = dynamic_cast<UBSceneThumbnailPixmap*> (item);
-
- if (thumb && thumb->proxy())
- {
- QPair<UBDocumentProxy*, int> pageInfo(thumb->proxy(), thumb->sceneIndex());
- pageInfoList << pageInfo;
- }
- }
-
- for (int i = 0; i < pageInfoList.length(); i++)
- {
- mBoardController->addScene(pageInfoList.at(i).first, pageInfoList.at(i).second, true);
- }
-
- int newActiveSceneIndex = selectedItems.count() == mBoardController->selectedDocument()->pageCount() ? 0 : oldActiveSceneIndex + 1;
- mDocumentUI->thumbnailWidget->selectItemAt(newActiveSceneIndex, false);
- selectDocument(mBoardController->selectedDocument());
- mBoardController->selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- UBMetadataDcSubsetAdaptor::persist(mBoardController->selectedDocument());
-
- UBApplication::applicationController->showBoard();
- }
-
- QApplication::restoreOverrideCursor();
-}
-
-
-void UBDocumentController::addDocumentInTree(UBDocumentProxy* pDocument)
-{
- QString documentName = pDocument->name();
- QString documentGroup = pDocument->groupName();
- if (documentGroup.isEmpty())
- {
- documentGroup = mDefaultDocumentGroupName;
- }
- UBDocumentGroupTreeItem* group = 0;
- if (documentGroup.startsWith(UBSettings::trashedDocumentGroupNamePrefix))
- {
- group = mTrashTi;
- }
- else
- {
- for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
- {
- QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
- UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
- if (groupItem->groupName() == documentGroup)
- {
- group = groupItem;
- break;
- }
- }
- }
-
- if (group == 0)
- {
- group = new UBDocumentGroupTreeItem(0); // deleted by the tree widget
- group->setGroupName(documentGroup);
- mDocumentUI->documentTreeWidget->addTopLevelItem(group);
- }
-
- UBDocumentProxyTreeItem *ti = new UBDocumentProxyTreeItem(group, pDocument, !group->isTrashFolder());
- ti->setText(0, documentName);
-}
-
-
-void UBDocumentController::updateDocumentInTree(UBDocumentProxy* pDocument)
-{
- QTreeWidgetItemIterator it(mDocumentUI->documentTreeWidget);
- while (*it)
- {
- UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>((*it));
-
- if (pi && pi->proxy() == pDocument)
- {
- pi->setText(0, pDocument->name());
- break;
- }
- ++it;
- }
-}
-
-
-QStringList UBDocumentController::allGroupNames()
-{
- QStringList result;
-
- for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
- {
- QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
- UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
- result << groupItem->groupName();
- }
-
- return result;
-}
-
-
-void UBDocumentController::renameSelectedItem()
-{
- if (mDocumentUI->documentTreeWidget->selectedItems().count() > 0)
- mDocumentUI->documentTreeWidget->editItem(mDocumentUI->documentTreeWidget->selectedItems().at(0));
-}
-
-
-bool UBDocumentController::isOKToOpenDocument(UBDocumentProxy* proxy)
-{
- //check version
- QString docVersion = proxy->metaData(UBSettings::documentVersion).toString();
-
- if (docVersion.isEmpty() || docVersion.startsWith("4.1") || docVersion.startsWith("4.2")
- || docVersion.startsWith("4.3") || docVersion.startsWith("4.4") || docVersion.startsWith("4.5")
- || docVersion.startsWith("4.6")) // TODO UB 4.7 update if necessary
- {
- return true;
- }
- else
- {
- if (UBApplication::mainWindow->yesNoQuestion(tr("Open Document"),
- tr("The document '%1' has been generated with a newer version of Sankore (%2). By opening it, you may lose some information. Do you want to proceed?")
- .arg(proxy->metaData(UBSettings::documentName).toString())
- .arg(docVersion)))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-}
-
-
-void UBDocumentController::showMessage(const QString& message, bool showSpinningWheel)
-{
- if (mMessageWindow)
- {
- int margin = UBSettings::boardMargin;
-
- QRect newSize = mDocumentUI->thumbnailWidget->geometry();
-
- #ifdef Q_WS_MACX
- QPoint point(newSize.left() + margin, newSize.bottom() - mMessageWindow->height() - margin);
- mMessageWindow->move(mDocumentUI->thumbnailWidget->mapToGlobal(point));
- #else
- mMessageWindow->move(margin, newSize.height() - mMessageWindow->height() - margin);
- #endif
-
- mMessageWindow->showMessage(message, showSpinningWheel);
- }
-}
-
-
-void UBDocumentController::hideMessage()
-{
- if (mMessageWindow)
- mMessageWindow->hideMessage();
-}
-
-
-void UBDocumentController::addImages()
-{
- UBDocumentProxy* document = selectedDocumentProxy();
-
- if (document)
- {
- QString defaultPath = UBSettings::settings()->lastImportFolderPath->get().toString();
-
- QString extensions;
-
- foreach (QString ext, UBSettings::settings()->imageFileExtensions)
- {
- extensions += " *.";
- extensions += ext;
- }
-
- QStringList images = QFileDialog::getOpenFileNames(mParentWidget, tr("Add all Images to Document"),
- defaultPath, tr("All Images (%1)").arg(extensions));
-
- if (images.length() > 0)
- {
- QFileInfo firstImage(images.at(0));
-
- UBSettings::settings()->lastImportFolderPath->set(QVariant(firstImage.absoluteDir().absolutePath()));
-
- int importedImageNumber
- = UBDocumentManager::documentManager()->addFilesToDocument(document, images);
-
- if (importedImageNumber == 0)
- {
- UBApplication::showMessage(tr("Selection does not contain any image files!"));
- UBApplication::applicationController->showDocument();
- }
- else
- {
- document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- UBMetadataDcSubsetAdaptor::persist(document);
- reloadThumbnails();
- }
- }
- }
-}
-
-
-void UBDocumentController::toggleDocumentToolsPalette()
-{
- if (!mToolsPalette->isVisible() && !mToolsPalettePositionned)
- {
- mToolsPalette->adjustSizeAndPosition();
- int left = controlView()->width() - 20 - mToolsPalette->width();
- int top = (controlView()->height() - mToolsPalette->height()) / 2;
-
- mToolsPalette->setCustomPosition(true);
- mToolsPalette->move(left, top);
-
- mToolsPalettePositionned = true;
- }
-
- bool visible = mToolsPalette->isVisible();
- mToolsPalette->setVisible(!visible);
-}
-
-
-void UBDocumentController::cut()
-{
- // TODO - implemented me
-}
-
-
-void UBDocumentController::copy()
-{
- // TODO - implemented me
-}
-
-
-void UBDocumentController::paste()
-{
- // TODO - implemented me
-}
-
-
-void UBDocumentController::focusChanged(QWidget *old, QWidget *current)
-{
- Q_UNUSED(old);
-
- if (current == mDocumentUI->thumbnailWidget)
- {
- if (mDocumentUI->thumbnailWidget->selectedItems().count() > 0)
- mSelectionType = Page;
- else
- mSelectionType = None;
- }
- else if (current == mDocumentUI->documentTreeWidget)
- {
- if (selectedDocumentProxy())
- mSelectionType = Document;
- else if (selectedDocumentGroupTreeItem())
- mSelectionType = Folder;
- else
- mSelectionType = None;
- }
- else if (current == mDocumentUI->documentZoomSlider)
- {
- if (mDocumentUI->thumbnailWidget->selectedItems().count() > 0)
- mSelectionType = Page;
- else
- mSelectionType = None;
- }
- else
- {
- if (old != mDocumentUI->thumbnailWidget &&
- old != mDocumentUI->documentTreeWidget &&
- old != mDocumentUI->documentZoomSlider)
- {
- mSelectionType = None;
- }
- }
-
- selectionChanged();
-}
-
-void UBDocumentController::deletePages(QList<QGraphicsItem *> itemsToDelete)
-{
- if (itemsToDelete.count() > 0)
- {
- QList<int> sceneIndexes;
- UBDocumentProxy* proxy = 0;
-
- foreach (QGraphicsItem* item, itemsToDelete)
- {
- UBSceneThumbnailPixmap* thumb = dynamic_cast<UBSceneThumbnailPixmap*> (item);
-
- if (thumb)
- {
- proxy = thumb->proxy();
- if (proxy)
- {
- sceneIndexes.append(thumb->sceneIndex());
- }
- }
- }
-
- if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Page"), tr("Are you sure you want to remove %n page(s) from the selected document '%1'?", "", sceneIndexes.count()).arg(proxy->metaData(UBSettings::documentName).toString())))
- {
- UBDocumentContainer::deletePages(sceneIndexes);
-
- proxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
- UBMetadataDcSubsetAdaptor::persist(proxy);
-
- int minIndex = proxy->pageCount() - 1;
- foreach (int i, sceneIndexes)
- minIndex = qMin(i, minIndex);
-
- mDocumentUI->thumbnailWidget->selectItemAt(minIndex);
- }
- }
-}
-
-int UBDocumentController::getSelectedItemIndex()
-{
- QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
-
- if (selectedItems.count() > 0)
- {
- UBSceneThumbnailPixmap* thumb = dynamic_cast<UBSceneThumbnailPixmap*> (selectedItems.last());
- return thumb->sceneIndex();
- }
- else return -1;
-}
-
-bool UBDocumentController::pageCanBeMovedUp(int page)
-{
- if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
- return page >= 2;
- else
- return page >= 1;
-}
-
-bool UBDocumentController::pageCanBeMovedDown(int page)
-{
- if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
- return page != 0 && page < selectedDocument()->pageCount() - 1;
- else
- return page < selectedDocument()->pageCount() - 1;
-}
-
-bool UBDocumentController::pageCanBeDuplicated(int page)
-{
- return page != 0;
-}
-
-bool UBDocumentController::pageCanBeDeleted(int page)
-{
- return page != 0;
-}
-
-void UBDocumentController::refreshDocumentThumbnailsView(UBDocumentContainer*)
-{
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
- QList<QGraphicsItem*> items;
- QList<QUrl> itemsPath;
-
- UBDocumentProxy *proxy = selectedDocumentProxy();
- QGraphicsPixmapItem *selection = 0;
-
- QStringList labels;
-
- if (proxy)
- {
- setDocument(proxy);
-
- for (int i = 0; i < selectedDocument()->pageCount(); i++)
- {
- const QPixmap* pix = pageAt(i);
- QGraphicsPixmapItem *pixmapItem = new UBSceneThumbnailPixmap(*pix, proxy, i); // deleted by the tree widget
-
- if (proxy == mBoardController->selectedDocument() && mBoardController->activeSceneIndex() == i)
- {
- selection = pixmapItem;
- }
-
- items << pixmapItem;
- int pageIndex = pageFromSceneIndex(i);
- if(pageIndex)
- labels << tr("Page %1").arg(pageIndex);
- else
- labels << tr("Title page");
-
- itemsPath.append(QUrl::fromLocalFile(proxy->persistencePath() + QString("/pages/%1").arg(UBDocumentContainer::pageFromSceneIndex(i))));
- }
- }
-
- mDocumentUI->thumbnailWidget->setGraphicsItems(items, itemsPath, labels, UBApplication::mimeTypeUniboardPage);
-
- UBDocumentProxyTreeItem* proxyTi = selectedDocumentProxyTreeItem();
- if (proxyTi && (proxyTi->parent() == mTrashTi))
- mDocumentUI->thumbnailWidget->setDragEnabled(false);
- else
- mDocumentUI->thumbnailWidget->setDragEnabled(true);
-
- mDocumentUI->thumbnailWidget->ensureVisible(0, 0, 10, 10);
-
- if (selection) {
- disconnect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
- UBSceneThumbnailPixmap *currentScene = dynamic_cast<UBSceneThumbnailPixmap*>(selection);
- if (currentScene)
- mDocumentUI->thumbnailWidget->hightlightItem(currentScene->sceneIndex());
- connect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
- }
-
- QApplication::restoreOverrideCursor();
-}
+
+
+#include "UBDocumentController.h"
+
+#include <QtCore>
+#include <QtGui>
+
+#include "frameworks/UBFileSystemUtils.h"
+#include "frameworks/UBStringUtils.h"
+#include "frameworks/UBPlatformUtils.h"
+
+#include "core/UBApplication.h"
+#include "core/UBPersistenceManager.h"
+#include "core/UBDocumentManager.h"
+#include "core/UBApplicationController.h"
+#include "core/UBSettings.h"
+#include "core/UBSetting.h"
+#include "core/UBMimeData.h"
+
+#include "adaptors/UBExportPDF.h"
+#include "adaptors/UBThumbnailAdaptor.h"
+
+#include "adaptors/UBMetadataDcSubsetAdaptor.h"
+
+#include "board/UBBoardController.h"
+#include "board/UBBoardPaletteManager.h"
+#include "board/UBDrawingController.h"
+
+
+#include "gui/UBThumbnailView.h"
+#include "gui/UBDocumentTreeWidget.h"
+#include "gui/UBMousePressFilter.h"
+#include "gui/UBMessageWindow.h"
+#include "gui/UBMainWindow.h"
+#include "gui/UBDocumentToolsPalette.h"
+
+#include "domain/UBGraphicsScene.h"
+#include "domain/UBGraphicsSvgItem.h"
+#include "domain/UBGraphicsPixmapItem.h"
+
+#include "document/UBDocumentProxy.h"
+
+#include "ui_documents.h"
+#include "ui_mainWindow.h"
+
+#include "core/memcheck.h"
+
+static bool lessThan(UBDocumentTreeNode *lValue, UBDocumentTreeNode *rValue)
+{
+ if (lValue->nodeType() == UBDocumentTreeNode::Catalog) {
+ if (rValue->nodeType() == UBDocumentTreeNode::Catalog) {
+ return lValue->nodeName() < rValue->nodeName();
+ } else {
+ return true;
+ }
+ } else {
+ if (rValue->nodeType() == UBDocumentTreeNode::Catalog) {
+ return false;
+ } else {
+ Q_ASSERT(lValue->proxyData());
+ Q_ASSERT(rValue->proxyData());
+
+ QDateTime lTime = lValue->proxyData()->documentDate();
+ QDateTime rTime = rValue->proxyData()->documentDate();
+
+ return lTime > rTime;
+ }
+ }
+
+ return false;
+}
+
+UBDocumentReplaceDialog::UBDocumentReplaceDialog(const QString &pIncommingName, const QStringList &pFileList, QWidget *parent, Qt::WindowFlags pFlags)
+ : QDialog(parent, pFlags)
+ , mFileNameList(pFileList)
+ , mIncommingName(pIncommingName)
+ , acceptText(tr("Accept"))
+ , replaceText(tr("Replace"))
+ , cancelText(tr("Cancel"))
+ , mLabelText(0)
+{
+ this->setStyleSheet("background:white;");
+
+ QVBoxLayout *mainLayout = new QVBoxLayout(this);
+
+ QVBoxLayout *labelLayout = new QVBoxLayout();
+
+ mLabelText = new QLabel(labelTextWithName(pIncommingName), this);
+ mLineEdit = new QLineEdit(this);
+ mLineEdit->setText(pIncommingName);
+ mLineEdit->selectedText();
+
+ mValidator = new QRegExpValidator(QRegExp("[^\\/\\:\\?\\*\\|\\<\\>\\\"]{1,}"), this);
+ mLineEdit->setValidator(mValidator);
+ labelLayout->addWidget(mLabelText);
+ labelLayout->addWidget(mLineEdit);
+
+ QHBoxLayout *buttonLayout = new QHBoxLayout();
+
+ acceptButton = new QPushButton(acceptText, this);
+ QPushButton *cancelButton = new QPushButton(cancelText, this);
+ buttonLayout->addWidget(acceptButton);
+ buttonLayout->addWidget(cancelButton);
+
+ mainLayout->addLayout(labelLayout);
+ mainLayout->addLayout(buttonLayout);
+
+ acceptButton->setEnabled(false);
+
+ connect(acceptButton, SIGNAL(clicked()), this, SLOT(accept()));
+ connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
+ connect(mLineEdit, SIGNAL(textEdited(QString)), this, SLOT(reactOnTextChanged(QString)));
+
+ reactOnTextChanged(mIncommingName);
+}
+
+void UBDocumentReplaceDialog::setRegexp(const QRegExp pRegExp)
+{
+ mValidator->setRegExp(pRegExp);
+}
+bool UBDocumentReplaceDialog::validString(const QString &pStr)
+{
+ Q_UNUSED(pStr);
+ return mLineEdit->hasAcceptableInput();
+}
+
+void UBDocumentReplaceDialog::setFileNameAndList(const QString &fileName, const QStringList &pLst)
+{
+ mFileNameList = pLst;
+ mIncommingName = fileName;
+ mLabelText->setText(labelTextWithName(fileName));
+ mLineEdit->setText(fileName);
+ mLineEdit->selectedText();
+}
+
+QString UBDocumentReplaceDialog::labelTextWithName(const QString &documentName) const
+{
+ return tr("The name %1 is allready used.\nKeeping this name will replace the document.\nProviding a new name will create a new document.")
+ .arg(documentName);
+}
+
+void UBDocumentReplaceDialog::accept()
+{
+ QDialog::accept();
+}
+void UBDocumentReplaceDialog::reject()
+{
+ mLineEdit->clear();
+ emit closeDialog();
+
+ QDialog::reject();
+}
+
+void UBDocumentReplaceDialog::reactOnTextChanged(const QString &pStr)
+{
+// if !mFileNameList.contains(pStr.trimmed(), Qt::CaseSensitive)
+
+ if (!validString(pStr)) {
+ acceptButton->setEnabled(false);
+ mLineEdit->setStyleSheet("background:#FFB3C8;");
+ acceptButton->setEnabled(false);
+
+ } else if (mFileNameList.contains(pStr.trimmed(), Qt::CaseSensitive)) {
+ acceptButton->setEnabled(true);
+ mLineEdit->setStyleSheet("background:#FFB3C8;");
+ acceptButton->setText(replaceText);
+
+ } else {
+ acceptButton->setEnabled(true);
+ mLineEdit->setStyleSheet("background:white;");
+ acceptButton->setText(acceptText);
+ }
+}
+
+UBDocumentTreeNode::UBDocumentTreeNode(Type pType, const QString &pName, const QString &pDisplayName, UBDocumentProxy *pProxy ) :
+ mType(pType)
+ , mName(pName)
+ , mDisplayName(pDisplayName)
+ , mProxy(pProxy)
+{
+ if (pDisplayName.isEmpty()) {
+ mDisplayName = mName;
+ }
+ mParent = 0;
+}
+
+void UBDocumentTreeNode::addChild(UBDocumentTreeNode *pChild)
+{
+ if (pChild) {
+ mChildren += pChild;
+ pChild->mParent = this;
+ }
+}
+
+void UBDocumentTreeNode::insertChild(int pIndex, UBDocumentTreeNode *pChild)
+{
+ if (pChild) {
+ mChildren.insert(pIndex, pChild);
+ pChild->mParent = this;
+ }
+}
+
+void UBDocumentTreeNode::removeChild(int index)
+{
+ if (index < 0 || index > mChildren.count() - 1) {
+ return;
+ }
+
+ UBDocumentTreeNode *curChild = mChildren[index];
+ while (curChild->mChildren.count()) {
+ curChild->removeChild(0);
+ }
+
+ mChildren.removeAt(index);
+ delete curChild;
+}
+
+UBDocumentTreeNode *UBDocumentTreeNode::clone()
+{
+ return new UBDocumentTreeNode(this->mType
+ , this->mName
+ , this->mDisplayName
+ , this->mProxy ? new UBDocumentProxy(*this->mProxy)
+ : 0);
+}
+
+QString UBDocumentTreeNode::dirPathInHierarchy()
+{
+ QString result;
+ UBDocumentTreeNode *curNode = this;
+ //protect the 2nd level items
+ while (curNode->parentNode() && !curNode->isTopLevel()) {
+ result.prepend(curNode->parentNode()->nodeName() + "/");
+ curNode = curNode->parentNode();
+ }
+
+ if (result.endsWith("/")) {
+ result.truncate(result.count() - 1);
+ }
+
+ return result;
+}
+
+UBDocumentTreeNode::~UBDocumentTreeNode()
+{
+ foreach (UBDocumentTreeNode *curChildren, mChildren) {
+ delete(curChildren);
+ curChildren = 0;
+ }
+ if (mProxy)
+ delete mProxy;
+}
+
+UBDocumentTreeModel::UBDocumentTreeModel(QObject *parent) :
+ QAbstractItemModel(parent)
+ , mRootNode(0)
+{
+ UBDocumentTreeNode *rootNode = new UBDocumentTreeNode(UBDocumentTreeNode::Catalog, "root");
+
+ QString trashName = UBSettings::trashedDocumentGroupNamePrefix;
+
+ UBDocumentTreeNode *myDocsNode = new UBDocumentTreeNode(UBDocumentTreeNode::Catalog, UBPersistenceManager::myDocumentsName, tr("My documents"));
+ rootNode->addChild(myDocsNode);
+// mMyDocuments = createIndex(0, 0, myDocsNode);
+ UBDocumentTreeNode *modelsNode = new UBDocumentTreeNode(UBDocumentTreeNode::Catalog, UBPersistenceManager::modelsName, tr("Models"));
+ rootNode->addChild(modelsNode);
+// mModels = createIndex(1, 0, modelsNode);
+ UBDocumentTreeNode *trashNode = new UBDocumentTreeNode(UBDocumentTreeNode::Catalog, trashName, tr("Trash"));
+ rootNode->addChild(trashNode);
+// mTrash = createIndex(2, 0, trashNode);
+ UBDocumentTreeNode *untitledDocumentsNode = new UBDocumentTreeNode(UBDocumentTreeNode::Catalog, UBPersistenceManager::untitledDocumentsName, tr("Untitled documents"));
+ myDocsNode->addChild(untitledDocumentsNode);
+// mUntitledDocuments = createIndex(0, 0, untitledDocumentsNode);
+
+ setRootNode(rootNode);
+
+ mRoot = index(0, 0, QModelIndex());
+ mMyDocuments = index(0, 0, QModelIndex());
+ mModels = index(1, 0, QModelIndex());
+ mTrash = index(2, 0, QModelIndex());
+ mUntitledDocuments = index(0, 0, mMyDocuments);
+}
+
+QModelIndex UBDocumentTreeModel::index(int row, int column, const QModelIndex &parent) const
+{
+ if (!mRootNode || row < 0 || column < 0) {
+ return QModelIndex();
+ }
+
+ UBDocumentTreeNode *nodeParent = nodeFromIndex(parent);
+ if (!nodeParent || row > nodeParent->children().count() - 1) {
+ return QModelIndex();
+ }
+
+ UBDocumentTreeNode *requiredNode = nodeParent->children().at(row);
+ if(!requiredNode) {
+ return QModelIndex();
+ }
+
+ QModelIndex resIndex = createIndex(row, column, requiredNode);
+
+ return resIndex;
+}
+
+QModelIndex UBDocumentTreeModel::parent(const QModelIndex &child) const
+{
+ UBDocumentTreeNode *nodeChild = nodeFromIndex(child);
+ if (!nodeChild) {
+ return QModelIndex();
+ }
+
+ UBDocumentTreeNode *nodeParent = nodeChild->parentNode();
+ if (!nodeParent) {
+ return QModelIndex();
+ }
+
+ UBDocumentTreeNode *nodePreParent = nodeParent->parentNode();
+ if (!nodePreParent) {
+ return QModelIndex();
+ }
+
+ int row = nodePreParent->children().indexOf(nodeParent);
+
+ QModelIndex resIndex = createIndex(row, 0, nodeParent);
+
+ return resIndex;
+}
+
+int UBDocumentTreeModel::rowCount(const QModelIndex &parent) const
+{
+ if (parent.column() > 0) {
+ return 0;
+ }
+
+ UBDocumentTreeNode *nodeParent = nodeFromIndex(parent);
+ if (!nodeParent) {
+ return 0;
+ }
+
+ return nodeParent->children().count();
+}
+
+int UBDocumentTreeModel::columnCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent)
+ return 1;
+}
+
+QVariant UBDocumentTreeModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid()) {
+ return QVariant();
+ }
+
+ UBDocumentTreeNode *dataNode = nodeFromIndex(index);
+ if (!dataNode)
+ return QVariant();
+
+ if (index.column() == 0) {
+
+ switch (role) {
+ case (Qt::DecorationRole) :
+ if (mCurrentNode && mCurrentNode == dataNode) {
+ return QIcon(":images/currentDocument.png");
+ } else {
+ if (index == trashIndex()) {
+ return QIcon(":images/trash.png");
+ } else if (isConstant(index)) {
+ return QIcon(":images/libpalette/ApplicationsCategory.svg");
+ }
+ switch (static_cast<int>(dataNode->nodeType())) {
+ case UBDocumentTreeNode::Catalog :
+ return QIcon(":images/folder.png");
+ case UBDocumentTreeNode::Document :
+ return QIcon(":images/toolbar/board.png");
+ }
+ }
+ break;
+
+ case (Qt::DisplayRole) :
+ return dataNode->displayName();
+ break;
+
+ case (Qt::UserRole +1):
+ return QVariant::fromValue(dataNode);
+ break;
+
+ case (Qt::FontRole) :
+ if (isConstant(index)) {
+ QFont font;
+ font.setBold(true);
+ return font;
+ }
+ break;
+
+ case (Qt::ForegroundRole) :
+ if (isConstant(index)) {
+ return Qt::darkGray;
+ }
+ break;
+
+ case (Qt::BackgroundRole) :
+ if (isConstant(index)) {
+ return QBrush(0xD9DFEB);
+ }
+ if (mHighLighted.isValid() && index == mHighLighted) {
+ return QBrush(0x6682B5);
+ }
+ break;
+ }
+ }
+
+ return QVariant();
+}
+
+bool UBDocumentTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
+{
+ switch (role) {
+ case Qt::EditRole:
+ if (!index.isValid() || value.toString().isEmpty()) {
+ return false;
+ }
+ setNewName(index, value.toString());
+ return true;
+ }
+ return QAbstractItemModel::setData(index, value, role);
+}
+
+Qt::ItemFlags UBDocumentTreeModel::flags (const QModelIndex &index) const
+{
+ Qt::ItemFlags resultFlags = QAbstractItemModel::flags(index);
+ UBDocumentTreeNode *indexNode = nodeFromIndex(index);
+
+ if ( index.isValid() ) {
+ if (!indexNode->isRoot() && !isConstant(index)) {
+ if (!inTrash(index)) {
+ resultFlags |= Qt::ItemIsEditable;
+ }
+ resultFlags |= Qt::ItemIsDragEnabled;
+ }
+ if (indexNode->nodeType() == UBDocumentTreeNode::Catalog) {
+ resultFlags |= Qt::ItemIsDropEnabled;
+ }
+ }
+
+ return resultFlags;
+}
+
+QStringList UBDocumentTreeModel::mimeTypes() const
+{
+ QStringList types;
+ types << "text/uri-list" << "image/png" << "image/tiff" << "image/gif" << "image/jpeg";
+ return types;
+}
+
+QMimeData *UBDocumentTreeModel::mimeData (const QModelIndexList &indexes) const
+{
+ UBDocumentTreeMimeData *mimeData = new UBDocumentTreeMimeData();
+ QList <QModelIndex> indexList;
+ QList<QUrl> urlList;
+
+ foreach (QModelIndex index, indexes) {
+ if (index.isValid()) {
+ indexList.append(index);
+ urlList.append(QUrl());
+ }
+ }
+
+ mimeData->setUrls(urlList);
+ mimeData->setIndexes(indexList);
+
+ return mimeData;
+}
+
+bool UBDocumentTreeModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
+{
+ if (data->hasFormat(UBApplication::mimeTypeUniboardPage)) {
+ UBDocumentTreeNode *curNode = nodeFromIndex(index(row - 1, column, parent));
+ UBDocumentProxy *targetDocProxy = curNode->proxyData();
+ const UBMimeData *ubMime = qobject_cast <const UBMimeData*>(data);
+ if (!targetDocProxy || !ubMime || !ubMime->items().count()) {
+ qDebug() << "an error ocured while parsing " << UBApplication::mimeTypeUniboardPage;
+ return false;
+ }
+
+ int count = 0;
+ int total = ubMime->items().size();
+
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+
+ foreach (UBMimeDataItem sourceItem, ubMime->items())
+ {
+ count++;
+
+ UBApplication::applicationController->showMessage(tr("Copying page %1/%2").arg(count).arg(total), true);
+
+ // TODO UB 4.x Move following code to some controller class
+ UBGraphicsScene *scene = UBPersistenceManager::persistenceManager()->loadDocumentScene(sourceItem.documentProxy(), sourceItem.sceneIndex());
+ if (scene) {
+ foreach (QUrl relativeFile, scene->relativeDependencies()) {
+ QString source = scene->document()->persistencePath() + "/" + relativeFile.toString();
+ QString target = targetDocProxy->persistencePath() + "/" + relativeFile.toString();
+
+ QFileInfo fi(target);
+ QDir d = fi.dir();
+
+ d.mkpath(d.absolutePath());
+ QFile::copy(source, target);
+ }
+
+ UBPersistenceManager::persistenceManager()->insertDocumentSceneAt(targetDocProxy, scene, targetDocProxy->pageCount());
+
+ //due to incorrect generation of thumbnails of invisible scene I've used direct copying of thumbnail files
+ //it's not universal and good way but it's faster
+ QString from = sourceItem.documentProxy()->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", sourceItem.sceneIndex());
+ QString to = targetDocProxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", targetDocProxy->pageCount());
+ QFile::remove(to);
+ if (!UBFileSystemUtils::copy(from, to)) {
+ qDebug() << "can't copy from " << from << "to" << to;
+ }
+ }
+ }
+
+ QApplication::restoreOverrideCursor();
+
+ UBApplication::applicationController->showMessage(tr("%1 pages copied", "", total).arg(total), false);
+
+ return true;
+ }
+
+
+
+ const UBDocumentTreeMimeData *mimeData = qobject_cast<const UBDocumentTreeMimeData*>(data);
+ if (!mimeData) {
+ qDebug() << "Incorrect mimeData, only internal one supported";
+ return false;
+ }
+ if (!parent.isValid()) {
+ return false;
+ }
+ UBDocumentTreeNode *newParentNode = nodeFromIndex(parent);
+
+ if (!newParentNode) {
+ qDebug() << "incorrect incoming parent node;";
+ return false;
+ }
+
+ QList<QModelIndex> incomingIndexes = mimeData->indexes();
+
+ foreach (QModelIndex curIndex, incomingIndexes) {
+ QModelIndex clonedTopLevel = copyIndexToNewParent(curIndex, parent, action == Qt::MoveAction ? aReference : aContentCopy);
+ if (nodeFromIndex(curIndex) == mCurrentNode && action == Qt::MoveAction) {
+ emit currentIndexMoved(clonedTopLevel, curIndex);
+ }
+ }
+
+ Q_UNUSED(action)
+ Q_UNUSED(row)
+ Q_UNUSED(column)
+ Q_UNUSED(parent)
+
+ return true;
+}
+
+bool UBDocumentTreeModel::removeRows(int row, int count, const QModelIndex &parent)
+{
+ if (row < 0 || row + count > rowCount(parent))
+ return false;
+
+ beginRemoveRows( parent, row, row + count - 1);
+
+ UBDocumentTreeNode *parentNode = nodeFromIndex(parent);
+ for (int i = row; i < row + count; i++) {
+ UBDocumentTreeNode *curChildNode = parentNode->children().at(i);
+ QModelIndex curChildIndex = parent.child(i, 0);
+ if (curChildNode) {
+ if (rowCount(curChildIndex)) {
+ while (rowCount(curChildIndex)) {
+ removeRows(0, 1, curChildIndex);
+ }
+ }
+ }
+ mNewDocuments.removeAll(curChildNode->proxyData());
+ parentNode->removeChild(i);
+
+ }
+
+ endRemoveRows();
+ return true;
+}
+
+QModelIndex UBDocumentTreeModel::indexForNode(UBDocumentTreeNode *pNode) const
+{
+ if (pNode == 0) {
+ return QModelIndex();
+ }
+
+ return pIndexForNode(QModelIndex(), pNode);
+}
+
+QPersistentModelIndex UBDocumentTreeModel::persistentIndexForNode(UBDocumentTreeNode *pNode)
+{
+ return QPersistentModelIndex(indexForNode(pNode));
+}
+
+UBDocumentTreeNode *UBDocumentTreeModel::findProxy(UBDocumentProxy *pSearch, UBDocumentTreeNode *pParent) const
+{
+ foreach (UBDocumentTreeNode *curNode, pParent->children())
+ {
+ if (UBDocumentTreeNode::Catalog != curNode->nodeType())
+ {
+ if (curNode->proxyData()->theSameDocument(pSearch))
+ return curNode;
+ }
+ else if (curNode->children().count())
+ {
+ UBDocumentTreeNode *recursiveDescendResult = findProxy(pSearch, curNode);
+ if (recursiveDescendResult)
+ return findProxy(pSearch, curNode);
+ }
+ }
+
+ return 0;
+}
+
+QModelIndex UBDocumentTreeModel::pIndexForNode(const QModelIndex &parent, UBDocumentTreeNode *pNode) const
+{
+ for (int i = 0; i < rowCount(parent); i++) {
+ QModelIndex curIndex = index(i, 0, parent);
+ if (curIndex.internalPointer() == pNode) {
+ return curIndex;
+ } else if (rowCount(curIndex) > 0) {
+ QModelIndex recursiveDescendIndex = pIndexForNode(curIndex, pNode);
+ if (recursiveDescendIndex.isValid()) {
+ return recursiveDescendIndex;
+ }
+ }
+ }
+ return QModelIndex();
+}
+
+QPersistentModelIndex UBDocumentTreeModel::copyIndexToNewParent(const QModelIndex &source, const QModelIndex &newParent, eCopyMode pMode)
+{
+ UBDocumentTreeNode *nodeParent = nodeFromIndex(newParent);
+ UBDocumentTreeNode *nodeSource = nodeFromIndex(source);
+
+ if (!nodeParent || !nodeSource) {
+ return QModelIndex();
+ }
+
+ beginInsertRows(newParent, rowCount(newParent), rowCount(newParent));
+
+ UBDocumentTreeNode *clonedNodeSource = 0;
+ switch (static_cast<int>(pMode)) {
+ case aReference:
+ clonedNodeSource = nodeSource->clone();
+ if (mNewDocuments.contains(nodeSource->proxyData())) { //update references for session documents
+ mNewDocuments << clonedNodeSource->proxyData();
+
+ UBPersistenceManager::persistenceManager()->reassignDocProxy(clonedNodeSource->proxyData(), nodeSource->proxyData());
+ }
+ break;
+
+ case aContentCopy:
+ UBDocumentProxy* duplicatedProxy = 0;
+ if (nodeSource->nodeType() == UBDocumentTreeNode::Document && nodeSource->proxyData()) {
+ duplicatedProxy = UBPersistenceManager::persistenceManager()->duplicateDocument(nodeSource->proxyData());
+ duplicatedProxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ UBMetadataDcSubsetAdaptor::persist(duplicatedProxy);
+ }
+ clonedNodeSource = new UBDocumentTreeNode(nodeSource->nodeType()
+ , nodeSource->nodeName()
+ , nodeSource->displayName()
+ , duplicatedProxy);
+ break;
+ }
+
+ // Determine whether to provide a name with postfix if the name in current level allready exists
+ QString newName = clonedNodeSource->nodeName();
+ if ((source.parent() != newParent
+ || pMode != aReference)
+ && (newParent != trashIndex() || !inTrash(newParent))) {
+ newName = adjustNameForParentIndex(newName, newParent);
+ clonedNodeSource->setNodeName(newName);
+ }
+
+ if (clonedNodeSource->proxyData()) {
+ clonedNodeSource->proxyData()->setMetaData(UBSettings::documentGroupName, virtualPathForIndex(newParent));
+ clonedNodeSource->proxyData()->setMetaData(UBSettings::documentName, newName);
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(clonedNodeSource->proxyData());
+ }
+
+ addNode(clonedNodeSource, newParent);
+// nodeParent->addChild(clonedNodeSource);
+ endInsertRows();
+
+ QPersistentModelIndex newParentIndex = createIndex(rowCount(newParent), 0, clonedNodeSource);
+
+ if (rowCount(source)) {
+ for (int i = 0; i < rowCount(source); i++) {
+ QModelIndex curNewParentIndexChild = source.child(i, 0);
+ copyIndexToNewParent(curNewParentIndexChild, newParentIndex, pMode);
+ }
+ }
+
+ return newParentIndex;
+}
+
+void UBDocumentTreeModel::moveIndex(const QModelIndex &source, const QModelIndex &newParent)
+{
+ UBDocumentTreeNode *sourceNode = nodeFromIndex(source);
+ QPersistentModelIndex clonedTopLevel = copyIndexToNewParent(source, newParent);
+ if (sourceNode == mCurrentNode) {
+ mCurrentNode = nodeFromIndex(clonedTopLevel);
+ emit currentIndexMoved(clonedTopLevel, source);
+ }
+ removeRow(source.row(), source.parent());
+}
+
+void UBDocumentTreeModel::moveNode(const QModelIndex &source, const QModelIndex &newParent)
+{
+ Q_ASSERT(source.parent().isValid());
+
+ UBDocumentTreeNode *sourceNode = nodeFromIndex(source);
+ UBDocumentTreeNode *newParentNode = nodeFromIndex(newParent);
+
+ int destinationPosition = positionForParent(sourceNode, newParentNode);
+
+ if (source.row() != destinationPosition || source.parent() == newParent) {
+ beginMoveRows(source.parent(), source.row(), source.row(), newParent, destinationPosition);
+ sourceNode->parentNode()->children().removeAt(source.row());
+ newParentNode->insertChild(destinationPosition, sourceNode);
+ endMoveRows();
+ }
+}
+
+void UBDocumentTreeModel::setCurrentDocument(UBDocumentProxy *pDocument)
+{
+ UBDocumentTreeNode *testCurNode = findProxy(pDocument, mRootNode);
+
+ if (testCurNode) {
+ setCurrentNode(testCurNode);
+ }
+}
+
+QModelIndex UBDocumentTreeModel::indexForProxy(UBDocumentProxy *pSearch) const
+{
+// qDebug() << "looking for proxy" << pSearch;
+ UBDocumentTreeNode *proxy = findProxy(pSearch, mRootNode);
+ if (!proxy) {
+ return QModelIndex();
+ }
+
+ return indexForNode(proxy);
+}
+
+void UBDocumentTreeModel::setRootNode(UBDocumentTreeNode *pRoot)
+{
+ mRootNode = pRoot;
+ reset();
+}
+
+UBDocumentProxy *UBDocumentTreeModel::proxyForIndex(const QModelIndex &pIndex) const
+{
+ UBDocumentTreeNode *node = nodeFromIndex(pIndex);
+ if (!node) {
+ return 0;
+ }
+
+ return node->proxyData();
+}
+
+QString UBDocumentTreeModel::virtualDirForIndex(const QModelIndex &pIndex) const
+{
+ QString result;
+ UBDocumentTreeNode *curNode = nodeFromIndex(pIndex);
+ //protect the 2nd level items
+ while (curNode->parentNode() && !curNode->isTopLevel()) {
+ result.prepend(curNode->parentNode()->nodeName() + "/");
+ curNode = curNode->parentNode();
+ }
+
+ if (result.endsWith("/")) {
+ result.truncate(result.count() - 1);
+ }
+
+ return result;
+}
+
+QString UBDocumentTreeModel::virtualPathForIndex(const QModelIndex &pIndex) const
+{
+ UBDocumentTreeNode *curNode = nodeFromIndex(pIndex);
+ Q_ASSERT(curNode);
+
+ return virtualDirForIndex(pIndex) + "/" + curNode->nodeName();
+}
+
+QStringList UBDocumentTreeModel::nodeNameList(const QModelIndex &pIndex) const
+{
+ QStringList result;
+
+ UBDocumentTreeNode *catalog = nodeFromIndex(pIndex);
+ if (catalog->nodeType() != UBDocumentTreeNode::Catalog) {
+ return QStringList();
+ }
+
+ foreach (UBDocumentTreeNode *curNode, catalog->children()) {
+ result << curNode->nodeName();
+ }
+
+ return result;
+}
+
+bool UBDocumentTreeModel::newNodeAllowed(const QModelIndex &pSelectedIndex) const
+{
+ if (!pSelectedIndex.isValid()) {
+ return false;
+ }
+
+ if (inTrash(pSelectedIndex) || pSelectedIndex == trashIndex()) {
+ return false;
+ }
+
+ return true;
+}
+
+QModelIndex UBDocumentTreeModel::goTo(const QString &dir)
+{
+ QStringList pathList = dir.split("/", QString::SkipEmptyParts);
+
+ if (pathList.isEmpty()) {
+ return untitledDocumentsIndex();
+ }
+
+ if (pathList.first() != UBPersistenceManager::myDocumentsName
+ && pathList.first() != UBSettings::trashedDocumentGroupNamePrefix
+ && pathList.first() != UBPersistenceManager::modelsName) {
+ pathList.prepend(UBPersistenceManager::myDocumentsName);
+ }
+
+ QModelIndex parentIndex;
+
+ bool searchingNode = true;
+ while (!pathList.isEmpty())
+ {
+ QString curLevelName = pathList.takeFirst();
+ if (searchingNode) {
+ searchingNode = false;
+ for (int i = 0; i < rowCount(parentIndex); ++i) {
+ QModelIndex curChildIndex = index(i, 0, parentIndex);
+ if (nodeFromIndex(curChildIndex)->nodeName() == curLevelName) {
+ searchingNode = true;
+ parentIndex = curChildIndex;
+ break;
+ }
+ }
+ }
+
+ if (!searchingNode) {
+ UBDocumentTreeNode *newChild = new UBDocumentTreeNode(UBDocumentTreeNode::Catalog, curLevelName);
+ parentIndex = addNode(newChild, parentIndex);
+ }
+ }
+
+ return parentIndex;
+}
+
+bool UBDocumentTreeModel::inTrash(const QModelIndex &index) const
+{
+ return isDescendantOf(index, trashIndex());
+}
+
+bool UBDocumentTreeModel::inModel(const QModelIndex &index) const
+{
+ return isDescendantOf(index, modelsIndex());
+}
+
+bool UBDocumentTreeModel::inUntitledDocuments(const QModelIndex &index) const
+{
+ return isDescendantOf(index, untitledDocumentsIndex());
+}
+
+void UBDocumentTreeModel::addDocument(UBDocumentProxy *pProxyData, const QModelIndex &pParent)
+{
+ if (!pProxyData) {
+ return;
+ }
+ QString docName = pProxyData->metaData(UBSettings::documentName).toString();
+ QString docGroupName = pProxyData->metaData(UBSettings::documentGroupName).toString();
+
+ if (docName.isEmpty()) {
+ return;
+ }
+
+ QModelIndex lParent = pParent;
+ UBDocumentTreeNode *freeNode = new UBDocumentTreeNode(UBDocumentTreeNode::Document
+ , docName
+ , QString()
+ , pProxyData);
+ if (!pParent.isValid()) {
+ lParent = goTo(docGroupName);
+ }
+
+ addNode(freeNode, lParent);
+}
+
+void UBDocumentTreeModel::addNewDocument(UBDocumentProxy *pProxyData, const QModelIndex &pParent)
+{
+ addDocument(pProxyData, pParent);
+ mNewDocuments << pProxyData;
+}
+
+void UBDocumentTreeModel::addCatalog(const QString &pName, const QModelIndex &pParent)
+{
+ if (pName.isEmpty() || !pParent.isValid()) {
+ return;
+ }
+
+ UBDocumentTreeNode *catalogNode = new UBDocumentTreeNode(UBDocumentTreeNode::Catalog, pName);
+ addNode(catalogNode, pParent);
+}
+
+void UBDocumentTreeModel::setNewName(const QModelIndex &index, const QString &newName)
+{
+ if (!index.isValid()) {
+ return;
+ }
+
+ UBDocumentTreeNode *indexNode = nodeFromIndex(index);
+
+ QString magicSeparator = "+!##s";
+ if (isCatalog(index)) {
+ QString fullNewName = newName;
+ if (!newName.contains(magicSeparator)) {
+ indexNode->setNodeName(newName);
+ QString virtualDir = virtualDirForIndex(index);
+ fullNewName.prepend(virtualDir.isEmpty() ? "" : virtualDir + magicSeparator);
+ }
+ for (int i = 0; i < rowCount(index); i++) {
+ QModelIndex subIndex = this->index(i, 0, index);
+ setNewName(subIndex, fullNewName + magicSeparator + subIndex.data().toString());
+ }
+
+ } else if (isDocument(index)) {
+ Q_ASSERT(indexNode->proxyData());
+
+ int prefixIndex = newName.lastIndexOf(magicSeparator);
+ if (prefixIndex != -1) {
+ QString newDocumentGroupName = newName.left(prefixIndex).replace(magicSeparator, "/");
+ indexNode->proxyData()->setMetaData(UBSettings::documentGroupName, newDocumentGroupName);
+ } else {
+ indexNode->setNodeName(newName);
+ indexNode->proxyData()->setMetaData(UBSettings::documentName, newName);
+ }
+
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(indexNode->proxyData());
+ }
+}
+
+QString UBDocumentTreeModel::adjustNameForParentIndex(const QString &pName, const QModelIndex &pIndex)
+{
+ int i = 0;
+ QString newName = pName;
+ QStringList siblingNames = nodeNameList(pIndex);
+ while (siblingNames.contains(newName)) {
+ newName = pName + " " + QVariant(++i).toString();
+ }
+
+ return newName;
+}
+
+bool UBDocumentTreeModel::isDescendantOf(const QModelIndex &pPossibleDescendant, const QModelIndex &pPossibleAncestor) const
+{
+ if (!pPossibleDescendant.isValid()) {
+ return false;
+ }
+
+ QModelIndex ancestor = pPossibleDescendant;
+ while (ancestor.parent().isValid()) {
+ ancestor = ancestor.parent();
+ if (ancestor == pPossibleAncestor) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+QModelIndex UBDocumentTreeModel::addNode(UBDocumentTreeNode *pFreeNode, const QModelIndex &pParent, eAddItemMode pMode)
+{
+ UBDocumentTreeNode *tstParent = nodeFromIndex(pParent);
+
+ if (!pParent.isValid() || tstParent->nodeType() != UBDocumentTreeNode::Catalog) {
+ return QModelIndex();
+ }
+ int newIndex = pMode == aDetectPosition ? positionForParent(pFreeNode, tstParent): tstParent->children().size();
+ beginInsertRows(pParent, newIndex, newIndex);
+ tstParent->insertChild(newIndex, pFreeNode);
+ endInsertRows();
+
+ return createIndex(newIndex, 0, pFreeNode);
+}
+
+int UBDocumentTreeModel::positionForParent(UBDocumentTreeNode *pFreeNode, UBDocumentTreeNode *pParentNode)
+{
+ Q_ASSERT(pFreeNode);
+ Q_ASSERT(pParentNode);
+ Q_ASSERT(pParentNode->nodeType() == UBDocumentTreeNode::Catalog);
+
+ int c = -1;
+ int childCount = pParentNode->children().count();
+ while (c <= childCount) {
+ if (++c == childCount || lessThan(pFreeNode, pParentNode->children().at(c))) {
+ break;
+ }
+ }
+ return c == -1 ? childCount : c;
+}
+
+UBDocumentTreeNode *UBDocumentTreeModel::nodeFromIndex(const QModelIndex &pIndex) const
+{
+ if (pIndex.isValid()) {
+ return static_cast<UBDocumentTreeNode*>(pIndex.internalPointer());
+ } else {
+ return mRootNode;
+ }
+}
+
+void UBDocumentTreeModel::sort(int column, Qt::SortOrder order)
+{
+ Q_UNUSED(order)
+ Q_UNUSED(column)
+
+// QModelIndex parentIndex = index(0, column, QModelIndex());
+ sortChilds(mRoot);
+}
+
+void UBDocumentTreeModel::sortChilds(const QModelIndex &parentIndex)
+{
+ int current_column = 0;
+ int current_row = 0;
+
+ QList <UBDocumentTreeNode*> catalogsForSort;
+ QList <UBDocumentTreeNode*> documentsForSort;
+
+ for (current_row = 0; current_row < rowCount(parentIndex); current_row++)
+ {
+ QModelIndex currentIndex = index(current_row, current_column, parentIndex);
+ if (isCatalog(currentIndex))
+ catalogsForSort << nodeFromIndex(currentIndex);
+ else
+ documentsForSort << nodeFromIndex(currentIndex);
+ }
+
+ sortIndexes(catalogsForSort);
+ sortIndexes(documentsForSort);
+
+
+
+ foreach (UBDocumentTreeNode *node, catalogsForSort)
+ {
+ sortChilds(indexForNode(node));
+ }
+
+ foreach(UBDocumentTreeNode *node, catalogsForSort)
+ {
+ QModelIndex currentIndex = indexForNode(node);
+ moveIndex(currentIndex, parentIndex);
+ }
+
+ for (int i = documentsForSort.count()-1; i >= 0 ; i--)
+ {
+ QModelIndex currentIndex = indexForNode(documentsForSort.at(i));
+ moveIndex(currentIndex, parentIndex);
+ }
+}
+
+
+void UBDocumentTreeModel::sortIndexes(QList<UBDocumentTreeNode *> &unsortedIndexList)
+{
+ qStableSort(unsortedIndexList.begin(), unsortedIndexList.end(), nodeLessThan);
+}
+
+bool UBDocumentTreeModel::nodeLessThan(const UBDocumentTreeNode *firstIndex, const UBDocumentTreeNode *secondIndex)
+{
+ return firstIndex->nodeName() < secondIndex->nodeName();
+}
+
+UBDocumentTreeModel::~UBDocumentTreeModel()
+{
+ delete mRootNode;
+}
+
+UBDocumentTreeView::UBDocumentTreeView(QWidget *parent) : QTreeView(parent)
+{
+ setObjectName("UBDocumentTreeView");
+ setRootIsDecorated(true);
+
+// QScrollBar *hScroller = horizontalScrollBar();
+// if (hScroller)
+// {
+// connect(hScroller, SIGNAL(rangeChanged(int, int)), this, SLOT(hSliderRangeChanged(int, int)));
+// }
+
+ connect(verticalScrollBar(), SIGNAL(rangeChanged(int,int)), this, SLOT(adjustSize()));
+ connect(this, SIGNAL(collapsed(const QModelIndex&)), this, SLOT(adjustSize()));
+ connect(this, SIGNAL(expanded(const QModelIndex&)), this, SLOT(adjustSize()));
+}
+
+void UBDocumentTreeView::setSelectedAndExpanded(const QModelIndex &pIndex, bool pExpand)
+{
+ if (!pIndex.isValid()) {
+ return;
+ }
+
+ QModelIndex indexCurrentDoc = pIndex;
+ clearSelection();
+ selectionModel()->select(indexCurrentDoc, pExpand
+ ? QItemSelectionModel::Select
+ : QItemSelectionModel::Deselect);
+ setCurrentIndex(pExpand
+ ? indexCurrentDoc
+ : QModelIndex());
+
+ while (indexCurrentDoc.parent().isValid()) {
+ setExpanded(indexCurrentDoc.parent(), pExpand);
+ indexCurrentDoc = indexCurrentDoc.parent();
+ }
+}
+
+void UBDocumentTreeView::onModelIndexChanged(const QModelIndex &pNewIndex, const QModelIndex &pOldIndex)
+{
+ Q_UNUSED(pOldIndex)
+ setSelectedAndExpanded(pNewIndex, true);
+}
+
+void UBDocumentTreeView::hSliderRangeChanged(int min, int max)
+{
+ Q_UNUSED(min);
+ Q_UNUSED(max);
+
+ QScrollBar *hScroller = horizontalScrollBar();
+ if (hScroller)
+ {
+ hScroller->triggerAction(QAbstractSlider::SliderToMaximum);
+ }
+}
+
+void UBDocumentTreeView::dragEnterEvent(QDragEnterEvent *event)
+{
+ QTreeView::dragEnterEvent(event);
+ event->accept();
+ event->acceptProposedAction();
+}
+
+void UBDocumentTreeView::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ Q_UNUSED(event);
+ UBDocumentTreeModel *docModel = qobject_cast<UBDocumentTreeModel*>(model());
+ docModel->setHighLighted(QModelIndex());
+ update();
+}
+
+void UBDocumentTreeView::dragMoveEvent(QDragMoveEvent *event)
+{
+ if (event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage)) {
+ UBDocumentTreeModel *docModel = qobject_cast<UBDocumentTreeModel*>(model());
+ QModelIndex targetIndex = indexAt(event->pos());
+ if (!docModel || !docModel->isDocument(targetIndex) || docModel->inTrash(targetIndex)) {
+ event->ignore();
+ docModel->setHighLighted(QModelIndex());
+ updateIndexEnvirons(targetIndex);
+ return;
+ }
+ docModel->setHighLighted(targetIndex);
+ updateIndexEnvirons(targetIndex);
+ }
+ QTreeView::dragMoveEvent(event);
+ event->setAccepted(isAcceptable(selectedIndexes().first(), indexAt(event->pos())));
+}
+
+void UBDocumentTreeView::dropEvent(QDropEvent *event)
+{
+ if (event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage)) {
+ UBDocumentTreeModel *docModel = qobject_cast<UBDocumentTreeModel*>(model());
+ QModelIndex targetIndex = indexAt(event->pos());
+ qDebug() << "target index drop event" << docModel->nodeFromIndex(targetIndex)->nodeName();
+ if (!docModel || !docModel->isDocument(targetIndex)) {
+ event->ignore();
+ return;
+ }
+ docModel->setHighLighted(QModelIndex());
+ event->setDropAction(Qt::CopyAction);
+ } else {
+ event->setDropAction(acceptableAction(selectedIndexes().first(), indexAt(event->pos())));
+ }
+ QTreeView::dropEvent(event);
+ adjustSize();
+}
+
+void UBDocumentTreeView::paintEvent(QPaintEvent *event)
+{
+ QTreeView::paintEvent(event);
+}
+
+void UBDocumentTreeView::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)
+{
+// //managing current index inside the application. There is no common solution for that
+// Q_UNUSED(parent)
+// Q_UNUSED(start)
+// Q_UNUSED(end)
+
+// for (int i = start; i <= end; i++) {
+// if (currentIndex() == model()->index(i, 0, parent)) {
+// qDebug() << "catched";
+// }
+// }
+
+//// setState(CollapsingState);
+// updateGeometries();
+
+ QTreeView::rowsAboutToBeRemoved(parent, start, end);
+}
+
+bool UBDocumentTreeView::isAcceptable(const QModelIndex &dragIndex, const QModelIndex &atIndex)
+{
+ if (fullModel()->inModel(dragIndex)) {
+ if (atIndex == fullModel()->modelsIndex() || fullModel()->inModel(atIndex)) {
+ return false; //do not accept drop from model to itself
+ }
+ }
+
+ return true;
+}
+
+Qt::DropAction UBDocumentTreeView::acceptableAction(const QModelIndex &dragIndex, const QModelIndex &atIndex)
+{
+ if (fullModel()->inModel(dragIndex)) {
+ if (atIndex == fullModel()->trashIndex() || fullModel()->inTrash(atIndex)) {
+ return Qt::MoveAction; //do not accept drop from model to trash, only "delete" command accepted
+ }
+ return Qt::CopyAction;
+ } else {
+ return Qt::MoveAction;
+ }
+
+ return Qt::IgnoreAction;
+}
+
+void UBDocumentTreeView::updateIndexEnvirons(const QModelIndex &index)
+{
+ QRect updateRect = visualRect(index);
+ const int multipler = 3;
+ updateRect.adjust(0, -updateRect.height() * multipler, 0, updateRect.height() * multipler);
+ update(updateRect);
+}
+
+void UBDocumentTreeView::adjustSize()
+{
+ resizeColumnToContents(0);
+
+ int headerSizeHint = width();
+
+ if (verticalScrollBar()->isVisible() && verticalScrollBar()->maximum() > 0)
+ headerSizeHint -= verticalScrollBar()->width();
+
+ if (columnWidth(0) < headerSizeHint)
+ setColumnWidth(0, headerSizeHint);
+}
+
+UBDocumentTreeItemDelegate::UBDocumentTreeItemDelegate(QObject *parent)
+ : QStyledItemDelegate(parent)
+{
+
+}
+
+void UBDocumentTreeItemDelegate::commitAndCloseEditor()
+{
+ QLineEdit *lineEditor = qobject_cast<QLineEdit*>(sender());
+ if (lineEditor) {
+ emit commitData(lineEditor);
+ emit closeEditor(lineEditor);
+ }
+}
+
+void UBDocumentTreeItemDelegate::processChangedText(const QString &str) const
+{
+ QLineEdit *editor = qobject_cast<QLineEdit*>(sender());
+ if (!editor) {
+ return;
+ }
+
+ if (!validateString(str)) {
+ editor->setStyleSheet("background-color: #FFB3C8;");
+ } else {
+ editor->setStyleSheet("background-color: #FFFFFF;");
+ }
+}
+
+bool UBDocumentTreeItemDelegate::validateString(const QString &str) const
+{
+ return QRegExp("[^\\/\\:\\?\\*\\|\\<\\>\\\"]{1,}").exactMatch(str)
+ && !mExistingFileNames.contains(str);
+
+}
+
+QWidget *UBDocumentTreeItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ Q_UNUSED(option);
+ Q_UNUSED(index);
+
+ mExistingFileNames.clear();
+ const UBDocumentTreeModel *indexModel = qobject_cast<const UBDocumentTreeModel*>(index.model());
+ if (indexModel) {
+ mExistingFileNames = indexModel->nodeNameList(index.parent());
+ mExistingFileNames.removeOne(index.data().toString());
+ }
+
+ QLineEdit *nameEditor = new QLineEdit(parent);
+ connect(nameEditor, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor()));
+ connect(nameEditor, SIGNAL(textChanged(QString)), this, SLOT(processChangedText(QString)));
+ return nameEditor;
+}
+
+void UBDocumentTreeItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
+{
+ if (index.column() == 0) {
+ QLineEdit *lineEditor = qobject_cast<QLineEdit*>(editor);
+ lineEditor->setText(index.data().toString());
+ lineEditor->selectAll();
+ }
+}
+
+void UBDocumentTreeItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
+{
+ QLineEdit *lineEditor = qobject_cast<QLineEdit*>(editor);
+ if (validateString(lineEditor->text())) {
+ model->setData(index, lineEditor->text());
+ }
+}
+
+void UBDocumentTreeItemDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
+{
+ QStyledItemDelegate::paint(painter, option, index);
+}
+
+UBDocumentController::UBDocumentController(UBMainWindow* mainWindow)
+ : UBDocumentContainer(mainWindow->centralWidget())
+ , mSelectionType(None)
+ , mParentWidget(mainWindow->centralWidget())
+ , mBoardController(UBApplication::boardController)
+ , mDocumentUI(0)
+ , mMainWindow(mainWindow)
+ , mDocumentWidget(0)
+ , mIsClosing(false)
+ , mToolsPalette(0)
+ , mToolsPalettePositionned(false)
+ , mTrashTi(0)
+ , mDocumentTrashGroupName(tr("Trash"))
+ , mDefaultDocumentGroupName(tr("Untitled Documents"))
+ , mCurrentTreeDocument(0)
+ , mCurrentIndexMoved(false)
+{
+
+ setupViews();
+ setupToolbar();
+// this->selectDocument(UBApplication::boardController->selectedDocument());
+ connect(this, SIGNAL(exportDone()), mMainWindow, SLOT(onExportDone()));
+ connect(this, SIGNAL(documentThumbnailsUpdated(UBDocumentContainer*)), this, SLOT(refreshDocumentThumbnailsView(UBDocumentContainer*)));
+}
+
+UBDocumentController::~UBDocumentController()
+{
+ if (mDocumentUI)
+ delete mDocumentUI;
+}
+
+void UBDocumentController::createNewDocument()
+{
+ UBPersistenceManager *pManager = UBPersistenceManager::persistenceManager();
+ UBDocumentTreeModel *docModel = pManager->mDocumentTreeStructureModel;
+ QModelIndex selectedIndex = firstSelectedTreeIndex();
+ if (selectedIndex.isValid()) {
+ QString groupName = docModel->isCatalog(selectedIndex)
+ ? docModel->virtualPathForIndex(selectedIndex)
+ : docModel->virtualDirForIndex(selectedIndex);
+
+
+ /* disabled model sorting. We cannot use it because of lot os troubles with internal Qt implementation related QPerisstentModelIndex which becomes invalid on index move.
+ UBDocumentProxy *document = new UBDocumentProxy(*pManager->createDocument(groupName)); // work around with memory leak.
+ mBoardController->setActiveDocumentScene(document);
+ UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->sort(0);
+ */
+
+ UBDocumentProxy *document = pManager->createDocument(groupName);
+ selectDocument(document);
+
+ if (document)
+ UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->markDocumentAsNew(document);
+ }
+}
+
+
+UBDocumentProxyTreeItem* UBDocumentController::findDocument(UBDocumentProxy* proxy)
+{
+ QTreeWidgetItemIterator it(mDocumentUI->documentTreeWidget);
+
+ while (*it)
+ {
+ UBDocumentProxyTreeItem *treeItem = dynamic_cast<UBDocumentProxyTreeItem*>((*it));
+
+ if (treeItem && treeItem->proxy() == proxy)
+ return treeItem;
+
+ ++it;
+ }
+
+ return 0;
+}
+
+void UBDocumentController::selectDocument(UBDocumentProxy* proxy, bool setAsCurrentDocument)
+{
+ if (proxy==NULL)
+ {
+ setDocument(NULL);
+ return;
+ }
+
+ if (setAsCurrentDocument) {
+ QModelIndex treeIndex = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->indexForProxy(proxy);
+ if (treeIndex.isValid()) {
+ qDebug() << "valid index";
+ }
+
+ UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->setCurrentDocument(proxy);
+ QModelIndex indexCurrentDoc = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->indexForProxy(proxy);
+ mDocumentUI->documentTreeView->setSelectedAndExpanded(indexCurrentDoc, true);
+ }
+
+ mSelectionType = Document;
+ setDocument(proxy);
+}
+
+void UBDocumentController::createNewDocumentGroup()
+{
+ UBPersistenceManager *pManager = UBPersistenceManager::persistenceManager();
+ UBDocumentTreeModel *docModel = pManager->mDocumentTreeStructureModel;
+ QModelIndex selectedIndex = firstSelectedTreeIndex();
+ if (!selectedIndex.isValid()) {
+ return;
+ }
+ QModelIndex parentIndex = docModel->isCatalog(selectedIndex)
+ ? selectedIndex
+ : selectedIndex.parent();
+
+ QString newFolderName = docModel->adjustNameForParentIndex(tr("New Folder"), parentIndex);
+
+ docModel->addCatalog(newFolderName, parentIndex);
+/* disabled model sorting. We cannot use it because of lot os troubles with internal Qt implementation related QPerisstentModelIndex which becomes invalid on index move.
+ UBDocumentProxy *document = new UBDocumentProxy(*selectedDocument()); // work around with memory leak.
+ mBoardController->setActiveDocumentScene(document);
+ UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->sort(0);
+ selectDocument(document);
+*/
+}
+
+
+UBDocumentProxy* UBDocumentController::selectedDocumentProxy()
+{
+ return UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->proxyForIndex(firstSelectedTreeIndex());
+}
+
+QList<UBDocumentProxy*> UBDocumentController::selectedProxies()
+{
+ QList<UBDocumentProxy*> result;
+
+ foreach (QModelIndex curIndex, mDocumentUI->documentTreeView->selectionModel()->selectedIndexes()) {
+ result << UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->proxyForIndex(curIndex);
+ }
+
+ return result;
+}
+
+QModelIndexList UBDocumentController::selectedTreeIndexes()
+{
+ return mDocumentUI->documentTreeView->selectionModel()->selectedIndexes();
+}
+
+UBDocumentProxy* UBDocumentController::firstSelectedTreeProxy()
+{
+ return selectedProxies().count() ? selectedProxies().first() : 0;
+}
+
+UBDocumentProxyTreeItem* UBDocumentController::selectedDocumentProxyTreeItem()
+{
+ if (mDocumentUI && mDocumentUI->documentTreeWidget)
+ {
+ QList<QTreeWidgetItem *> selectedItems = mDocumentUI->documentTreeWidget->selectedItems();
+
+ foreach (QTreeWidgetItem * item, selectedItems)
+ {
+ UBDocumentProxyTreeItem* proxyItem = dynamic_cast<UBDocumentProxyTreeItem*>(item);
+
+ if (proxyItem)
+ {
+ return proxyItem;
+ }
+ }
+ }
+
+ return 0;
+}
+
+
+UBDocumentGroupTreeItem* UBDocumentController::selectedDocumentGroupTreeItem()
+{
+ QList<QTreeWidgetItem *> selectedItems = mDocumentUI->documentTreeWidget->selectedItems();
+
+ foreach (QTreeWidgetItem * item, selectedItems)
+ {
+ UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
+
+ if (groupItem)
+ {
+ return groupItem;
+ }
+ else
+ {
+ UBDocumentGroupTreeItem* parent = dynamic_cast<UBDocumentGroupTreeItem*>(item->parent());
+ if (parent)
+ {
+ return parent;
+ }
+ }
+ }
+
+ return 0;
+}
+
+void UBDocumentController::TreeViewSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous)
+{
+ Q_UNUSED(previous)
+
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+ UBDocumentProxy *currentDocumentProxy = docModel->proxyData(current);
+ setDocument(currentDocumentProxy, false);
+
+ if (mCurrentIndexMoved) {
+ if (docModel->isDocument(current)) {
+ docModel->setCurrentDocument(currentDocumentProxy);
+ } else if (docModel->isCatalog(current)) {
+ docModel->setCurrentDocument(0);
+ }
+ mCurrentIndexMoved = false;
+ }
+
+ itemSelectionChanged(docModel->isCatalog(current) ? Folder : Document);
+}
+
+void UBDocumentController::TreeViewSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+{
+ Q_UNUSED(deselected)
+
+ if (selected.indexes().count()) {
+ QModelIndex NewSelectedRow = selected.indexes().first();
+ TreeViewSelectionChanged(NewSelectedRow, QModelIndex());
+ }
+
+}
+
+void UBDocumentController::itemSelectionChanged(LastSelectedElementType newSelection)
+{
+ mSelectionType = newSelection;
+ updateActions();
+}
+
+
+void UBDocumentController::setupViews()
+{
+
+ if (!mDocumentWidget)
+ {
+ mDocumentWidget = new QWidget(mMainWindow->centralWidget());
+ mMainWindow->addDocumentsWidget(mDocumentWidget);
+
+ mDocumentUI = new Ui::documents();
+
+ mDocumentUI->setupUi(mDocumentWidget);
+
+ int thumbWidth = UBSettings::settings()->documentThumbnailWidth->get().toInt();
+
+ mDocumentUI->documentZoomSlider->setValue(thumbWidth);
+ mDocumentUI->thumbnailWidget->setThumbnailWidth(thumbWidth);
+
+ connect(mDocumentUI->documentZoomSlider, SIGNAL(valueChanged(int)), this,
+ SLOT(documentZoomSliderValueChanged(int)));
+
+ connect(mMainWindow->actionOpen, SIGNAL(triggered()), this, SLOT(openSelectedItem()));
+ connect(mMainWindow->actionNewFolder, SIGNAL(triggered()), this, SLOT(createNewDocumentGroup()));
+ connect(mMainWindow->actionNewDocument, SIGNAL(triggered()), this, SLOT(createNewDocument()));
+
+ connect(mMainWindow->actionImport, SIGNAL(triggered(bool)), this, SLOT(importFile()));
+
+ QMenu* addMenu = new QMenu(mDocumentWidget);
+ mAddFolderOfImagesAction = addMenu->addAction(tr("Add Folder of Images"));
+ mAddImagesAction = addMenu->addAction(tr("Add Images"));
+ mAddFileToDocumentAction = addMenu->addAction(tr("Add Pages from File"));
+
+ connect(mAddFolderOfImagesAction, SIGNAL(triggered(bool)), this, SLOT(addFolderOfImages()));
+ connect(mAddFileToDocumentAction, SIGNAL(triggered(bool)), this, SLOT(addFileToDocument()));
+ connect(mAddImagesAction, SIGNAL(triggered(bool)), this, SLOT(addImages()));
+
+ foreach (QWidget* menuWidget, mMainWindow->actionDocumentAdd->associatedWidgets())
+ {
+ QToolButton *tb = qobject_cast<QToolButton*>(menuWidget);
+
+ if (tb && !tb->menu())
+ {
+ tb->setObjectName("ubButtonMenu");
+ tb->setPopupMode(QToolButton::InstantPopup);
+
+ QMenu* menu = new QMenu(mDocumentWidget);
+
+ menu->addAction(mAddFolderOfImagesAction);
+ menu->addAction(mAddImagesAction);
+ menu->addAction(mAddFileToDocumentAction);
+
+ tb->setMenu(menu);
+ }
+ }
+
+ QMenu* exportMenu = new QMenu(mDocumentWidget);
+
+ UBDocumentManager *documentManager = UBDocumentManager::documentManager();
+ for (int i = 0; i < documentManager->supportedExportAdaptors().length(); i++)
+ {
+ UBExportAdaptor* adaptor = documentManager->supportedExportAdaptors()[i];
+ QAction *currentExportAction = exportMenu->addAction(adaptor->exportName());
+ currentExportAction->setData(i);
+ connect(currentExportAction, SIGNAL(triggered (bool)), this, SLOT(exportDocument()));
+ exportMenu->addAction(currentExportAction);
+ adaptor->setAssociatedAction(currentExportAction);
+ }
+
+ foreach (QWidget* menuWidget, mMainWindow->actionExport->associatedWidgets())
+ {
+ QToolButton *tb = qobject_cast<QToolButton*>(menuWidget);
+
+ if (tb && !tb->menu())
+ {
+ tb->setObjectName("ubButtonMenu");
+ tb->setPopupMode(QToolButton::InstantPopup);
+
+ tb->setMenu(exportMenu);
+ }
+ }
+
+#ifdef Q_WS_MAC
+ mMainWindow->actionDelete->setShortcut(QKeySequence(Qt::Key_Backspace));
+#endif
+
+ connect(mMainWindow->actionDelete, SIGNAL(triggered()), this, SLOT(deleteSelectedItem()));
+ connect(mMainWindow->actionDuplicate, SIGNAL(triggered()), this, SLOT(duplicateSelectedItem()));
+ connect(mMainWindow->actionRename, SIGNAL(triggered()), this, SLOT(renameSelectedItem()));
+ connect(mMainWindow->actionAddToWorkingDocument, SIGNAL(triggered()), this, SLOT(addToDocument()));
+
+ mDocumentUI->documentTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection);
+ mDocumentUI->documentTreeWidget->setDragEnabled(true);
+ mDocumentUI->documentTreeWidget->viewport()->setAcceptDrops(true);
+ mDocumentUI->documentTreeWidget->setDropIndicatorShown(true);
+ mDocumentUI->documentTreeWidget->setIndentation(18); // 1.5 * /resources/style/treeview-branch-closed.png width
+ mDocumentUI->documentTreeWidget->setDragDropMode(QAbstractItemView::InternalMove);
+
+// connect(mDocumentUI->documentTreeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged()));
+// connect(mDocumentUI->documentTreeWidget, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(itemChanged(QTreeWidgetItem *, int)));
+// connect(mDocumentUI->documentTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(itemClicked(QTreeWidgetItem *, int)));
+
+ mDocumentUI->documentTreeView->setModel(UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel);
+ mDocumentUI->documentTreeView->setItemDelegate(new UBDocumentTreeItemDelegate(this));
+// mDocumentUI->documentTreeView->setDragDropMode(QAbstractItemView::InternalMove);
+ mDocumentUI->documentTreeView->setDragEnabled(true);
+ mDocumentUI->documentTreeView->setAcceptDrops(true);
+ mDocumentUI->documentTreeView->viewport()->setAcceptDrops(true);
+ mDocumentUI->documentTreeView->setDropIndicatorShown(true);
+ mDocumentUI->documentTreeView->header()->setStretchLastSection(false);
+ mDocumentUI->documentTreeView->header()->setResizeMode(0, QHeaderView::Interactive);
+
+ mDocumentUI->documentTreeView->resizeColumnToContents(0);
+
+ int headerSizeHint = mDocumentUI->documentTreeView->width();
+
+ if (mDocumentUI->documentTreeView->verticalScrollBar()->isVisible())
+ headerSizeHint = mDocumentUI->documentTreeView->width() - mDocumentUI->documentTreeView->verticalScrollBar()->width();
+
+ if (mDocumentUI->documentTreeView->columnWidth(0) < headerSizeHint)
+ mDocumentUI->documentTreeView->setColumnWidth(0, headerSizeHint);
+
+ connect(mDocumentUI->documentTreeView->itemDelegate(), SIGNAL(closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint) ), mDocumentUI->documentTreeView, SLOT(adjustSize()));
+// connect(mDocumentUI->documentTreeView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), this, SLOT(TreeViewSelectionChanged(QModelIndex,QModelIndex)));
+ connect(mDocumentUI->documentTreeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(TreeViewSelectionChanged(QItemSelection,QItemSelection)));
+ connect(UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel, SIGNAL(indexChanged(QModelIndex,QModelIndex))
+ ,mDocumentUI->documentTreeView, SLOT(onModelIndexChanged(QModelIndex,QModelIndex)));
+ connect(UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel, SIGNAL(currentIndexMoved(QModelIndex,QModelIndex))
+ ,this, SLOT(currentIndexMoved(QModelIndex,QModelIndex)));
+
+ connect(mDocumentUI->thumbnailWidget, SIGNAL(sceneDropped(UBDocumentProxy*, int, int)), this, SLOT(moveSceneToIndex ( UBDocumentProxy*, int, int)));
+ connect(mDocumentUI->thumbnailWidget, SIGNAL(resized()), this, SLOT(thumbnailViewResized()));
+// connect(mDocumentUI->thumbnailWidget, SIGNAL(mouseDoubleClick(QGraphicsItem*, int)), this, SLOT(pageDoubleClicked(QGraphicsItem*, int)));
+ connect(mDocumentUI->thumbnailWidget, SIGNAL(mouseDoubleClick(QGraphicsItem*,int)), this, SLOT(thumbnailPageDoubleClicked(QGraphicsItem*,int)));
+ connect(mDocumentUI->thumbnailWidget, SIGNAL(mouseClick(QGraphicsItem*, int)), this, SLOT(pageClicked(QGraphicsItem*, int)));
+
+ connect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
+
+// connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentCreated(UBDocumentProxy*)), this, SLOT(addDocumentInTree(UBDocumentProxy*)));
+// connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)), this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
+
+ connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneCreated(UBDocumentProxy*, int)), this, SLOT(documentSceneChanged(UBDocumentProxy*, int)));
+ connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentSceneWillBeDeleted(UBDocumentProxy*, int)), this, SLOT(documentSceneChanged(UBDocumentProxy*, int)));
+
+ mDocumentUI->thumbnailWidget->setBackgroundBrush(UBSettings::documentViewLightColor);
+
+/*disabled model sorting. We cannot use it because of lot os troubles with internal Qt implementation related QPerisstentModelIndex which becomes invalid on index move.
+ selectDocument(new UBDocumentProxy (*mBoardController->selectedDocument())); // work around with memory leak
+ UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->sort(0);
+*/
+ #ifdef Q_WS_MACX
+ mMessageWindow = new UBMessageWindow(NULL);
+ #else
+ mMessageWindow = new UBMessageWindow(mDocumentUI->thumbnailWidget);
+ #endif
+
+ mMessageWindow->hide();
+ mDocumentUI->documentTreeWidget->hide();
+ }
+}
+
+
+QWidget* UBDocumentController::controlView()
+{
+ return mDocumentWidget;
+}
+
+
+void UBDocumentController::setupToolbar()
+{
+ UBApplication::app()->insertSpaceToToolbarBeforeAction(mMainWindow->documentToolBar, mMainWindow->actionBoard);
+ connect(mMainWindow->actionDocumentTools, SIGNAL(triggered()), this, SLOT(toggleDocumentToolsPalette()));
+}
+
+void UBDocumentController::setupPalettes()
+{
+
+ mToolsPalette = new UBDocumentToolsPalette(controlView());
+
+ mToolsPalette->hide();
+
+ bool showToolsPalette = !mToolsPalette->isEmpty();
+ mMainWindow->actionDocumentTools->setVisible(showToolsPalette);
+
+ if (showToolsPalette)
+ {
+ mMainWindow->actionDocumentTools->trigger();
+ }
+}
+
+void UBDocumentController::show()
+{
+ selectDocument(mBoardController->selectedDocument());
+
+// selectionChanged();
+ updateActions();
+
+ if(!mToolsPalette)
+ setupPalettes();
+}
+
+
+void UBDocumentController::hide()
+{
+ // NOOP
+}
+
+
+void UBDocumentController::openSelectedItem()
+{
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+
+ QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
+
+ if (selectedItems.count() > 0)
+ {
+ UBSceneThumbnailPixmap* thumb = dynamic_cast<UBSceneThumbnailPixmap*> (selectedItems.last());
+
+ if (thumb)
+ {
+ UBDocumentProxy* proxy = thumb->proxy();
+
+ if (proxy && isOKToOpenDocument(proxy))
+ {
+ mBoardController->setActiveDocumentScene(proxy, thumb->sceneIndex());
+ UBApplication::applicationController->showBoard();
+ }
+ }
+ }
+ else
+ {
+ UBDocumentProxy* proxy = selectedDocumentProxy();
+
+ if (proxy && isOKToOpenDocument(proxy))
+ {
+ mBoardController->setActiveDocumentScene(proxy);
+ UBApplication::applicationController->showBoard();
+ }
+ }
+
+ QApplication::restoreOverrideCursor();
+}
+
+void UBDocumentController::duplicateSelectedItem()
+{
+ if (UBApplication::applicationController->displayMode() != UBApplicationController::Document)
+ return;
+
+ if (mSelectionType == Page)
+ {
+ QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
+ QList<int> selectedSceneIndexes;
+ foreach (QGraphicsItem *item, selectedItems)
+ {
+ UBSceneThumbnailPixmap *thumb = dynamic_cast<UBSceneThumbnailPixmap*>(item);
+ if (thumb)
+ {
+ UBDocumentProxy *proxy = thumb->proxy();
+
+ if (proxy)
+ {
+ int sceneIndex = thumb->sceneIndex();
+ selectedSceneIndexes << sceneIndex;
+ }
+ }
+ }
+ if (selectedSceneIndexes.count() > 0)
+ {
+ duplicatePages(selectedSceneIndexes);
+ emit documentThumbnailsUpdated(this);
+ selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ UBMetadataDcSubsetAdaptor::persist(selectedDocument());
+ mDocumentUI->thumbnailWidget->selectItemAt(selectedSceneIndexes.last() + selectedSceneIndexes.size());
+ }
+ }
+ else
+ {
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+ QModelIndex selectedIndex = firstSelectedTreeIndex();
+
+ Q_ASSERT(!docModel->isConstant(selectedIndex) && !docModel->inTrash(selectedIndex));
+
+ // UBDocumentProxy* source = selectedDocumentProxy();
+ // UBDocumentGroupTreeItem* group = selectedDocumentGroupTreeItem();
+
+// QString docName = docModel->proxyData(selectedIndex)->metaData(UBSettings::documentName).toString();
+
+ showMessage(tr("Duplicating Document %1").arg(""), true);
+
+ docModel->copyIndexToNewParent(selectedIndex, selectedIndex.parent(), UBDocumentTreeModel::aContentCopy);
+
+ // UBDocumentProxy* duplicatedDoc = UBPersistenceManager::persistenceManager()->duplicateDocument(source);
+ // duplicatedDoc->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ // UBMetadataDcSubsetAdaptor::persist(duplicatedDoc);
+
+ // selectDocument(duplicatedDoc, false);
+
+ showMessage(tr("Document %1 copied").arg(""), false);
+ }
+}
+
+void UBDocumentController::moveDocumentToTrash(UBDocumentGroupTreeItem* groupTi, UBDocumentProxyTreeItem *proxyTi)
+{
+ int index = proxyTi->parent()->indexOfChild(proxyTi);
+ index --;
+
+ if (index >= 0)
+ {
+ if (proxyTi->proxy() == mBoardController->selectedDocument())
+ {
+ selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(index))->proxy(), true);
+ }
+ else
+ proxyTi->parent()->child(index)->setSelected(true);
+ }
+ else if (proxyTi->parent()->childCount() > 1)
+ {
+ if (proxyTi->proxy() == mBoardController->selectedDocument())
+ {
+ selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(1))->proxy(), true);
+ }
+ else
+ proxyTi->parent()->child(1)->setSelected(true);
+ }
+ else
+ {
+ if (proxyTi->proxy() == mBoardController->selectedDocument())
+ {
+ bool documentFound = false;
+ for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
+ {
+ QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
+ UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
+ if (!groupItem->isTrashFolder())
+ {
+ for(int j=0; j<groupItem->childCount(); j++)
+ {
+ if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument())
+ {
+ selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true);
+ documentFound = true;
+ break;
+ }
+ }
+ }
+ if (documentFound)
+ break;
+ }
+ if (!documentFound)
+ {
+ UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(groupTi->groupName());
+ selectDocument(document, true);
+ }
+ }
+ else
+ proxyTi->parent()->setSelected(true);
+ }
+
+ QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
+ proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy());
+
+ proxyTi->parent()->removeChild(proxyTi);
+ mTrashTi->addChild(proxyTi);
+ proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
+}
+
+void UBDocumentController::moveFolderToTrash(UBDocumentGroupTreeItem* groupTi)
+{
+ bool changeCurrentDocument = false;
+ for (int i = 0; i < groupTi->childCount(); i++)
+ {
+ UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
+ if (proxyTi && proxyTi->proxy() && proxyTi->proxy() == mBoardController->selectedDocument())
+ {
+ changeCurrentDocument = true;
+ break;
+ }
+ }
+
+ QList<UBDocumentProxyTreeItem*> toBeDeleted;
+
+ for (int i = 0; i < groupTi->childCount(); i++)
+ {
+ UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
+ if (proxyTi && proxyTi->proxy())
+ toBeDeleted << proxyTi;
+ }
+
+ for (int i = 0; i < toBeDeleted.count(); i++)
+ {
+ UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i);
+
+ showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString()));
+ // Move document to trash
+ QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
+ proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName);
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy());
+
+ groupTi->removeChild(proxyTi);
+ mTrashTi->addChild(proxyTi);
+ proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable);
+
+ showMessage(QString("%1 deleted").arg(groupTi->groupName()));
+ }
+
+ // dont remove default group
+ if (!groupTi->isDefaultFolder())
+ {
+ int index = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(groupTi);
+
+ if (index >= 0)
+ {
+ mDocumentUI->documentTreeWidget->takeTopLevelItem(index);
+ }
+ }
+
+ if (changeCurrentDocument)
+ {
+ bool documentFound = false;
+ for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
+ {
+ QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
+ UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
+ if (!groupItem->isTrashFolder() && groupItem != groupTi)
+ {
+ for(int j=0; j<groupItem->childCount(); j++)
+ {
+ if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument())
+ {
+ selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true);
+ documentFound = true;
+ break;
+ }
+ }
+ }
+ if (documentFound)
+ break;
+ }
+ if (!documentFound)
+ {
+ UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument( mDefaultDocumentGroupName );
+ selectDocument(document, true);
+ }
+ }
+
+ reloadThumbnails();
+}
+
+void UBDocumentController::deleteSelectedItem()
+{
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+ QModelIndex currentIndex = firstSelectedTreeIndex();
+ DeletionType deletionForSelection = deletionTypeForSelection(mSelectionType, currentIndex, docModel);
+
+ switch (static_cast<int>(deletionForSelection)) {
+ case DeletePage :
+ deletePages(mDocumentUI->thumbnailWidget->selectedItems());
+ break;
+
+ case MoveToTrash :
+ docModel->moveIndex(currentIndex, docModel->trashIndex());
+ break;
+
+ case CompleteDelete :
+ deleteIndexAndAssociatedData(currentIndex);
+ break;
+
+ case EmptyFolder :
+ if (currentIndex == docModel->myDocumentsIndex()) { //Emptying "My documents". Keeping Untitled Documents
+ int startInd = 0;
+ while (docModel->rowCount(currentIndex)) {
+ QModelIndex testSubINdecurrentIndex = docModel->index(startInd, 0, currentIndex);
+ if (testSubINdecurrentIndex == docModel->untitledDocumentsIndex()) {
+ emptyFolder(testSubINdecurrentIndex, MoveToTrash);
+ startInd++;
+ continue;
+ }
+ if (!testSubINdecurrentIndex.isValid()) {
+ break;
+ }
+ docModel->moveIndex(testSubINdecurrentIndex, docModel->trashIndex());
+ }
+ } else {
+ emptyFolder(currentIndex, MoveToTrash); //Empty constant folder
+ }
+ break;
+
+ case EmptyTrash :
+ emptyFolder(currentIndex, CompleteDelete); // Empty trahs folder
+ break;
+ }
+
+
+
+// if (mSelectionType == Page)
+// {
+// QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
+// deletePages(selectedItems);
+
+// } else {
+
+// UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+// QModelIndex currentIndex = firstSelectedTreeIndex();
+
+// if (docModel->isConstant(currentIndex)) { //Constant folder
+// if (currentIndex == docModel->myDocumentsIndex()) { //Emptying "My documents". Keeping Untitled Documents
+// int startInd = 0;
+// while (docModel->rowCount(currentIndex)) {
+// QModelIndex testSubINdecurrentIndex = docModel->index(startInd, 0, currentIndex);
+// if (testSubINdecurrentIndex == docModel->untitledDocumentsIndex()) {
+// emptyFolder(testSubINdecurrentIndex, MoveToTrash);
+// startInd++;
+// continue;
+// }
+// if (!testSubINdecurrentIndex.isValid()) {
+// break;
+// }
+// docModel->copyIndexToNewParent(testSubINdecurrentIndex, docModel->trashIndex());
+// docModel->removeRow(startInd, testSubINdecurrentIndex.parent());
+// }
+// } else {
+// emptyFolder(currentIndex, MoveToTrash); //Empty constant folder
+// }
+
+// } else if (currentIndex == docModel->trashIndex()) { //Trash folder
+// emptyFolder(currentIndex, CompleteDelete); // Empty trahs folder
+
+// } else if (!docModel->inTrash(currentIndex)) { //Within trash
+// docModel->copyIndexToNewParent(currentIndex, docModel->trashIndex());
+// docModel->removeRow(currentIndex.row(), currentIndex.parent());
+
+// } else {
+// deleteIndexAndAssociatedData(currentIndex);
+// }
+
+
+// if (docModel->isDocument(currentIndex))
+// {
+// UBDocumentProxy *docProxy = docModel->proxyData(currentIndex);
+// if (!docProxy) {
+// return;
+// }
+
+// if( UBApplication::mainWindow->yesNoQuestion(tr("Remove Document")
+// , tr("Are you sure you want to remove the document '%1'?")
+// .arg(docProxy->metaData(UBSettings::documentName).toString()))) {
+// if (!docModel->inTrash(currentIndex)) {
+
+//// moveDocumentToTrash(groupTi, proxyTi);
+
+// } else {
+// // We have to physically delete document
+// proxyTi->parent()->removeChild(proxyTi);
+// UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy());
+
+// if (mTrashTi->childCount()==0)
+// selectDocument(NULL);
+// else
+// selectDocument(((UBDocumentProxyTreeItem*)mTrashTi->child(0))->proxy());
+// reloadThumbnails();
+// }
+// }
+
+// } else if (groupTi) {
+
+// if (groupTi == mTrashTi) {
+// if(UBApplication::mainWindow->yesNoQuestion(tr("Empty Trash"), tr("Are you sure you want to empty trash?"))) {
+// QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+// QList<UBDocumentProxyTreeItem*> toBeDeleted;
+
+// for (int i = 0; i < groupTi->childCount(); i++) {
+// UBDocumentProxyTreeItem* proxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(groupTi->child(i));
+// if (proxyTi && proxyTi->proxy())
+// toBeDeleted << proxyTi;
+// }
+
+// showMessage(tr("Emptying trash"));
+
+// for (int i = 0; i < toBeDeleted.count(); i++) {
+// UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i);
+
+// proxyTi->parent()->removeChild(proxyTi);
+// UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy());
+// }
+
+// showMessage(tr("Emptied trash"));
+
+// QApplication::restoreOverrideCursor();
+// mMainWindow->actionDelete->setEnabled(false);
+// }
+
+// } else {
+// if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Folder")
+// , tr("Are you sure you want to remove the folder '%1' and all its content?")
+// .arg(groupTi->groupName()))) {
+// QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+// moveFolderToTrash(groupTi);
+// QApplication::restoreOverrideCursor();
+// }
+// }
+// }
+// }
+}
+
+void UBDocumentController::emptyFolder(const QModelIndex &index, DeletionType pDeletionType)
+{
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+ if (!docModel->isCatalog(index)) {
+ return;
+ }
+ while (docModel->rowCount(index)) {
+ QModelIndex subIndex = docModel->index(0, 0, index);
+ switch (static_cast<int>(pDeletionType)) {
+ case MoveToTrash :
+ docModel->moveIndex(subIndex, docModel->trashIndex());
+ break;
+
+ case CompleteDelete :
+ deleteIndexAndAssociatedData(subIndex);
+ break;
+ }
+ }
+}
+
+void UBDocumentController::deleteIndexAndAssociatedData(const QModelIndex &pIndex)
+{
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+ while (docModel->rowCount(pIndex)) {
+ QModelIndex subIndex = docModel->index(0, 0, pIndex);
+ deleteIndexAndAssociatedData(subIndex);
+ }
+
+ if (docModel->isDocument(pIndex)) {
+ UBDocumentProxy *proxyData = docModel->proxyData(pIndex);
+ if (proxyData) {
+ UBPersistenceManager::persistenceManager()->deleteDocument(proxyData);
+ }
+ }
+ docModel->removeRow(pIndex.row(), pIndex.parent());
+}
+
+
+void UBDocumentController::exportDocument()
+{
+ QAction *currentExportAction = qobject_cast<QAction *>(sender());
+ QVariant actionData = currentExportAction->data();
+ UBExportAdaptor* selectedExportAdaptor = UBDocumentManager::documentManager()->supportedExportAdaptors()[actionData.toInt()];
+
+// UBDocumentProxy* proxy = selectedDocumentProxy();
+ UBDocumentProxy* proxy = firstSelectedTreeProxy();
+
+// if (proxy)
+// {
+ selectedExportAdaptor->persist(proxy);
+ emit exportDone();
+// }
+// else
+// {
+// showMessage(tr("No document selected!"));
+// }
+}
+
+void UBDocumentController::exportDocumentSet()
+{
+
+}
+
+void UBDocumentController::documentZoomSliderValueChanged (int value)
+{
+ mDocumentUI->thumbnailWidget->setThumbnailWidth(value);
+
+ UBSettings::settings()->documentThumbnailWidth->set(value);
+}
+
+void UBDocumentController::itemChanged(QTreeWidgetItem * item, int column)
+{
+ UBDocumentProxyTreeItem* proxyItem = dynamic_cast<UBDocumentProxyTreeItem*>(item);
+
+ disconnect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*))
+ , this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
+
+ if (proxyItem)
+ {
+ if (proxyItem->proxy()->metaData(UBSettings::documentName).toString() != item->text(column))
+ {
+ proxyItem->proxy()->setMetaData(UBSettings::documentName, item->text(column));
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyItem->proxy());
+ }
+ }
+ else
+ {
+ // it is a group
+ UBDocumentGroupTreeItem* editedGroup = dynamic_cast<UBDocumentGroupTreeItem*>(item);
+ if (editedGroup)
+ {
+ for (int i = 0; i < item->childCount(); i++)
+ {
+ UBDocumentProxyTreeItem* childItem = dynamic_cast<UBDocumentProxyTreeItem*>(item->child(i));
+
+ if (childItem)
+ {
+ QString groupName;
+ if (0 != (item->flags() & Qt::ItemIsEditable))
+ {
+ childItem->proxy()->setMetaData(UBSettings::documentGroupName, item->text(column));
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(childItem->proxy());
+ }
+ }
+ }
+ }
+ }
+
+ connect(UBPersistenceManager::persistenceManager(), SIGNAL(documentMetadataChanged(UBDocumentProxy*)),
+ this, SLOT(updateDocumentInTree(UBDocumentProxy*)));
+}
+
+
+void UBDocumentController::importFile()
+{
+// UBDocumentGroupTreeItem* group = selectedDocumentGroupTreeItem();
+ UBDocumentManager *docManager = UBDocumentManager::documentManager();
+
+ QString defaultPath = UBSettings::settings()->lastImportFilePath->get().toString();
+ QString filePath = QFileDialog::getOpenFileName(mParentWidget, tr("Open Supported File"),
+ defaultPath, docManager->importFileFilter());
+
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ QApplication::processEvents();
+ QFileInfo fileInfo(filePath);
+
+ if (fileInfo.suffix().toLower() == "ubx") {
+ UBPersistenceManager::persistenceManager()->createDocumentProxiesStructure(docManager->importUbx(filePath, UBSettings::userDocumentDirectory()), true);
+
+ } else {
+ UBSettings::settings()->lastImportFilePath->set(QVariant(fileInfo.absolutePath()));
+
+ if (filePath.length() > 0)
+ {
+ UBDocumentProxy* createdDocument = 0;
+ QApplication::processEvents();
+ QFile selectedFile(filePath);
+
+ QString groupName = UBPersistenceManager::myDocumentsName;
+
+// if (groupName == mDefaultDocumentGroupName || fileInfo.suffix() != "ubz")
+ groupName = "";
+
+ showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true);
+
+ createdDocument = docManager->importFile(selectedFile, groupName);
+
+
+ if (createdDocument) {
+ selectDocument(createdDocument, true);
+
+ } else {
+ showMessage(tr("Failed to import file ... "));
+ }
+ }
+ }
+
+ QApplication::restoreOverrideCursor();
+
+}
+
+void UBDocumentController::addFolderOfImages()
+{
+ UBDocumentProxy* document = selectedDocumentProxy();
+
+ if (document)
+ {
+ QString defaultPath = UBSettings::settings()->lastImportFolderPath->get().toString();
+
+ QString imagesDir = QFileDialog::getExistingDirectory(mParentWidget, tr("Import all Images from Folder"), defaultPath);
+ QDir parentImageDir(imagesDir);
+ parentImageDir.cdUp();
+
+ UBSettings::settings()->lastImportFolderPath->set(QVariant(parentImageDir.absolutePath()));
+
+ if (imagesDir.length() > 0)
+ {
+ QDir dir(imagesDir);
+
+ int importedImageNumber
+ = UBDocumentManager::documentManager()->addImageDirToDocument(dir, document);
+
+ if (importedImageNumber == 0)
+ {
+ showMessage(tr("Folder does not contain any image files"));
+ UBApplication::applicationController->showDocument();
+ }
+ else
+ {
+ document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ UBMetadataDcSubsetAdaptor::persist(document);
+ reloadThumbnails();
+ }
+ }
+ }
+}
+
+
+void UBDocumentController::addFileToDocument()
+{
+ UBDocumentProxy* document = selectedDocumentProxy();
+
+ if (document)
+ {
+ addFileToDocument(document);
+ reloadThumbnails();
+ }
+}
+
+
+bool UBDocumentController::addFileToDocument(UBDocumentProxy* document)
+{
+ QString defaultPath = UBSettings::settings()->lastImportFilePath->get().toString();
+ QString filePath = QFileDialog::getOpenFileName(mParentWidget, tr("Open Supported File"), defaultPath, UBDocumentManager::documentManager()->importFileFilter());
+
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ QApplication::processEvents();
+
+ QFileInfo fileInfo(filePath);
+ UBSettings::settings()->lastImportFilePath->set(QVariant(fileInfo.absolutePath()));
+
+ bool success = false;
+
+ if (filePath.length() > 0)
+ {
+ QApplication::processEvents(); // NOTE: We performed this just a few lines before. Is it really necessary to do it again here??
+ QFile selectedFile(filePath);
+
+ showMessage(tr("Importing file %1...").arg(fileInfo.baseName()), true);
+
+ QStringList fileNames;
+ fileNames << filePath;
+ success = UBDocumentManager::documentManager()->addFilesToDocument(document, fileNames);
+
+ if (success)
+ {
+ document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ UBMetadataDcSubsetAdaptor::persist(document);
+ }
+ else
+ {
+ showMessage(tr("Failed to import file ... "));
+ }
+ }
+
+ QApplication::restoreOverrideCursor();
+
+ return success;
+}
+
+
+void UBDocumentController::moveSceneToIndex(UBDocumentProxy* proxy, int source, int target)
+{
+ if (UBDocumentContainer::movePageToIndex(source, target))
+ {
+ proxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ UBMetadataDcSubsetAdaptor::persist(proxy);
+
+ mDocumentUI->thumbnailWidget->hightlightItem(target);
+ }
+}
+
+
+void UBDocumentController::thumbnailViewResized()
+{
+ int maxWidth = qMin(UBSettings::maxThumbnailWidth, mDocumentUI->thumbnailWidget->width());
+
+ mDocumentUI->documentZoomSlider->setMaximum(maxWidth);
+}
+
+
+void UBDocumentController::pageSelectionChanged()
+{
+ if (mIsClosing)
+ return;
+
+ bool pageSelected = mDocumentUI->thumbnailWidget->selectedItems().count() > 0;
+
+ if (pageSelected)
+ itemSelectionChanged(Page);
+ else
+ itemSelectionChanged(None);
+
+ updateActions();
+}
+
+
+void UBDocumentController::selectionChanged()
+{
+ if (mIsClosing)
+ return;
+
+ int pageCount = -1;
+
+ UBDocumentProxyTreeItem* proxyTi = selectedDocumentProxyTreeItem();
+
+ if (proxyTi && proxyTi->proxy())
+ pageCount = proxyTi->proxy()->pageCount();
+
+ bool pageSelected = (mSelectionType == Page);
+ bool groupSelected = (mSelectionType == Folder);
+ bool docSelected = (mSelectionType == Document);
+
+ bool trashSelected = false;
+ if (groupSelected && selectedDocumentGroupTreeItem())
+ trashSelected = selectedDocumentGroupTreeItem()->isTrashFolder();
+
+ if ((docSelected || pageSelected) && proxyTi)
+ trashSelected = dynamic_cast<UBDocumentGroupTreeItem*>(proxyTi->parent())->isTrashFolder();
+
+ bool defaultGroupSelected = false;
+ if (groupSelected && selectedDocumentGroupTreeItem())
+ defaultGroupSelected = selectedDocumentGroupTreeItem()->isDefaultFolder();
+
+ mMainWindow->actionNewDocument->setEnabled((groupSelected || docSelected || pageSelected) && !trashSelected);
+ mMainWindow->actionExport->setEnabled((docSelected || pageSelected) && !trashSelected);
+ bool firstSceneSelected = false;
+ if(docSelected)
+ mMainWindow->actionDuplicate->setEnabled(!trashSelected);
+ else if(pageSelected){
+ QList<QGraphicsItem*> selection = mDocumentUI->thumbnailWidget->selectedItems();
+ if(pageCount == 1)
+ mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(0)));
+ else{
+ for(int i = 0; i < selection.count() && !firstSceneSelected; i += 1){
+ if(dynamic_cast<UBSceneThumbnailPixmap*>(selection.at(i))->sceneIndex() == 0){
+ mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(0)));
+ firstSceneSelected = true;
+ }
+ }
+ if(!firstSceneSelected)
+ mMainWindow->actionDuplicate->setEnabled(!trashSelected);
+ }
+ }
+ else
+ mMainWindow->actionDuplicate->setEnabled(false);
+
+
+ bool isAModel = dynamic_cast<UBDocumentGroupTreeItem*>(proxyTi->parent())->groupName() == UBPersistenceManager::modelsName;
+ mMainWindow->actionOpen->setEnabled((docSelected || pageSelected) && !trashSelected && !isAModel);
+ mMainWindow->actionRename->setEnabled((groupSelected || docSelected) && !trashSelected && !defaultGroupSelected);
+
+ mMainWindow->actionAddToWorkingDocument->setEnabled(pageSelected
+ && !(selectedDocumentProxy() == mBoardController->selectedDocument()) && !trashSelected);
+
+ bool deleteEnabled = false;
+ if (trashSelected)
+ {
+ if (docSelected)
+ deleteEnabled = true;
+ else if (groupSelected && selectedDocumentGroupTreeItem())
+ {
+ if (selectedDocumentGroupTreeItem()->childCount() > 0)
+ deleteEnabled = true;
+ }
+ }
+ else
+ {
+ deleteEnabled = groupSelected || docSelected || pageSelected;
+ }
+
+ if (pageSelected && (pageCount == mDocumentUI->thumbnailWidget->selectedItems().count()))
+ {
+ deleteEnabled = false;
+ }
+
+ if(pageSelected && firstSceneSelected)
+ deleteEnabled = false;
+
+ mMainWindow->actionDelete->setEnabled(deleteEnabled);
+
+ if (trashSelected)
+ {
+ if (docSelected)
+ {
+ mMainWindow->actionDelete->setIcon(QIcon(":/images/toolbar/deleteDocument.png"));
+ mMainWindow->actionDelete->setText(tr("Delete"));
+ }
+ else
+ {
+ mMainWindow->actionDelete->setIcon(QIcon(":/images/trash.png"));
+ mMainWindow->actionDelete->setText(tr("Empty"));
+ }
+ }
+ else
+ {
+ mMainWindow->actionDelete->setIcon(QIcon(":/images/trash.png"));
+ mMainWindow->actionDelete->setText(tr("Trash"));
+ }
+
+ mMainWindow->actionDocumentAdd->setEnabled((docSelected || pageSelected) && !trashSelected);
+ mMainWindow->actionImport->setEnabled(!trashSelected);
+
+}
+
+
+void UBDocumentController::documentSceneChanged(UBDocumentProxy* proxy, int pSceneIndex)
+{
+ Q_UNUSED(pSceneIndex);
+
+ if (proxy == selectedDocumentProxy())
+ {
+ reloadThumbnails();
+ }
+ TreeViewSelectionChanged(firstSelectedTreeIndex(), QModelIndex());
+}
+
+
+void UBDocumentController::pageDoubleClicked(QGraphicsItem* item, int index)
+{
+ Q_UNUSED(item);
+ Q_UNUSED(index);
+
+ bool pageSelected = (mSelectionType == Page);
+ bool groupSelected = (mSelectionType == Folder);
+ bool docSelected = (mSelectionType == Document);
+
+ bool trashSelected = false;
+ if (groupSelected && selectedDocumentGroupTreeItem())
+ trashSelected = selectedDocumentGroupTreeItem()->isTrashFolder();
+ UBDocumentProxyTreeItem* proxyTi = selectedDocumentProxyTreeItem();
+ if ((docSelected || pageSelected) && proxyTi)
+ trashSelected = dynamic_cast<UBDocumentGroupTreeItem*>(proxyTi->parent())->isTrashFolder();
+ if (trashSelected) return;
+
+ openSelectedItem();
+}
+
+void UBDocumentController::thumbnailPageDoubleClicked(QGraphicsItem* item, int index)
+{
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+ QModelIndex selectedIndex = firstSelectedTreeIndex();
+
+ if (selectedIndex.isValid()) {
+ if (docModel->inModel(selectedIndex)) {
+ UBApplication::showMessage(tr("The model documents are not editable. Copy it to \"My documents\" to be able to work with"));
+ return;
+ } else if (docModel->inTrash(selectedIndex)) {
+ return;
+ }
+ }
+
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ UBSceneThumbnailPixmap* thumb = qgraphicsitem_cast<UBSceneThumbnailPixmap*> (item);
+
+ if (thumb) {
+ UBDocumentProxy* proxy = thumb->proxy();
+ if (proxy && isOKToOpenDocument(proxy)) {
+ mBoardController->setActiveDocumentScene(proxy, index);
+ UBApplication::applicationController->showBoard();
+ }
+ }
+
+ QApplication::restoreOverrideCursor();
+}
+
+
+void UBDocumentController::pageClicked(QGraphicsItem* item, int index)
+{
+ Q_UNUSED(item);
+ Q_UNUSED(index);
+
+// selectionChanged();
+
+ pageSelectionChanged();
+}
+
+
+void UBDocumentController::closing()
+{
+ mIsClosing = true;
+
+ QStringList emptyGroups;
+
+ for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
+ {
+ QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
+
+ if (item->childCount() == 0)
+ {
+ UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
+ if (groupItem)
+ {
+ QString groupName = groupItem->groupName();
+ if (!emptyGroups.contains(groupName) && groupName != mDocumentTrashGroupName)
+ emptyGroups << groupName;
+ }
+ }
+ }
+
+ UBSettings::settings()->setValue("Document/EmptyGroupNames", emptyGroups);
+
+ UBPersistenceManager::persistenceManager()->closing();
+}
+
+void UBDocumentController::addToDocument()
+{
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+
+ QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
+
+ if (selectedItems.count() > 0)
+ {
+ int oldActiveSceneIndex = mBoardController->activeSceneIndex();
+
+ QList<QPair<UBDocumentProxy*, int> > pageInfoList;
+
+ foreach (QGraphicsItem* item, selectedItems)
+ {
+ UBSceneThumbnailPixmap* thumb = dynamic_cast<UBSceneThumbnailPixmap*> (item);
+
+ if (thumb && thumb->proxy())
+ {
+ QPair<UBDocumentProxy*, int> pageInfo(thumb->proxy(), thumb->sceneIndex());
+ pageInfoList << pageInfo;
+ }
+ }
+
+ for (int i = 0; i < pageInfoList.length(); i++)
+ {
+ mBoardController->addScene(pageInfoList.at(i).first, pageInfoList.at(i).second, false);
+ }
+
+ int newActiveSceneIndex = selectedItems.count() == mBoardController->selectedDocument()->pageCount() ? 0 : oldActiveSceneIndex + 1;
+ mDocumentUI->thumbnailWidget->selectItemAt(newActiveSceneIndex, false);
+ selectDocument(mBoardController->selectedDocument());
+ mBoardController->selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ UBMetadataDcSubsetAdaptor::persist(mBoardController->selectedDocument());
+ mBoardController->reloadThumbnails();
+
+ UBApplication::boardController->documentNavigator()->generateThumbnails(this);
+ UBApplication::applicationController->showBoard();
+
+ mBoardController->setActiveDocumentScene(newActiveSceneIndex);
+ }
+
+ QApplication::restoreOverrideCursor();
+}
+
+
+void UBDocumentController::addDocumentInTree(UBDocumentProxy* pDocument)
+{
+ QString documentName = pDocument->name();
+ QString documentGroup = pDocument->groupName();
+ if (documentGroup.isEmpty())
+ {
+ documentGroup = mDefaultDocumentGroupName;
+ }
+ UBDocumentGroupTreeItem* group = 0;
+ if (documentGroup.startsWith(UBSettings::trashedDocumentGroupNamePrefix))
+ {
+ group = mTrashTi;
+ }
+ else
+ {
+ for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
+ {
+ QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
+ UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
+ if (groupItem->groupName() == documentGroup)
+ {
+ group = groupItem;
+ break;
+ }
+ }
+ }
+
+ if (group == 0)
+ {
+ group = new UBDocumentGroupTreeItem(0); // deleted by the tree widget
+ group->setGroupName(documentGroup);
+ mDocumentUI->documentTreeWidget->addTopLevelItem(group);
+ }
+
+ UBDocumentProxyTreeItem *ti = new UBDocumentProxyTreeItem(group, pDocument, !group->isTrashFolder());
+ ti->setText(0, documentName);
+}
+
+
+void UBDocumentController::updateDocumentInTree(UBDocumentProxy* pDocument)
+{
+ QTreeWidgetItemIterator it(mDocumentUI->documentTreeWidget);
+ while (*it)
+ {
+ UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>((*it));
+
+ if (pi && pi->proxy() == pDocument)
+ {
+ pi->setText(0, pDocument->name());
+ break;
+ }
+ ++it;
+ }
+
+}
+
+
+QStringList UBDocumentController::allGroupNames()
+{
+ QStringList result;
+
+ for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++)
+ {
+ QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i);
+ UBDocumentGroupTreeItem* groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(item);
+ result << groupItem->groupName();
+ }
+
+ return result;
+}
+
+
+void UBDocumentController::renameSelectedItem()
+{
+ QModelIndex selectedIndex = firstSelectedTreeIndex();
+ if (selectedIndex.isValid()) {
+ mDocumentUI->documentTreeView->edit(selectedIndex);
+ }
+}
+
+
+bool UBDocumentController::isOKToOpenDocument(UBDocumentProxy* proxy)
+{
+ //check version
+ QString docVersion = proxy->metaData(UBSettings::documentVersion).toString();
+
+ if (docVersion.isEmpty() || docVersion.startsWith("4.1") || docVersion.startsWith("4.2")
+ || docVersion.startsWith("4.3") || docVersion.startsWith("4.4") || docVersion.startsWith("4.5")
+ || docVersion.startsWith("4.6")) // TODO UB 4.7 update if necessary
+ {
+ return true;
+ }
+ else
+ {
+ if (UBApplication::mainWindow->yesNoQuestion(tr("Open Document"),
+ tr("The document '%1' has been generated with a newer version of Sankore (%2). By opening it, you may lose some information. Do you want to proceed?")
+ .arg(proxy->metaData(UBSettings::documentName).toString())
+ .arg(docVersion)))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
+
+
+void UBDocumentController::showMessage(const QString& message, bool showSpinningWheel)
+{
+ if (mMessageWindow)
+ {
+ int margin = UBSettings::boardMargin;
+
+ QRect newSize = mDocumentUI->thumbnailWidget->geometry();
+
+ #ifdef Q_WS_MACX
+ QPoint point(newSize.left() + margin, newSize.bottom() - mMessageWindow->height() - margin);
+ mMessageWindow->move(mDocumentUI->thumbnailWidget->mapToGlobal(point));
+ #else
+ mMessageWindow->move(margin, newSize.height() - mMessageWindow->height() - margin);
+ #endif
+
+ mMessageWindow->showMessage(message, showSpinningWheel);
+ }
+}
+
+
+void UBDocumentController::hideMessage()
+{
+ if (mMessageWindow)
+ mMessageWindow->hideMessage();
+}
+
+
+void UBDocumentController::addImages()
+{
+ UBDocumentProxy* document = selectedDocumentProxy();
+
+ if (document)
+ {
+ QString defaultPath = UBSettings::settings()->lastImportFolderPath->get().toString();
+
+ QString extensions;
+
+ foreach (QString ext, UBSettings::settings()->imageFileExtensions)
+ {
+ extensions += " *.";
+ extensions += ext;
+ }
+
+ QStringList images = QFileDialog::getOpenFileNames(mParentWidget, tr("Add all Images to Document"),
+ defaultPath, tr("All Images (%1)").arg(extensions));
+
+ if (images.length() > 0)
+ {
+ QFileInfo firstImage(images.at(0));
+
+ UBSettings::settings()->lastImportFolderPath->set(QVariant(firstImage.absoluteDir().absolutePath()));
+
+ int importedImageNumber
+ = UBDocumentManager::documentManager()->addFilesToDocument(document, images);
+
+ if (importedImageNumber == 0)
+ {
+ UBApplication::showMessage(tr("Selection does not contain any image files!"));
+ UBApplication::applicationController->showDocument();
+ }
+ else
+ {
+ document->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ UBMetadataDcSubsetAdaptor::persist(document);
+ reloadThumbnails();
+ }
+ }
+ }
+}
+
+void UBDocumentController::toggleDocumentToolsPalette()
+{
+ if (!mToolsPalette->isVisible() && !mToolsPalettePositionned)
+ {
+ mToolsPalette->adjustSizeAndPosition();
+ int left = controlView()->width() - 20 - mToolsPalette->width();
+ int top = (controlView()->height() - mToolsPalette->height()) / 2;
+
+ mToolsPalette->setCustomPosition(true);
+ mToolsPalette->move(left, top);
+
+ mToolsPalettePositionned = true;
+ }
+
+ bool visible = mToolsPalette->isVisible();
+ mToolsPalette->setVisible(!visible);
+}
+
+
+void UBDocumentController::cut()
+{
+ // TODO - implemented me
+}
+
+
+void UBDocumentController::copy()
+{
+ // TODO - implemented me
+}
+
+
+void UBDocumentController::paste()
+{
+ // TODO - implemented me
+}
+
+
+void UBDocumentController::focusChanged(QWidget *old, QWidget *current)
+{
+ Q_UNUSED(old);
+ UBDocumentTreeModel *treeModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+
+ if (current == mDocumentUI->thumbnailWidget)
+ {
+ if (mDocumentUI->thumbnailWidget->selectedItems().count() > 0)
+ mSelectionType = Page;
+ else
+ mSelectionType = None;
+ }
+ else if (current == mDocumentUI->documentTreeView)
+ {
+ if (treeModel->isDocument(firstSelectedTreeIndex()))
+ mSelectionType = Document;
+ else if (treeModel->isCatalog(firstSelectedTreeIndex()))
+ mSelectionType = Folder;
+ else
+ mSelectionType = None;
+ }
+ else if (current == mDocumentUI->documentZoomSlider)
+ {
+ if (mDocumentUI->thumbnailWidget->selectedItems().count() > 0)
+ mSelectionType = Page;
+ else
+ mSelectionType = None;
+ }
+ else
+ {
+ if (old != mDocumentUI->thumbnailWidget &&
+ old != mDocumentUI->documentTreeView &&
+ old != mDocumentUI->documentZoomSlider)
+ {
+ mSelectionType = None;
+ }
+ }
+
+// selectionChanged();
+// updateActions();
+}
+
+void UBDocumentController::updateActions()
+{
+ if (mIsClosing)
+ return;
+
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+
+ QModelIndex selectedIndex = firstSelectedTreeIndex();
+ UBDocumentProxy *selectedProxy = docModel->proxyData(selectedIndex);
+ int pageCount = -1;
+ if (selectedProxy) {
+ pageCount = selectedProxy->pageCount();
+ }
+
+ bool pageSelected = false;
+ bool groupSelected = false;
+ bool docSelected = false;
+
+ if (mSelectionType == Page) {
+ pageSelected = true;
+ } else {
+ if (docModel->isDocument(firstSelectedTreeIndex())) {
+ docSelected = true;
+ } else if (docModel->isCatalog(firstSelectedTreeIndex())) {
+ groupSelected = true;
+ }
+ }
+
+ bool trashSelected = docModel->inTrash(selectedIndex) || selectedIndex == docModel->trashIndex() ? true : false;
+ bool modelSelected = docModel->inModel(selectedIndex) || selectedIndex == docModel->modelsIndex() ? true : false;
+
+ mMainWindow->actionNewDocument->setEnabled(docModel->newNodeAllowed(selectedIndex) && !modelSelected);
+ mMainWindow->actionNewFolder->setEnabled(docModel->newNodeAllowed(selectedIndex));
+ mMainWindow->actionExport->setEnabled((docSelected || pageSelected || groupSelected) && !trashSelected);
+ updateExportSubActions(selectedIndex);
+
+ bool firstSceneSelected = false;
+
+ if (docSelected) {
+ mMainWindow->actionDuplicate->setEnabled(!trashSelected && !modelSelected);
+
+ } else if (pageSelected) {
+ QList<QGraphicsItem*> selection = mDocumentUI->thumbnailWidget->selectedItems();
+ if(pageCount == 1) {
+ mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(0)));
+
+ } else {
+ for (int i = 0; i < selection.count() && !firstSceneSelected; i += 1) {
+ if (qgraphicsitem_cast<UBSceneThumbnailPixmap*>(selection.at(i))->sceneIndex() == 0) {
+ mMainWindow->actionDuplicate->setEnabled(!trashSelected && pageCanBeDuplicated(UBDocumentContainer::pageFromSceneIndex(0)));
+ firstSceneSelected = true;
+ break;
+ }
+ }
+ if (!firstSceneSelected) {
+ mMainWindow->actionDuplicate->setEnabled(!trashSelected);
+ }
+ }
+
+ } else {
+ mMainWindow->actionDuplicate->setEnabled(false);
+ }
+
+ mMainWindow->actionOpen->setEnabled((docSelected || pageSelected) && !trashSelected && !modelSelected);
+ mMainWindow->actionRename->setEnabled(docModel->isOkToRename(selectedIndex));
+
+ mMainWindow->actionAddToWorkingDocument->setEnabled(pageSelected
+ && !(selectedProxy == mBoardController->selectedDocument()) && !trashSelected);
+
+ DeletionType deletionForSelection = deletionTypeForSelection(mSelectionType, selectedIndex, docModel);
+ mMainWindow->actionDelete->setEnabled(deletionForSelection != NoDeletion);
+
+ switch (static_cast<int>(deletionForSelection)) {
+ case MoveToTrash :
+ case DeletePage :
+ mMainWindow->actionDelete->setIcon(QIcon(":/images/trash.png"));
+ mMainWindow->actionDelete->setText(tr("Trash"));
+ break;
+ case CompleteDelete :
+ mMainWindow->actionDelete->setIcon(QIcon(":/images/toolbar/deleteDocument.png"));
+ mMainWindow->actionDelete->setText(tr("Delete"));
+ break;
+ case EmptyFolder :
+ mMainWindow->actionDelete->setIcon(QIcon(":/images/trash.png"));
+ mMainWindow->actionDelete->setText(tr("Empty"));
+ break;
+ case EmptyTrash :
+ mMainWindow->actionDelete->setIcon(QIcon(":/images/toolbar/deleteDocument.png"));
+ mMainWindow->actionDelete->setText(tr("Empty"));
+ break;
+ }
+
+ mMainWindow->actionDocumentAdd->setEnabled((docSelected || pageSelected) && !trashSelected && !modelSelected);
+ mMainWindow->actionImport->setEnabled(!trashSelected);
+
+}
+
+void UBDocumentController::updateExportSubActions(const QModelIndex &selectedIndex)
+{
+ UBDocumentManager *documentManager = UBDocumentManager::documentManager();
+ for (int i = 0; i < documentManager->supportedExportAdaptors().length(); i++)
+ {
+ UBExportAdaptor* adaptor = documentManager->supportedExportAdaptors()[i];
+ if (adaptor->associatedAction()) {
+ adaptor->associatedAction()->setEnabled(adaptor->associatedActionactionAvailableFor(selectedIndex));
+ }
+ }
+}
+
+void UBDocumentController::currentIndexMoved(const QModelIndex &newIndex, const QModelIndex &PreviousIndex)
+{
+ Q_UNUSED(newIndex);
+ Q_UNUSED(PreviousIndex);
+
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+ UBDocumentProxy *newProxy = docModel->proxyData(newIndex);
+ if (newProxy) {
+ UBDocumentProxy *cp = new UBDocumentProxy(*newProxy); // we cannot use newProxy because it will be destroyed later
+ pureSetDocument(cp);
+ mBoardController->pureSetDocument(cp);
+ mBoardController->pureSetDocument(newProxy);
+ }
+ mCurrentIndexMoved = true;
+}
+
+void UBDocumentController::deletePages(QList<QGraphicsItem *> itemsToDelete)
+{
+ if (itemsToDelete.count() > 0)
+ {
+ QList<int> sceneIndexes;
+ UBDocumentProxy* proxy = 0;
+
+ foreach (QGraphicsItem* item, itemsToDelete)
+ {
+ UBSceneThumbnailPixmap* thumb = dynamic_cast<UBSceneThumbnailPixmap*> (item);
+
+ if (thumb)
+ {
+ proxy = thumb->proxy();
+ if (proxy)
+ {
+ sceneIndexes.append(thumb->sceneIndex());
+ }
+
+ }
+ }
+
+ if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Page"),tr("This is an irreversible action!") +"\n\n" + tr("Are you sure you want to remove %n page(s) from the selected document '%1'?", "", sceneIndexes.count()).arg(proxy->metaData(UBSettings::documentName).toString())))
+ {
+// UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+// if (docModel->proxyData(docModel->currentIndex()) == proxy) {
+
+// int offset = 0;
+// foreach(int index, sceneIndexes)
+// {
+//// if (UBPersistenceManager::persistenceManager()->isSceneInCached(proxy, index)) {
+// mBoardController->regenerateThumbnails();
+//// }
+//// mBoardController->deletePages(sceneIndexes);
+
+// deleteThumbPage(index - offset);
+// offset++;
+// }
+
+// emit UBDocumentContainer::documentThumbnailsUpdated(this);
+
+// } else {
+ UBDocumentContainer::deletePages(sceneIndexes);
+ mBoardController->regenerateThumbnails();
+
+// }
+
+
+ proxy->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime()));
+ UBMetadataDcSubsetAdaptor::persist(proxy);
+
+ int minIndex = proxy->pageCount() - 1;
+ foreach (int i, sceneIndexes)
+ minIndex = qMin(i, minIndex);
+
+ mDocumentUI->thumbnailWidget->selectItemAt(minIndex);
+ }
+ }
+}
+
+int UBDocumentController::getSelectedItemIndex()
+{
+ QList<QGraphicsItem*> selectedItems = mDocumentUI->thumbnailWidget->selectedItems();
+
+ if (selectedItems.count() > 0)
+ {
+ UBSceneThumbnailPixmap* thumb = dynamic_cast<UBSceneThumbnailPixmap*> (selectedItems.last());
+ return thumb->sceneIndex();
+ }
+ else return -1;
+}
+
+bool UBDocumentController::pageCanBeMovedUp(int page)
+{
+ if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
+ return page >= 2;
+ else
+ return page >= 1;
+}
+
+bool UBDocumentController::pageCanBeMovedDown(int page)
+{
+ if(UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
+ return page != 0 && page < selectedDocument()->pageCount() - 1;
+ else
+ return page < selectedDocument()->pageCount() - 1;
+}
+
+bool UBDocumentController::pageCanBeDuplicated(int page)
+{
+ return page != 0;
+}
+
+bool UBDocumentController::pageCanBeDeleted(int page)
+{
+ return page != 0;
+}
+
+void UBDocumentController::setDocument(UBDocumentProxy *document, bool forceReload)
+{
+ UBDocumentContainer::setDocument(document, forceReload);
+// UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel->setCurrentDocument(document);
+}
+
+QModelIndex UBDocumentController::firstSelectedTreeIndex()
+{
+ return selectedTreeIndexes().count() ? selectedTreeIndexes().first() : QModelIndex();
+}
+
+UBDocumentController::DeletionType
+UBDocumentController::deletionTypeForSelection(LastSelectedElementType pTypeSelection
+ , const QModelIndex &selectedIndex
+ , UBDocumentTreeModel *docModel) const
+{
+ if (pTypeSelection == Page) {
+ if (!firstSceneSelected()) {
+ return DeletePage;
+ }
+ } else if (docModel->isConstant(selectedIndex)) {
+ if (selectedIndex == docModel->trashIndex()) {
+ return EmptyTrash;
+ }
+ return EmptyFolder;
+ } else if (pTypeSelection != None) {
+ if (docModel->inTrash(selectedIndex)) {
+ return CompleteDelete;
+ } else {
+ return MoveToTrash;
+ }
+ }
+
+ return NoDeletion;
+}
+
+bool UBDocumentController::firstSceneSelected() const
+{
+ bool firstSceneSelected = false;
+ QList<QGraphicsItem*> selection = mDocumentUI->thumbnailWidget->selectedItems();
+ for(int i = 0; i < selection.count() && !firstSceneSelected; i += 1){
+ if(dynamic_cast<UBSceneThumbnailPixmap*>(selection.at(i))->sceneIndex() == 0){
+ firstSceneSelected = true;
+ }
+ }
+
+ return firstSceneSelected;
+}
+
+void UBDocumentController::refreshDocumentThumbnailsView(UBDocumentContainer*)
+{
+ UBDocumentTreeModel *docModel = UBPersistenceManager::persistenceManager()->mDocumentTreeStructureModel;
+ UBDocumentProxy *currentDocumentProxy = selectedDocument();
+
+ QModelIndex current = docModel->indexForProxy(currentDocumentProxy);
+
+ if (!current.isValid()) {
+ mDocumentUI->thumbnailWidget->setGraphicsItems(QList<QGraphicsItem*>()
+ , QList<QUrl>()
+ , QStringList()
+ , UBApplication::mimeTypeUniboardPage);
+ return;
+ }
+
+ QList<const QPixmap*> thumbs;
+
+ if (currentDocumentProxy)
+ {
+ UBThumbnailAdaptor::load(currentDocumentProxy, thumbs);
+ qDebug() << "document proxy taken" << currentDocumentProxy->name();
+ }
+
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+
+ QList<QGraphicsItem*> items;
+ QList<QUrl> itemsPath;
+
+ QGraphicsPixmapItem *selection = 0;
+
+ QStringList labels;
+
+ if (currentDocumentProxy)
+ {
+ for (int i = 0; i < currentDocumentProxy->pageCount(); i++)
+ {
+ const QPixmap* pix = thumbs.at(i);
+ QGraphicsPixmapItem *pixmapItem = new UBSceneThumbnailPixmap(*pix, currentDocumentProxy, i); // deleted by the tree widget
+
+ if (currentDocumentProxy == mBoardController->selectedDocument() && mBoardController->activeSceneIndex() == i)
+ {
+ selection = pixmapItem;
+ }
+
+ items << pixmapItem;
+ int pageIndex = pageFromSceneIndex(i);
+ if(pageIndex)
+ labels << tr("Page %1").arg(pageIndex);
+ else
+ labels << tr("Title page");
+
+ itemsPath.append(QUrl::fromLocalFile(currentDocumentProxy->persistencePath() + QString("/pages/%1").arg(UBDocumentContainer::pageFromSceneIndex(i))));
+ }
+ }
+
+ mDocumentUI->thumbnailWidget->setGraphicsItems(items, itemsPath, labels, UBApplication::mimeTypeUniboardPage);
+
+ if (docModel->inTrash(current) || docModel->inModel(current)) {
+ mDocumentUI->thumbnailWidget->setDragEnabled(false);
+ } else {
+ mDocumentUI->thumbnailWidget->setDragEnabled(true);
+ }
+
+ mDocumentUI->thumbnailWidget->ensureVisible(0, 0, 10, 10);
+
+ if (selection) {
+ disconnect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
+ UBSceneThumbnailPixmap *currentScene = dynamic_cast<UBSceneThumbnailPixmap*>(selection);
+ if (currentScene)
+ mDocumentUI->thumbnailWidget->hightlightItem(currentScene->sceneIndex());
+ connect(mDocumentUI->thumbnailWidget->scene(), SIGNAL(selectionChanged()), this, SLOT(pageSelectionChanged()));
+ }
+
+ QApplication::restoreOverrideCursor();
+}
diff --git a/Sankore-3.1/src/document/UBDocumentController.h b/Sankore-3.1/src/document/UBDocumentController.h
index 0adc46c..3b52061 100644
--- a/Sankore-3.1/src/document/UBDocumentController.h
+++ b/Sankore-3.1/src/document/UBDocumentController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,136 +18,420 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBDOCUMENTCONTROLLER_H_
-#define UBDOCUMENTCONTROLLER_H_
-
-#include <QtGui>
-#include "document/UBDocumentContainer.h"
-
-namespace Ui
-{
- class documents;
-}
-
-#include "gui/UBMessageWindow.h"
-
-class UBGraphicsScene;
-class QDialog;
-class UBDocumentProxy;
-class UBBoardController;
-class UBThumbnailsScene;
-class UBDocumentGroupTreeItem;
-class UBDocumentProxyTreeItem;
-class UBMainWindow;
-class UBDocumentToolsPalette;
-
-class UBDocumentController : public UBDocumentContainer
-{
- Q_OBJECT;
-
- public:
- UBDocumentController(UBMainWindow* mainWindow);
- virtual ~UBDocumentController();
-
- void closing();
- QWidget* controlView();
- UBDocumentProxyTreeItem* findDocument(UBDocumentProxy* proxy);
- bool addFileToDocument(UBDocumentProxy* document);
- void deletePages(QList<QGraphicsItem*> itemsToDelete);
- int getSelectedItemIndex();
-
- bool pageCanBeMovedUp(int page);
- bool pageCanBeMovedDown(int page);
- bool pageCanBeDuplicated(int page);
- bool pageCanBeDeleted(int page);
- QString documentTrashGroupName(){ return mDocumentTrashGroupName;}
- QString defaultDocumentGroupName(){ return mDefaultDocumentGroupName;}
-
- signals:
- void exportDone();
-
- public slots:
- void createNewDocument();
- void createNewDocumentGroup();
- void deleteSelectedItem();
- void renameSelectedItem();
- void openSelectedItem();
- void duplicateSelectedItem();
- void importFile();
- void moveSceneToIndex(UBDocumentProxy* proxy, int source, int target);
- void selectDocument(UBDocumentProxy* proxy, bool setAsCurrentDocument = true);
- void show();
- void hide();
- void showMessage(const QString& message, bool showSpinningWheel = false);
- void hideMessage();
- void toggleDocumentToolsPalette();
- void cut();
- void copy();
- void paste();
- void focusChanged(QWidget *old, QWidget *current);
-
- protected:
- virtual void setupViews();
- virtual void setupToolbar();
- void setupPalettes();
- bool isOKToOpenDocument(UBDocumentProxy* proxy);
- UBDocumentProxy* selectedDocumentProxy();
- UBDocumentProxyTreeItem* selectedDocumentProxyTreeItem();
- UBDocumentGroupTreeItem* selectedDocumentGroupTreeItem();
- QStringList allGroupNames();
-
- enum LastSelectedElementType
- {
- None = 0, Folder, Document, Page
- };
-
- LastSelectedElementType mSelectionType;
-
- private:
- QWidget *mParentWidget;
- UBBoardController *mBoardController;
- Ui::documents* mDocumentUI;
- UBMainWindow* mMainWindow;
- QWidget *mDocumentWidget;
- QPointer<UBMessageWindow> mMessageWindow;
- QAction* mAddFolderOfImagesAction;
- QAction* mAddFileToDocumentAction;
- QAction* mAddImagesAction;
- bool mIsClosing;
- UBDocumentToolsPalette *mToolsPalette;
- bool mToolsPalettePositionned;
- UBDocumentGroupTreeItem* mTrashTi;
-
- void moveDocumentToTrash(UBDocumentGroupTreeItem* groupTi, UBDocumentProxyTreeItem *proxyTi);
- void moveFolderToTrash(UBDocumentGroupTreeItem* groupTi);
- QString mDocumentTrashGroupName;
- QString mDefaultDocumentGroupName;
-
- private slots:
- void documentZoomSliderValueChanged (int value);
- void loadDocumentProxies();
- void itemSelectionChanged();
- void exportDocument();
- void itemChanged(QTreeWidgetItem * item, int column);
- void thumbnailViewResized();
- void pageSelectionChanged();
- void selectionChanged();
- void documentSceneChanged(UBDocumentProxy* proxy, int pSceneIndex);
- void pageDoubleClicked(QGraphicsItem* item, int index);
- void pageClicked(QGraphicsItem* item, int index);
- void itemClicked(QTreeWidgetItem * item, int column );
- void addToDocument();
- void addDocumentInTree(UBDocumentProxy* pDocument);
- void updateDocumentInTree(UBDocumentProxy* pDocument);
- void addFolderOfImages();
- void addFileToDocument();
- void addImages();
-
- void refreshDocumentThumbnailsView(UBDocumentContainer* source);
-};
-
-
-
-#endif /* UBDOCUMENTCONTROLLER_H_ */
+
+
+
+#ifndef UBDOCUMENTCONTROLLER_H_
+#define UBDOCUMENTCONTROLLER_H_
+
+#include <QtGui>
+#include "document/UBDocumentContainer.h"
+#include "core/UBApplicationController.h"
+#include "core/UBApplication.h"
+
+namespace Ui
+{
+ class documents;
+}
+
+#include "gui/UBMessageWindow.h"
+
+class UBGraphicsScene;
+class QDialog;
+class UBDocumentProxy;
+class UBBoardController;
+class UBThumbnailsScene;
+class UBDocumentGroupTreeItem;
+class UBDocumentProxyTreeItem;
+class UBMainWindow;
+class UBDocumentToolsPalette;
+
+
+class UBDocumentReplaceDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ UBDocumentReplaceDialog(const QString &pIncommingName, const QStringList &pFileList, QWidget *parent = 0, Qt::WindowFlags pFlags = 0);
+ void setRegexp(const QRegExp pRegExp);
+ bool validString(const QString &pStr);
+ void setFileNameAndList(const QString &fileName, const QStringList &pLst);
+ QString labelTextWithName(const QString &documentName) const;
+ QString lineEditText() const {return mLineEdit->text();}
+
+signals:
+ void createNewFolder(QString str);
+ void closeDialog();
+
+private slots:
+ void accept();
+ void reject();
+
+ void reactOnTextChanged(const QString &pStr);
+
+private:
+ QLineEdit *mLineEdit;
+ QRegExpValidator *mValidator;
+ QStringList mFileNameList;
+ QString mIncommingName;
+ QPushButton *acceptButton;
+ const QString acceptText;
+ const QString replaceText;
+ const QString cancelText;
+ QLabel *mLabelText;
+};
+
+
+class UBDocumentTreeNode
+{
+public:
+ friend class UBDocumentTreeModel;
+
+ enum Type {
+ Catalog = 0
+ , Document
+ };
+
+ UBDocumentTreeNode(Type pType, const QString &pName, const QString &pDisplayName = QString(), UBDocumentProxy *pProxy = 0);
+ UBDocumentTreeNode() : mType(Catalog), mParent(0), mProxy(0) {;}
+ ~UBDocumentTreeNode();
+
+ QList<UBDocumentTreeNode*> children() const {return mChildren;}
+ UBDocumentTreeNode *parentNode() {return mParent;}
+ Type nodeType() const {return mType;}
+ QString nodeName() const {return mName;}
+ QString displayName() const {return mDisplayName;}
+ void setNodeName(const QString &str) {mName = str; mDisplayName = str;}
+ void addChild(UBDocumentTreeNode *pChild);
+ void insertChild(int pIndex, UBDocumentTreeNode *pChild);
+ void removeChild(int index);
+ UBDocumentProxy *proxyData() const {return mProxy;}
+ bool isRoot() {return !mParent;}
+ bool isTopLevel() {return mParent && !mParent->mParent;}
+ UBDocumentTreeNode *clone();
+ QString dirPathInHierarchy();
+
+private:
+ Type mType;
+ QString mName;
+ QString mDisplayName;
+ UBDocumentTreeNode *mParent;
+ QList<UBDocumentTreeNode*> mChildren;
+ QPointer<UBDocumentProxy> mProxy;
+};
+Q_DECLARE_METATYPE(UBDocumentTreeNode*)
+
+class UBDocumentTreeModel : public QAbstractItemModel {
+ Q_OBJECT
+
+public:
+ enum eAncestors {
+ aMyDocuments
+ , aUntitledDocuments
+ , aModel
+ , aTrash
+ };
+
+ enum eCopyMode {
+ aReference
+ , aContentCopy
+ };
+
+ enum eAddItemMode {
+ aEnd = 0 //Add to the end of the children list
+ , aDetectPosition //Detect the appropriate position (sorting)
+ };
+
+ UBDocumentTreeModel(QObject *parent = 0);
+ ~UBDocumentTreeModel();
+
+ QModelIndex index(int row, int column, const QModelIndex &parent) const;
+ QModelIndex parent(const QModelIndex &child) const;
+
+ int rowCount(const QModelIndex &parent) const;
+ int columnCount(const QModelIndex &parent) const;
+ QVariant data(const QModelIndex &index, int role) const;
+ bool setData(const QModelIndex &index, const QVariant &value, int role);
+ Qt::ItemFlags flags ( const QModelIndex & index ) const;
+ Qt::DropActions supportedDropActions() const {return Qt::MoveAction | Qt::CopyAction;}
+ QStringList mimeTypes() const;
+ QMimeData *mimeData (const QModelIndexList &indexes) const;
+ bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+ bool removeRows(int row, int count, const QModelIndex &parent);
+
+ QModelIndex indexForNode(UBDocumentTreeNode *pNode) const;
+ QPersistentModelIndex persistentIndexForNode(UBDocumentTreeNode *pNode);
+// bool insertRow(int row, const QModelIndex &parent);
+
+ QPersistentModelIndex copyIndexToNewParent(const QModelIndex &source, const QModelIndex &newParent, eCopyMode pMode = aReference);
+ void moveIndex(const QModelIndex &source, const QModelIndex &newParent);
+ void moveNode(const QModelIndex &source, const QModelIndex &newParent);
+ UBDocumentTreeNode *currentNode() const {return mCurrentNode;} //work around for sorting model.
+ void setCurrentNode(UBDocumentTreeNode *pNode) {mCurrentNode = pNode;}
+ QModelIndex currentIndex() {return indexForNode(mCurrentNode);} //index representing a current document
+ QModelIndex indexForProxy(UBDocumentProxy *pSearch) const;
+ void setCurrentDocument(UBDocumentProxy *pDocument);
+ void setRootNode(UBDocumentTreeNode *pRoot);
+ UBDocumentTreeNode *rootNode() const {return mRootNode;}
+ UBDocumentProxy *proxyForIndex(const QModelIndex &pIndex) const;
+ QString virtualDirForIndex(const QModelIndex &pIndex) const;
+ QString virtualPathForIndex(const QModelIndex &pIndex) const;
+ QStringList nodeNameList(const QModelIndex &pIndex) const;
+ bool newNodeAllowed(const QModelIndex &pSelectedIndex) const;
+ QModelIndex goTo(const QString &dir);
+ bool inTrash(const QModelIndex &index) const;
+ bool inModel(const QModelIndex &index) const;
+ bool inUntitledDocuments(const QModelIndex &index) const;
+ bool isCatalog(const QModelIndex &index) const {return nodeFromIndex(index)->nodeType() == UBDocumentTreeNode::Catalog;}
+ bool isDocument(const QModelIndex &index) const {return nodeFromIndex(index)->nodeType() == UBDocumentTreeNode::Document;}
+ bool isToplevel(const QModelIndex &index) const {return nodeFromIndex(index) ? nodeFromIndex(index)->isTopLevel() : false;}
+ bool isConstant(const QModelIndex &index) const {return isToplevel(index) || (index == mUntitledDocuments);}
+ bool isOkToRename(const QModelIndex &index) const {return flags(index) & Qt::ItemIsEditable;}
+ UBDocumentProxy *proxyData(const QModelIndex &index) const {return nodeFromIndex(index)->proxyData();}
+ void addDocument(UBDocumentProxy *pProxyData, const QModelIndex &pParent = QModelIndex());
+ void addNewDocument(UBDocumentProxy *pProxyData, const QModelIndex &pParent = QModelIndex());
+ void addCatalog(const QString &pName, const QModelIndex &pParent);
+ QList<UBDocumentProxy*> newDocuments() {return mNewDocuments;}
+ void markDocumentAsNew(UBDocumentProxy *pDoc) {if (indexForProxy(pDoc).isValid()) mNewDocuments << pDoc;}
+ void setNewName(const QModelIndex &index, const QString &newName);
+ QString adjustNameForParentIndex(const QString &pName, const QModelIndex &pIndex);
+
+ QPersistentModelIndex myDocumentsIndex() const {return mMyDocuments;}
+ QPersistentModelIndex modelsIndex() const {return mModels;}
+ QPersistentModelIndex trashIndex() const {return mTrash;}
+ QPersistentModelIndex untitledDocumentsIndex() const {return mUntitledDocuments;}
+ UBDocumentTreeNode *nodeFromIndex(const QModelIndex &pIndex) const;
+ virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+ void sortChilds(const QModelIndex &parentIndex);
+ void sortIndexes(QList<UBDocumentTreeNode *> &unsortedIndexList);
+ static bool nodeLessThan(const UBDocumentTreeNode *firstIndex, const UBDocumentTreeNode *secondIndex);
+ void setHighLighted(const QModelIndex &newHighLighted) {mHighLighted = newHighLighted;}
+ QModelIndex highLighted() {return mHighLighted;}
+
+signals:
+ void indexChanged(const QModelIndex &newIndex, const QModelIndex &oldIndex);
+ void currentIndexMoved(const QModelIndex &newIndex, const QModelIndex &previous); /* Be aware that when you got the signal
+ "previous" index would have allready been deleted.
+ check it for "valid" first */
+
+private:
+ UBDocumentTreeNode *mRootNode;
+ UBDocumentTreeNode *mCurrentNode;
+
+ UBDocumentTreeNode *findProxy(UBDocumentProxy *pSearch, UBDocumentTreeNode *pParent) const;
+ QModelIndex pIndexForNode(const QModelIndex &parent, UBDocumentTreeNode *pNode) const;
+ bool isDescendantOf(const QModelIndex &pPossibleDescendant, const QModelIndex &pPossibleAncestor) const;
+ QModelIndex addNode(UBDocumentTreeNode *pFreeNode, const QModelIndex &pParent, eAddItemMode pMode = aDetectPosition);
+ int positionForParent(UBDocumentTreeNode *pFreeNode, UBDocumentTreeNode *pParentNode);
+ QPersistentModelIndex mRoot;
+ QPersistentModelIndex mMyDocuments;
+ QPersistentModelIndex mModels;
+ QPersistentModelIndex mTrash;
+ QPersistentModelIndex mUntitledDocuments;
+ QList<UBDocumentProxy*> mNewDocuments;
+ QModelIndex mHighLighted;
+
+};
+
+class UBDocumentTreeMimeData : public QMimeData
+{
+ Q_OBJECT
+
+ public:
+ QList<QModelIndex> indexes() const {return mIndexes;}
+ void setIndexes (const QList<QModelIndex> &pIndexes) {mIndexes = pIndexes;}
+
+ private:
+ QList<QModelIndex> mIndexes;
+};
+
+class UBDocumentTreeView : public QTreeView
+{
+ Q_OBJECT
+
+public:
+ UBDocumentTreeView (QWidget *parent = 0);
+
+public slots:
+ void setSelectedAndExpanded(const QModelIndex &pIndex, bool pExpand = true);
+ void onModelIndexChanged(const QModelIndex &pNewIndex, const QModelIndex &pOldIndex);
+ void hSliderRangeChanged(int min, int max);
+ void adjustSize();
+
+protected:
+ void dragEnterEvent(QDragEnterEvent *event);
+ void dragLeaveEvent(QDragLeaveEvent *event);
+ void dragMoveEvent(QDragMoveEvent *event);
+ void dropEvent(QDropEvent *event);
+ void paintEvent(QPaintEvent *event);
+
+
+ UBDocumentTreeModel *fullModel() {return qobject_cast<UBDocumentTreeModel*>(model());}
+ void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
+
+private:
+ bool isAcceptable(const QModelIndex &dragIndex, const QModelIndex &atIndex);
+ Qt::DropAction acceptableAction(const QModelIndex &dragIndex, const QModelIndex &atIndex);
+ void updateIndexEnvirons(const QModelIndex &index);
+};
+
+class UBDocumentTreeItemDelegate : public QStyledItemDelegate
+{
+ Q_OBJECT
+
+public:
+ UBDocumentTreeItemDelegate(QObject *parent = 0);
+
+private slots:
+ void commitAndCloseEditor();
+ void processChangedText(const QString &str) const;
+ bool validateString(const QString &str) const;
+
+protected:
+ QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const;
+ void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
+ void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex &index) const;
+
+private:
+ mutable QStringList mExistingFileNames;
+};
+
+class UBDocumentController : public UBDocumentContainer
+{
+ Q_OBJECT
+
+ public:
+
+ enum DeletionType {
+ MoveToTrash = 0
+ , CompleteDelete
+ , EmptyFolder
+ , EmptyTrash
+ , DeletePage
+ , NoDeletion
+ };
+
+ enum LastSelectedElementType
+ {
+ None = 0, Folder, Document, Page
+ };
+
+ UBDocumentController(UBMainWindow* mainWindow);
+ virtual ~UBDocumentController();
+
+ void closing();
+ QWidget* controlView();
+ UBDocumentProxyTreeItem* findDocument(UBDocumentProxy* proxy);
+ bool addFileToDocument(UBDocumentProxy* document);
+ void deletePages(QList<QGraphicsItem*> itemsToDelete);
+ int getSelectedItemIndex();
+
+ bool pageCanBeMovedUp(int page);
+ bool pageCanBeMovedDown(int page);
+ bool pageCanBeDuplicated(int page);
+ bool pageCanBeDeleted(int page);
+ QString documentTrashGroupName(){ return mDocumentTrashGroupName;}
+ QString defaultDocumentGroupName(){ return mDefaultDocumentGroupName;}
+
+ void setDocument(UBDocumentProxy *document, bool forceReload = false);
+ QModelIndex firstSelectedTreeIndex();
+ UBDocumentProxy *firstSelectedTreeProxy();
+ inline DeletionType deletionTypeForSelection(LastSelectedElementType pTypeSelection
+ , const QModelIndex &selectedIndex
+ , UBDocumentTreeModel *docModel) const;
+ bool firstSceneSelected() const;
+ QWidget *mainWidget() const {return mDocumentWidget;}
+
+ signals:
+ void exportDone();
+
+ public slots:
+ void createNewDocument();
+ void createNewDocumentGroup();
+ void deleteSelectedItem();
+ void emptyFolder(const QModelIndex &index, DeletionType pDeletionType = MoveToTrash);
+ void deleteIndexAndAssociatedData(const QModelIndex &pIndex);
+ void renameSelectedItem();
+ void openSelectedItem();
+ void duplicateSelectedItem();
+ void importFile();
+ void moveSceneToIndex(UBDocumentProxy* proxy, int source, int target);
+ void selectDocument(UBDocumentProxy* proxy, bool setAsCurrentDocument = true);
+ void show();
+ void hide();
+ void showMessage(const QString& message, bool showSpinningWheel = false);
+ void hideMessage();
+ void toggleDocumentToolsPalette();
+ void cut();
+ void copy();
+ void paste();
+ void focusChanged(QWidget *old, QWidget *current);
+ void updateActions();
+ void updateExportSubActions(const QModelIndex &selectedIndex);
+ void currentIndexMoved(const QModelIndex &newIndex, const QModelIndex &PreviousIndex);
+
+protected:
+ virtual void setupViews();
+ virtual void setupToolbar();
+ void setupPalettes();
+ bool isOKToOpenDocument(UBDocumentProxy* proxy);
+ UBDocumentProxy* selectedDocumentProxy();
+ QList<UBDocumentProxy*> selectedProxies();
+ QModelIndexList selectedTreeIndexes();
+ UBDocumentProxyTreeItem* selectedDocumentProxyTreeItem();
+ UBDocumentGroupTreeItem* selectedDocumentGroupTreeItem();
+ QStringList allGroupNames();
+
+ LastSelectedElementType mSelectionType;
+
+ private:
+ QWidget *mParentWidget;
+ UBBoardController *mBoardController;
+ Ui::documents* mDocumentUI;
+ UBMainWindow* mMainWindow;
+ QWidget *mDocumentWidget;
+ QPointer<UBMessageWindow> mMessageWindow;
+ QAction* mAddFolderOfImagesAction;
+ QAction* mAddFileToDocumentAction;
+ QAction* mAddImagesAction;
+ bool mIsClosing;
+ UBDocumentToolsPalette *mToolsPalette;
+ bool mToolsPalettePositionned;
+ UBDocumentGroupTreeItem* mTrashTi;
+
+ void moveDocumentToTrash(UBDocumentGroupTreeItem* groupTi, UBDocumentProxyTreeItem *proxyTi);
+ void moveFolderToTrash(UBDocumentGroupTreeItem* groupTi);
+ QString mDocumentTrashGroupName;
+ QString mDefaultDocumentGroupName;
+
+ UBDocumentProxy *mCurrentTreeDocument;
+ bool mCurrentIndexMoved;
+
+ private slots:
+ void documentZoomSliderValueChanged (int value);
+ void TreeViewSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous);
+ void TreeViewSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+ void itemSelectionChanged(LastSelectedElementType newSelection);
+ void exportDocument();
+ void exportDocumentSet();
+ void itemChanged(QTreeWidgetItem * item, int column);
+ void thumbnailViewResized();
+ void pageSelectionChanged();
+ void selectionChanged();
+ void documentSceneChanged(UBDocumentProxy* proxy, int pSceneIndex);
+ void pageDoubleClicked(QGraphicsItem* item, int index);
+ void thumbnailPageDoubleClicked(QGraphicsItem* item, int index);
+ void pageClicked(QGraphicsItem* item, int index);
+ void addToDocument();
+ void addDocumentInTree(UBDocumentProxy* pDocument);
+ void updateDocumentInTree(UBDocumentProxy* pDocument);
+ void addFolderOfImages();
+ void addFileToDocument();
+ void addImages();
+ void refreshDocumentThumbnailsView(UBDocumentContainer* source);
+};
+
+
+
+#endif /* UBDOCUMENTCONTROLLER_H_ */
diff --git a/Sankore-3.1/src/document/UBDocumentProxy.cpp b/Sankore-3.1/src/document/UBDocumentProxy.cpp
index 82f95df..a716c0a 100644
--- a/Sankore-3.1/src/document/UBDocumentProxy.cpp
+++ b/Sankore-3.1/src/document/UBDocumentProxy.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,222 +18,235 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBDocumentProxy.h"
-
-#include "frameworks/UBStringUtils.h"
-
-#include "core/UBApplication.h"
-#include "core/UBPersistenceManager.h"
-#include "core/UBSettings.h"
-#include "core/UBDocumentManager.h"
-
-#include "core/memcheck.h"
-
-UBDocumentProxy::UBDocumentProxy()
- : mPageCount(0)
-{
- init();
-}
-
-
-UBDocumentProxy::UBDocumentProxy(const QString& pPersistancePath)
- : mPageCount(0)
-{
- init();
- setPersistencePath(pPersistancePath);
-}
-
-
-void UBDocumentProxy::init()
-{
- setMetaData(UBSettings::documentGroupName, "");
-
- QDateTime now = QDateTime::currentDateTime();
- setMetaData(UBSettings::documentName, now.toString(Qt::SystemLocaleShortDate));
-
- setUuid(QUuid::createUuid());
-
- setDefaultDocumentSize(UBSettings::settings()->pageSize->get().toSize());
-
- //teacherGuide metadata
- setMetaData(UBSettings::sessionTitle,"");
- setMetaData(UBSettings::sessionAuthors,"");
- setMetaData(UBSettings::sessionObjectives,"");
- setMetaData(UBSettings::sessionKeywords,"");
- setMetaData(UBSettings::sessionGradeLevel,"");
- setMetaData(UBSettings::sessionSubjects,"");
- setMetaData(UBSettings::sessionType,"");
- setMetaData(UBSettings::sessionLicence,"");
-}
-
-
-UBDocumentProxy::~UBDocumentProxy()
-{
- // NOOP
-}
-
-
-int UBDocumentProxy::pageCount()
-{
- return mPageCount;
-}
-
-
-void UBDocumentProxy::setPageCount(int pPageCount)
-{
- mPageCount = pPageCount;
-}
-
-
-int UBDocumentProxy::incPageCount()
-{
- if (mPageCount <= 0)
- {
- mPageCount = 1;
- }
- else
- {
- mPageCount++;
- }
-
- return mPageCount;
-
-}
-
-
-int UBDocumentProxy::decPageCount()
-{
- mPageCount --;
-
- if (mPageCount < 0)
- {
- mPageCount = 0;
- }
-
- return mPageCount;
-}
-
-QString UBDocumentProxy::persistencePath() const
-{
- return mPersistencePath;
-}
-
-void UBDocumentProxy::setPersistencePath(const QString& pPersistencePath)
-{
- if (pPersistencePath != mPersistencePath)
- {
- mIsModified = true;
- mPersistencePath = pPersistencePath;
- }
-}
-
-void UBDocumentProxy::setMetaData(const QString& pKey, const QVariant& pValue)
-{
- if (mMetaDatas.contains(pKey) && mMetaDatas.value(pKey) == pValue)
- return;
- else
- {
- mIsModified = true;
- mMetaDatas.insert(pKey, pValue);
- if (pKey == UBSettings::documentUpdatedAt)
- {
- UBDocumentManager *documentManager = UBDocumentManager::documentManager();
- if (documentManager)
- documentManager->emitDocumentUpdated(this);
- }
- }
-}
-
-QVariant UBDocumentProxy::metaData(const QString& pKey) const
-{
- if (mMetaDatas.contains(pKey))
- {
- return mMetaDatas.value(pKey);
- }
- else
- {
- qDebug() << "Unknown metadata key" << pKey;
- return QString(""); // failsafe
- }
-}
-
-QHash<QString, QVariant> UBDocumentProxy::metaDatas() const
-{
- return mMetaDatas;
-}
-
-QString UBDocumentProxy::name() const
-{
- return metaData(UBSettings::documentName).toString();
-}
-
-QString UBDocumentProxy::groupName() const
-{
- return metaData(UBSettings::documentGroupName).toString();
-}
-
-QSize UBDocumentProxy::defaultDocumentSize() const
-{
- if (mMetaDatas.contains(UBSettings::documentSize))
- return metaData(UBSettings::documentSize).toSize();
- else
- return UBSettings::settings()->pageSize->get().toSize();
-}
-
-void UBDocumentProxy::setDefaultDocumentSize(QSize pSize)
-{
- if (defaultDocumentSize() != pSize)
- {
- setMetaData(UBSettings::documentSize, QVariant(pSize));
- emit defaultDocumentSizeChanged();
-
- mIsModified = true;
- }
-}
-
-void UBDocumentProxy::setDefaultDocumentSize(int pWidth, int pHeight)
-{
- setDefaultDocumentSize(QSize(pWidth, pHeight));
-}
-
-
-QUuid UBDocumentProxy::uuid() const
-{
- QString id = metaData(UBSettings::documentIdentifer).toString();
- QString sUuid = id.replace(UBSettings::uniboardDocumentNamespaceUri + "/", "");
-
- return QUuid(sUuid);
-}
-
-void UBDocumentProxy::setUuid(const QUuid& uuid)
-{
- setMetaData(UBSettings::documentIdentifer,
- UBSettings::uniboardDocumentNamespaceUri + "/" + UBStringUtils::toCanonicalUuid(uuid));
-}
-
-
-QDateTime UBDocumentProxy::documentDate()
-{
- if(mMetaDatas.contains(UBSettings::documentDate))
- return UBStringUtils::fromUtcIsoDate(metaData(UBSettings::documentDate).toString());
- return QDateTime::currentDateTime();
-}
-
-QDateTime UBDocumentProxy::lastUpdate()
-{
- if(mMetaDatas.contains(UBSettings::documentUpdatedAt))
- return UBStringUtils::fromUtcIsoDate(metaData(UBSettings::documentUpdatedAt).toString());
- return QDateTime().currentDateTime();
-}
-
-bool UBDocumentProxy::isModified() const
-{
- return mIsModified;
-}
-
-
-
-
-
+
+
+
+#include "UBDocumentProxy.h"
+
+#include "frameworks/UBStringUtils.h"
+
+#include "core/UBApplication.h"
+#include "core/UBPersistenceManager.h"
+#include "core/UBSettings.h"
+#include "core/UBDocumentManager.h"
+
+#include "core/memcheck.h"
+
+UBDocumentProxy::UBDocumentProxy()
+ : mPageCount(0)
+{
+ init();
+}
+
+UBDocumentProxy::UBDocumentProxy(const UBDocumentProxy &rValue) :
+ QObject()
+{
+ mPersistencePath = rValue.mPersistencePath;
+ mMetaDatas = rValue.mMetaDatas;
+ mIsModified = rValue.mIsModified;
+ mPageCount = rValue.mPageCount;
+}
+
+UBDocumentProxy::UBDocumentProxy(const QString& pPersistancePath)
+ : mPageCount(0)
+{
+ init();
+ setPersistencePath(pPersistancePath);
+}
+
+bool UBDocumentProxy::theSameDocument(UBDocumentProxy *proxy)
+{
+ return proxy && mPersistencePath == proxy->mPersistencePath;
+}
+
+void UBDocumentProxy::init()
+{
+ setMetaData(UBSettings::documentGroupName, "");
+
+ QDateTime now = QDateTime::currentDateTime();
+ setMetaData(UBSettings::documentName, now.toString(Qt::SystemLocaleShortDate));
+
+ setUuid(QUuid::createUuid());
+
+ setDefaultDocumentSize(UBSettings::settings()->pageSize->get().toSize());
+
+ //teacherGuide metadata
+ setMetaData(UBSettings::sessionTitle,"");
+ setMetaData(UBSettings::sessionAuthors,"");
+ setMetaData(UBSettings::sessionObjectives,"");
+ setMetaData(UBSettings::sessionKeywords,"");
+ setMetaData(UBSettings::sessionGradeLevel,"");
+ setMetaData(UBSettings::sessionSubjects,"");
+ setMetaData(UBSettings::sessionType,"");
+ setMetaData(UBSettings::sessionLicence,"");
+}
+
+
+UBDocumentProxy::~UBDocumentProxy()
+{
+ // NOOP
+}
+
+
+int UBDocumentProxy::pageCount()
+{
+ return mPageCount;
+}
+
+
+void UBDocumentProxy::setPageCount(int pPageCount)
+{
+ mPageCount = pPageCount;
+}
+
+
+int UBDocumentProxy::incPageCount()
+{
+ if (mPageCount <= 0)
+ {
+ mPageCount = 1;
+ }
+ else
+ {
+ mPageCount++;
+ }
+
+ return mPageCount;
+
+}
+
+
+int UBDocumentProxy::decPageCount()
+{
+ mPageCount --;
+
+ if (mPageCount < 0)
+ {
+ mPageCount = 0;
+ }
+
+ return mPageCount;
+}
+
+QString UBDocumentProxy::persistencePath() const
+{
+ return mPersistencePath;
+}
+
+void UBDocumentProxy::setPersistencePath(const QString& pPersistencePath)
+{
+ if (pPersistencePath != mPersistencePath)
+ {
+ mIsModified = true;
+ mPersistencePath = pPersistencePath;
+ }
+}
+
+void UBDocumentProxy::setMetaData(const QString& pKey, const QVariant& pValue)
+{
+ if (mMetaDatas.contains(pKey) && mMetaDatas.value(pKey) == pValue)
+ return;
+ else
+ {
+ mIsModified = true;
+ mMetaDatas.insert(pKey, pValue);
+ if (pKey == UBSettings::documentUpdatedAt)
+ {
+ UBDocumentManager *documentManager = UBDocumentManager::documentManager();
+ if (documentManager)
+ documentManager->emitDocumentUpdated(this);
+ }
+ }
+}
+
+QVariant UBDocumentProxy::metaData(const QString& pKey) const
+{
+ if (mMetaDatas.contains(pKey))
+ {
+ return mMetaDatas.value(pKey);
+ }
+ else
+ {
+ qDebug() << "Unknown metadata key" << pKey;
+ return QString(""); // failsafe
+ }
+}
+
+QHash<QString, QVariant> UBDocumentProxy::metaDatas() const
+{
+ return mMetaDatas;
+}
+
+QString UBDocumentProxy::name() const
+{
+ return metaData(UBSettings::documentName).toString();
+}
+
+QString UBDocumentProxy::groupName() const
+{
+ return metaData(UBSettings::documentGroupName).toString();
+}
+
+QSize UBDocumentProxy::defaultDocumentSize() const
+{
+ if (mMetaDatas.contains(UBSettings::documentSize))
+ return metaData(UBSettings::documentSize).toSize();
+ else
+ return UBSettings::settings()->pageSize->get().toSize();
+}
+
+void UBDocumentProxy::setDefaultDocumentSize(QSize pSize)
+{
+ if (defaultDocumentSize() != pSize)
+ {
+ setMetaData(UBSettings::documentSize, QVariant(pSize));
+ emit defaultDocumentSizeChanged();
+
+ mIsModified = true;
+ }
+}
+
+void UBDocumentProxy::setDefaultDocumentSize(int pWidth, int pHeight)
+{
+ setDefaultDocumentSize(QSize(pWidth, pHeight));
+}
+
+
+QUuid UBDocumentProxy::uuid() const
+{
+ QString id = metaData(UBSettings::documentIdentifer).toString();
+ QString sUuid = id.replace(UBSettings::uniboardDocumentNamespaceUri + "/", "");
+
+ return QUuid(sUuid);
+}
+
+void UBDocumentProxy::setUuid(const QUuid& uuid)
+{
+ setMetaData(UBSettings::documentIdentifer,
+ UBSettings::uniboardDocumentNamespaceUri + "/" + UBStringUtils::toCanonicalUuid(uuid));
+}
+
+
+QDateTime UBDocumentProxy::documentDate()
+{
+ if(mMetaDatas.contains(UBSettings::documentDate))
+ return UBStringUtils::fromUtcIsoDate(metaData(UBSettings::documentDate).toString());
+ return QDateTime::currentDateTime();
+}
+
+QDateTime UBDocumentProxy::lastUpdate()
+{
+ if(mMetaDatas.contains(UBSettings::documentUpdatedAt))
+ return UBStringUtils::fromUtcIsoDate(metaData(UBSettings::documentUpdatedAt).toString());
+ return QDateTime().currentDateTime();
+}
+
+bool UBDocumentProxy::isModified() const
+{
+ return mIsModified;
+}
+
+
+
+
+
diff --git a/Sankore-3.1/src/document/UBDocumentProxy.h b/Sankore-3.1/src/document/UBDocumentProxy.h
index 8273501..14331b3 100644
--- a/Sankore-3.1/src/document/UBDocumentProxy.h
+++ b/Sankore-3.1/src/document/UBDocumentProxy.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,89 +18,93 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBDOCUMENTPROXY_H_
-#define UBDOCUMENTPROXY_H_
-
-#include <QtGui>
-
-#include "frameworks/UBStringUtils.h"
-
-#include "core/UBSettings.h"
-
-class UBGraphicsScene;
-
-class UBDocumentProxy : public QObject
-{
- Q_OBJECT
-
- friend class UBPersistenceManager;
-
- public:
-
- UBDocumentProxy();
- UBDocumentProxy(const QString& pPersistencePath);
-
- virtual ~UBDocumentProxy();
-
- QString persistencePath() const;
-
- void setPersistencePath(const QString& pPersistencePath);
-
- void setMetaData(const QString& pKey , const QVariant& pValue);
- QVariant metaData(const QString& pKey) const;
- QHash<QString, QVariant> metaDatas() const;
-
- QString name() const;
- QString groupName() const;
- QDateTime documentDate();
-
- QDateTime lastUpdate();
-
-
- QSize defaultDocumentSize() const;
- void setDefaultDocumentSize(QSize pSize);
- void setDefaultDocumentSize(int pWidth, int pHeight);
-
- QUuid uuid() const;
- void setUuid(const QUuid& uuid);
-
- bool isModified() const;
-
- int pageCount();
-
- protected:
- void setPageCount(int pPageCount);
- int incPageCount();
- int decPageCount();
-
- signals:
- void defaultDocumentSizeChanged();
-
- private:
-
- void init();
-
- QString mPersistencePath;
-
- QHash<QString, QVariant> mMetaDatas;
-
- bool mIsModified;
-
- int mPageCount;
-
-};
-
-inline bool operator==(const UBDocumentProxy &proxy1, const UBDocumentProxy &proxy2)
-{
- return proxy1.persistencePath() == proxy2.persistencePath();
-}
-
-inline uint qHash(const UBDocumentProxy &key)
-{
- return qHash(key.persistencePath());
-}
-
-
-#endif /* UBDOCUMENTPROXY_H_ */
+
+
+
+#ifndef UBDOCUMENTPROXY_H_
+#define UBDOCUMENTPROXY_H_
+
+#include <QtGui>
+
+#include "frameworks/UBStringUtils.h"
+
+#include "core/UBSettings.h"
+
+class UBGraphicsScene;
+
+class UBDocumentProxy : public QObject
+{
+ Q_OBJECT
+
+ friend class UBPersistenceManager;
+
+ public:
+
+ UBDocumentProxy();
+ UBDocumentProxy(const UBDocumentProxy &rValue);
+ UBDocumentProxy(const QString& pPersistencePath);
+
+ virtual ~UBDocumentProxy();
+
+ QString persistencePath() const;
+
+ void setPersistencePath(const QString& pPersistencePath);
+
+ void setMetaData(const QString& pKey , const QVariant& pValue);
+ QVariant metaData(const QString& pKey) const;
+ QHash<QString, QVariant> metaDatas() const;
+
+ QString name() const;
+ QString groupName() const;
+ QDateTime documentDate();
+
+ QDateTime lastUpdate();
+
+
+ QSize defaultDocumentSize() const;
+ void setDefaultDocumentSize(QSize pSize);
+ void setDefaultDocumentSize(int pWidth, int pHeight);
+
+ QUuid uuid() const;
+ void setUuid(const QUuid& uuid);
+
+ bool isModified() const;
+
+ int pageCount();
+
+ bool theSameDocument(UBDocumentProxy *proxy);
+
+ protected:
+ void setPageCount(int pPageCount);
+ int incPageCount();
+ int decPageCount();
+
+ signals:
+ void defaultDocumentSizeChanged();
+
+ private:
+
+ void init();
+
+ QString mPersistencePath;
+
+ QHash<QString, QVariant> mMetaDatas;
+
+ bool mIsModified;
+
+ int mPageCount;
+
+};
+
+inline bool operator==(const UBDocumentProxy &proxy1, const UBDocumentProxy &proxy2)
+{
+ return proxy1.persistencePath() == proxy2.persistencePath();
+}
+
+inline uint qHash(const UBDocumentProxy &key)
+{
+ return qHash(key.persistencePath());
+}
+
+
+#endif /* UBDOCUMENTPROXY_H_ */
diff --git a/Sankore-3.1/src/domain/UBAbstractUndoCommand.cpp b/Sankore-3.1/src/domain/UBAbstractUndoCommand.cpp
index 628c92c..5408321 100644
--- a/Sankore-3.1/src/domain/UBAbstractUndoCommand.cpp
+++ b/Sankore-3.1/src/domain/UBAbstractUndoCommand.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBAbstractUndoCommand.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/domain/UBAbstractUndoCommand.h b/Sankore-3.1/src/domain/UBAbstractUndoCommand.h
index 9fa03df..15c25ae 100644
--- a/Sankore-3.1/src/domain/UBAbstractUndoCommand.h
+++ b/Sankore-3.1/src/domain/UBAbstractUndoCommand.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBABSTRACTUNDOCOMMAND_H_
#define UBABSTRACTUNDOCOMMAND_H_
diff --git a/Sankore-3.1/src/domain/UBDocumentUndoCommand.cpp b/Sankore-3.1/src/domain/UBDocumentUndoCommand.cpp
index b1eacd2..880afcd 100644
--- a/Sankore-3.1/src/domain/UBDocumentUndoCommand.cpp
+++ b/Sankore-3.1/src/domain/UBDocumentUndoCommand.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBDocumentUndoCommand.h"
#include "document/UBDocumentProxy.h"
diff --git a/Sankore-3.1/src/domain/UBDocumentUndoCommand.h b/Sankore-3.1/src/domain/UBDocumentUndoCommand.h
index 90d079a..a839b15 100644
--- a/Sankore-3.1/src/domain/UBDocumentUndoCommand.h
+++ b/Sankore-3.1/src/domain/UBDocumentUndoCommand.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOCUMENTUNDOCOMMAND_H_
#define UBDOCUMENTUNDOCOMMAND_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsAudioItem.h b/Sankore-3.1/src/domain/UBGraphicsAudioItem.h
index f1d2d6b..f55fd45 100644
--- a/Sankore-3.1/src/domain/UBGraphicsAudioItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsAudioItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/domain/UBGraphicsAudioItemDelegate.cpp b/Sankore-3.1/src/domain/UBGraphicsAudioItemDelegate.cpp
index f1d2d6b..f55fd45 100644
--- a/Sankore-3.1/src/domain/UBGraphicsAudioItemDelegate.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsAudioItemDelegate.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/domain/UBGraphicsAudioItemDelegate.h b/Sankore-3.1/src/domain/UBGraphicsAudioItemDelegate.h
index 812b015..5173ce2 100644
--- a/Sankore-3.1/src/domain/UBGraphicsAudioItemDelegate.h
+++ b/Sankore-3.1/src/domain/UBGraphicsAudioItemDelegate.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/domain/UBGraphicsDelegateFrame.cpp b/Sankore-3.1/src/domain/UBGraphicsDelegateFrame.cpp
index 70b7617..9305d01 100644
--- a/Sankore-3.1/src/domain/UBGraphicsDelegateFrame.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsDelegateFrame.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,987 +18,988 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBGraphicsDelegateFrame.h"
-
-#include <QtGui>
-#include <QtSvg>
-
-#include "core/UBApplication.h"
-#include "core/UBSettings.h"
-
-#include "board/UBBoardController.h"
-#include "board/UBBoardView.h"
-
-#include "domain/UBGraphicsItemDelegate.h"
-#include "domain/UBGraphicsScene.h"
-#include "domain/UBGraphicsProxyWidget.h"
-
-#include "gui/UBResources.h"
-
-#include "core/memcheck.h"
-
-UBGraphicsDelegateFrame::UBGraphicsDelegateFrame(UBGraphicsItemDelegate* pDelegate, QRectF pRect, qreal pFrameWidth, bool respectRatio)
- : QGraphicsRectItem(), QObject(pDelegate)
- , mCurrentTool(None)
- , mDelegate(pDelegate)
- , mVisible(true)
- , mFrameWidth(pFrameWidth)
- , mNominalFrameWidth(pFrameWidth)
- , mRespectRatio(respectRatio)
- , mAngle(0)
- , mAngleOffset(0)
- , mTotalScaleX(-1)
- , mTotalScaleY(-1)
- , mTranslateX(0)
- , mTranslateY(0)
- , mTotalTranslateX(0)
- , mTotalTranslateY(0)
- , mOperationMode(Scaling)
- , mFlippedX(false)
- , mFlippedY(false)
- , mMirrorX(false)
- , mMirrorY(false)
-{
- mAngleTolerance = UBSettings::settings()->angleTolerance->get().toReal();
-
- setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
-
- setAcceptedMouseButtons(Qt::LeftButton);
- setRect(pRect.adjusted(mFrameWidth, mFrameWidth, mFrameWidth * -1, mFrameWidth * -1));
-
- setBrush(QBrush(UBSettings::paletteColor));
- setPen(Qt::NoPen);
- setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control));
-
- mBottomRightResizeGripSvgItem = new QGraphicsSvgItem(":/images/resize.svg", this);
- mBottomResizeGripSvgItem = new QGraphicsSvgItem(":/images/resizeBottom.svg", this);
- mLeftResizeGripSvgItem = new QGraphicsSvgItem(":/images/resizeLeft.svg", this);
- mRightResizeGripSvgItem = new QGraphicsSvgItem(":/images/resizeRight.svg", this);
- mTopResizeGripSvgItem = new QGraphicsSvgItem(":/images/resizeTop.svg", this);
-
- mBottomRightResizeGrip = new QGraphicsRectItem(this);
- mBottomRightResizeGrip->setPen(Qt::NoPen);
- mBottomResizeGrip = new QGraphicsRectItem(this);
- mBottomResizeGrip->setPen(Qt::NoPen);
- mLeftResizeGrip = new QGraphicsRectItem(this);
- mLeftResizeGrip->setPen(Qt::NoPen);
- mRightResizeGrip = new QGraphicsRectItem(this);
- mRightResizeGrip->setPen(Qt::NoPen);
- mTopResizeGrip = new QGraphicsRectItem(this);
- mTopResizeGrip->setPen(Qt::NoPen);
-
- mRotateButton = new QGraphicsSvgItem(":/images/rotate.svg", this);
- mRotateButton->setCursor(UBResources::resources()->rotateCursor);
- mRotateButton->setVisible(mDelegate->canRotate());
-
- updateResizeCursors();
-
- setAntiScale(1.0);
-
- positionHandles();
-
- this->setAcceptHoverEvents(true);
-}
-
-
-UBGraphicsDelegateFrame::~UBGraphicsDelegateFrame()
-{
- // NOOP
-}
-
-void UBGraphicsDelegateFrame::setAntiScale(qreal pAntiScale)
-{
- mFrameWidth = mNominalFrameWidth * pAntiScale;
-
- QTransform tr;
- tr.scale(pAntiScale, pAntiScale);
-
- mBottomRightResizeGripSvgItem->setTransform(tr);
- mBottomResizeGripSvgItem->setTransform(tr);
- mLeftResizeGripSvgItem->setTransform(tr);
- mRightResizeGripSvgItem->setTransform(tr);
- mTopResizeGripSvgItem->setTransform(tr);
- mRotateButton->setTransform(tr);
-}
-
-
-void UBGraphicsDelegateFrame::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
-{
- Q_UNUSED(option);
- Q_UNUSED(widget);
-
- QPainterPath path;
- path.addRoundedRect(rect(), mFrameWidth / 2, mFrameWidth / 2);
-
- if (rect().width() > 1 && rect().height() > 1)
- {
- QPainterPath extruded;
- extruded.addRect(rect().adjusted(mFrameWidth, mFrameWidth, (mFrameWidth * -1), (mFrameWidth * -1)));
- path = path.subtracted(extruded);
- }
-
- painter->fillPath(path, brush());
-}
-
-
-QPainterPath UBGraphicsDelegateFrame::shape() const
-{
- QPainterPath path;
-
- //We do not use the rounded rect here because we want the bottom right corner
- //to be included in the frame (for resize grip handling : #702)
- path.addRect(rect());
-
- if (rect().width() > 0 && rect().height() > 0)
- {
- QPainterPath extruded;
- extruded.addRect(rect().adjusted(mFrameWidth, mFrameWidth, mFrameWidth * -1, mFrameWidth * -1));
- path = path.subtracted(extruded);
- }
-
- return path;
-}
-
-
-void UBGraphicsDelegateFrame::initializeTransform()
-{
- QTransform itemTransform = delegated()->sceneTransform();
- QRectF itemRect = delegated()->boundingRect();
- QPointF topLeft = itemTransform.map(itemRect.topLeft());
- QPointF topRight = itemTransform.map(itemRect.topRight());
- QPointF bottomLeft = itemTransform.map(itemRect.bottomLeft());
-
- qreal horizontalFlip = (topLeft.x() > topRight.x()) ? -1 : 1;
- mMirrorX = horizontalFlip < 0 ;
- if(horizontalFlip < 0){
- // why this is because of the way of calculating the translations that checks which side is the most is the
- // nearest instead of checking which one is the left side.
- QPointF tmp = topLeft;
- topLeft = topRight;
- topRight = tmp;
-
- // because of the calculation of the height is done by lenght and not deltaY
- bottomLeft = itemTransform.map(itemRect.bottomRight());
- }
-
- qreal verticalFlip = (bottomLeft.y() < topLeft.y()) ? -1 : 1;
- // not sure that is usefull
- mMirrorY = verticalFlip < 0;
- if(verticalFlip < 0 && !mMirrorX){
- topLeft = itemTransform.map(itemRect.bottomLeft());
- topRight = itemTransform.map(itemRect.bottomRight());
- bottomLeft = itemTransform.map(itemRect.topLeft());
- }
-
- QLineF topLine(topLeft, topRight);
- QLineF leftLine(topLeft, bottomLeft);
- qreal width = topLine.length();
- qreal height = leftLine.length();
-
- mAngle = topLine.angle();
-
- // the fact the the length is used we loose the horizontalFlip information
- // a better way to do this is using DeltaX that preserve the direction information.
- mTotalScaleX = (width / itemRect.width()) * horizontalFlip;
- mTotalScaleY = height / itemRect.height() * verticalFlip;
-
- QTransform tr;
- QPointF center = delegated()->boundingRect().center();
- tr.translate(center.x() * mTotalScaleX, center.y() * mTotalScaleY);
- tr.rotate(-mAngle);
- tr.translate(-center.x() * mTotalScaleX, -center.y() * mTotalScaleY);
- tr.scale(mTotalScaleX, mTotalScaleY);
-
- mTotalTranslateX = delegated()->transform().dx() - tr.dx();
- mTotalTranslateY = delegated()->transform().dy() - tr.dy();
-}
-
-
-void UBGraphicsDelegateFrame::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- mDelegate->startUndoStep();
-
- mStartingPoint = event->scenePos();
-
- initializeTransform();
-
- mScaleX = 1;
- mScaleY = 1;
- mTranslateX = 0;
- mTranslateY = 0;
- mAngleOffset = 0;
-
- mInitialTransform = buildTransform();
- mOriginalSize = delegated()->boundingRect().size();
-
- mCurrentTool = toolFromPos(event->pos());
- setCursorFromAngle(QString::number((int)mAngle % 360));
- event->accept();
-
- if (moving())
- prepareFramesToMove(getLinkedFrames());
-
-}
-
-void UBGraphicsDelegateFrame::setCursorFromAngle(QString angle)
-{
- if (mCurrentTool == Rotate)
- {
- QWidget *controlViewport = UBApplication::boardController->controlView()->viewport();
-
- QSize cursorSize(45,30);
-
-
- QImage mask_img(cursorSize, QImage::Format_Mono);
- mask_img.fill(0xff);
- QPainter mask_ptr(&mask_img);
- mask_ptr.setBrush( QBrush( QColor(0, 0, 0) ) );
- mask_ptr.drawRoundedRect(0,0, cursorSize.width()-1, cursorSize.height()-1, 6, 6);
- QBitmap bmpMask = QBitmap::fromImage(mask_img);
-
-
- QPixmap pixCursor(cursorSize);
- pixCursor.fill(QColor(Qt::white));
-
- QPainter painter(&pixCursor);
-
- painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
- painter.setBrush(QBrush(Qt::white));
- painter.setPen(QPen(QColor(Qt::black)));
- painter.drawRoundedRect(1,1,cursorSize.width()-2,cursorSize.height()-2,6,6);
- painter.setFont(QFont("Arial", 10));
- painter.drawText(1,1,cursorSize.width(),cursorSize.height(), Qt::AlignCenter, angle.append(QChar(176)));
- painter.end();
-
- pixCursor.setMask(bmpMask);
- controlViewport->setCursor(pixCursor);
- }
-}
-
-
-bool UBGraphicsDelegateFrame::canResizeBottomRight(qreal width, qreal height, qreal scaleFactor)
-{
- bool res = false;
-
- if(!mMirrorX && !mMirrorX && ((width * scaleFactor) > 2*mFrameWidth && (height * scaleFactor) > 2*mFrameWidth)){
- res = true;
- }else if(mMirrorX && !mMirrorY && (-width * scaleFactor) > 2*mFrameWidth && (height*scaleFactor) > 2*mFrameWidth){
- res = true;
- }else if(!mMirrorX && mMirrorY && (width * scaleFactor) > 2*mFrameWidth && (-height*scaleFactor) > 2*mFrameWidth){
- res = true;
- }else if(mMirrorX && mMirrorY && (-width * scaleFactor) > 2*mFrameWidth && (-height*scaleFactor) > 2*mFrameWidth){
- res = true;
- }
-
- return res;
-}
-
-QPointF UBGraphicsDelegateFrame::getFixedPointFromPos()
-{
- QPointF fixedPoint;
- if (!moving() && !rotating())
- {
- if (resizingTop())
- {
- if (mMirrorX && mMirrorY)
- {
- if ((0 < mAngle) && (mAngle < 90))
- fixedPoint = delegated()->sceneBoundingRect().topLeft();
- else
- fixedPoint = delegated()->sceneBoundingRect().topRight();
- }
- else
- {
- if ((0 < mAngle) && (mAngle <= 90))
- fixedPoint = delegated()->sceneBoundingRect().bottomRight();
- else
- fixedPoint = delegated()->sceneBoundingRect().bottomLeft();
- }
- }
- else if (resizingLeft())
- {
- if (mMirrorX && mMirrorY)
- {
- if ((0 < mAngle) && (mAngle < 90))
- fixedPoint = delegated()->sceneBoundingRect().bottomLeft();
- else
- fixedPoint = delegated()->sceneBoundingRect().topLeft();
- }
- else
- {
- if ((0 < mAngle) && (mAngle <= 90))
- fixedPoint = delegated()->sceneBoundingRect().topRight();
- else
- fixedPoint = delegated()->sceneBoundingRect().bottomRight();
- }
- }
- }
- return fixedPoint;
-}
-
-
-QSizeF UBGraphicsDelegateFrame::getResizeVector(qreal moveX, qreal moveY)
-{
- qreal dPosX = 0;
- qreal dPosY = 0;
-
- if (resizingTop())
- {
- if (mMirrorX && mMirrorY)
- dPosY = moveY;
- else
- dPosY = -moveY;
- }
- else if (resizingLeft())
- {
- if (mMirrorX && mMirrorY)
- dPosX = moveX;
- else
- dPosX = -moveX;
- }
-
- else if (resizingRight())
- dPosX = (mMirrorX) ? -moveX : moveX;
- else if (resizingBottom())
- dPosY = mMirrorY ? -moveY : moveY;
-
- return QSizeF(dPosX, dPosY);
-}
-
-QSizeF UBGraphicsDelegateFrame::resizeDelegate(qreal moveX, qreal moveY)
-{
- QSizeF incVector;
- mFixedPoint = getFixedPointFromPos();
-
- UBResizableGraphicsItem* resizableItem = dynamic_cast<UBResizableGraphicsItem*>(delegated());
- if (resizableItem)
- {
- incVector = getResizeVector(moveX, moveY);
- resizableItem->resize(mOriginalSize + incVector);
-
- if (resizingTop() || resizingLeft() || ((mMirrorX || mMirrorY) && resizingBottomRight()))
- {
- QPointF pos1 = getFixedPointFromPos();
- delegated()->setPos(delegated()->pos()-pos1+mFixedPoint);
- }
- }
-
- return incVector;
-}
-
-void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- if (None == mCurrentTool)
- return;
-
- QLineF move = QLineF(mStartingPoint, event->scenePos());
- qreal moveX = move.length() * cos((move.angle() - mAngle) * PI / 180);
- qreal moveY = -move.length() * sin((move.angle() - mAngle) * PI / 180);
- qreal width = delegated()->boundingRect().width() * mTotalScaleX;
- qreal height = delegated()->boundingRect().height() * mTotalScaleY;
-
- if (mOperationMode == Scaling)
- {
- if(!rotating())
- {
- mTranslateX = moveX;
- // Perform the resize
- if (resizingBottomRight())
- {
- // -----------------------------------------------------
- // ! We want to keep the aspect ratio with this resize !
- // -----------------------------------------------------
- qreal scaleX;
- qreal scaleY;
-
- if(!mMirrorX){
- scaleX = (width + moveX) / width;
- }else{
- scaleX = (width - moveX) / width;
- }
-
- if(!mMirrorY){
- scaleY = (height + moveY) / height;
- }else{
- scaleY = (height - moveY) / height;
- }
-
- qreal scaleFactor = (scaleX + scaleY) / 2;
-
- // Do not allow resizing of image size under frame size
- if (canResizeBottomRight(width, height, scaleFactor))
- {
- if (mRespectRatio)
- {
- mScaleX = scaleFactor;
- mScaleY = scaleFactor;
- }
- else
- {
- mScaleX = scaleX;
- mScaleY = scaleY;
- }
- }
- }else if (resizingLeft() || resizingRight())
- {
- if(width != 0){
- qreal scaleX = 0.0;
- if(resizingLeft()){
- scaleX = (width - moveX) / width;
- }else if(resizingRight()){
- scaleX = (width + moveX) / width;
- }
- if(mDelegate->isFlippable() && qAbs(scaleX) != 0){
- if((qAbs(width * scaleX)) < 2*mFrameWidth){
- bool negative = (scaleX < 0)?true:false;
- if(negative){
- if(mMirrorX)
- scaleX = 2*mFrameWidth/width;
- else
- scaleX = -2*mFrameWidth/width;
- }else{
- scaleX = -1;
- mFlippedX = !mFlippedX;
- }
- }
- mScaleX = scaleX;
- }else if (scaleX > 1 || (width * scaleX) > 2 * mFrameWidth){
- mScaleX = scaleX;
- if(resizingLeft()){
- mTranslateX = moveX;
- }
- }
- }
- }else if(resizingTop() || resizingBottom()){
- if(height != 0){
- qreal scaleY = 0.0;
- if(resizingTop()){
- scaleY = (height - moveY) / height;
- }else if(resizingBottom()){
- scaleY = (height + moveY) / height;
- }
-
- if(mDelegate->isFlippable() && qAbs(scaleY) != 0){
- if((qAbs(height * scaleY)) < 2*mFrameWidth){
- bool negative = (scaleY < 0)?true:false;
- if(negative){
- if(mMirrorY)
- scaleY = 2*mFrameWidth/width;
- else
- scaleY = -2*mFrameWidth/width;
- }else{
- scaleY = -1;
- mFlippedY = !mFlippedY;
- }
- }
- mScaleY = scaleY;
- }else if (scaleY > 1 || (height * scaleY) > 2 * mFrameWidth)
- {
- mScaleY = scaleY;
- if(resizingTop()){
- mTranslateY = moveY;
- }
- }
- }
- }
- }
- }
-
- if (rotating())
- {
- mTranslateX = 0;
- mTranslateY = 0;
-
- QLineF startLine(sceneBoundingRect().center(), event->lastScenePos());
- QLineF currentLine(sceneBoundingRect().center(), event->scenePos());
- mAngle += startLine.angleTo(currentLine);
-
- if ((int)mAngle % 45 >= 45 - mAngleTolerance || (int)mAngle % 45 <= mAngleTolerance)
- {
- mAngle = qRound(mAngle / 45) * 45;
- mAngleOffset += startLine.angleTo(currentLine);
- if ((int)mAngleOffset % 360 > mAngleTolerance && (int)mAngleOffset % 360 < 360 - mAngleTolerance)
- {
- mAngle += mAngleOffset;
- mAngleOffset = 0;
- }
- }
- else if ((int)mAngle % 30 >= 30 - mAngleTolerance || (int)mAngle % 30 <= mAngleTolerance)
- {
- mAngle = qRound(mAngle / 30) * 30;
- mAngleOffset += startLine.angleTo(currentLine);
- if ((int)mAngleOffset % 360 > mAngleTolerance && (int)mAngleOffset % 360 < 360 - mAngleTolerance)
- {
- mAngle += mAngleOffset;
- mAngleOffset = 0;
- }
- }
-
- setCursorFromAngle(QString::number((int)mAngle % 360));
- }
- else if (moving())
- {
- mTranslateX = move.dx();
- mTranslateY = move.dy();
- moveLinkedItems(move);
- }
-
- if (mOperationMode == Scaling || moving() || rotating())
- {
- QTransform tr = buildTransform();
-
- if (resizingRight() || resizingBottom() || resizingBottomRight())
- {
- QPointF ref;
-
- // we just detects coordinates of corner before and after scaling and then moves object at diff between them.
- if (resizingBottomRight() && (mMirrorX || mMirrorY))
- {
- if (mFlippedX && !mMirrorX && mFlippedY)// && !mMirrorY)
- {
- mTranslateX += mInitialTransform.map(delegated()->boundingRect().bottomLeft()).x() - tr.map(delegated()->boundingRect().bottomLeft()).x();
- mTranslateY += mInitialTransform.map(delegated()->boundingRect().bottomLeft()).y() - tr.map(delegated()->boundingRect().bottomLeft()).y();
- }
- else if ((mFlippedX || mMirrorX) && (mFlippedY || mMirrorY))
- {
- mTranslateX += mInitialTransform.map(delegated()->boundingRect().bottomRight()).x() - tr.map(delegated()->boundingRect().bottomRight()).x();
- mTranslateY += mInitialTransform.map(delegated()->boundingRect().bottomRight()).y() - tr.map(delegated()->boundingRect().bottomRight()).y();
- }
- else if (mFlippedX || mMirrorX)
- {
- mTranslateX += mInitialTransform.map(delegated()->boundingRect().topRight()).x() - tr.map(delegated()->boundingRect().topRight()).x();
- mTranslateY += mInitialTransform.map(delegated()->boundingRect().topRight()).y() - tr.map(delegated()->boundingRect().topRight()).y();
- }
- else if (mFlippedY || mMirrorY)
- {
- mTranslateX += mInitialTransform.map(delegated()->boundingRect().bottomLeft()).x() - tr.map(delegated()->boundingRect().bottomLeft()).x();
- mTranslateY += mInitialTransform.map(delegated()->boundingRect().bottomLeft()).y() - tr.map(delegated()->boundingRect().bottomLeft()).y();
- }
- else
- {
- mTranslateX += mInitialTransform.map(delegated()->boundingRect().bottomRight()).x() - tr.map(delegated()->boundingRect().bottomRight()).x();
- mTranslateY += mInitialTransform.map(delegated()->boundingRect().bottomRight()).y() - tr.map(delegated()->boundingRect().bottomRight()).y();
- }
- }
- else
- {
- mTranslateX += mInitialTransform.map(delegated()->boundingRect().topLeft()).x() - tr.map(delegated()->boundingRect().topLeft()).x();
- mTranslateY += mInitialTransform.map(delegated()->boundingRect().topLeft()).y() - tr.map(delegated()->boundingRect().topLeft()).y();
- }
- }
- else if (resizingTop() || resizingLeft())
- {
- QPointF bottomRight = tr.map(delegated()->boundingRect().bottomRight());
- QPointF fixedPoint = mInitialTransform.map(delegated()->boundingRect().bottomRight());
- mTranslateX += fixedPoint.x() - bottomRight.x();
- mTranslateY += fixedPoint.y() - bottomRight.y();
- }
- delegated()->setTransform(buildTransform());
- }
- else // resizing/resizing horizontally
- {
-
- if (resizingBottomRight())
- {
- static QSizeF incV = QSizeF();
- static QSizeF incH = QSizeF();
-
- if (mMirrorX && mMirrorY)
- mCurrentTool = ResizeTop;
- else
- mCurrentTool = ResizeBottom;
-
- incV = resizeDelegate(moveX, moveY);
- mOriginalSize += incV;
-
- if (mMirrorX && mMirrorY)
- mCurrentTool = ResizeLeft;
- else
- mCurrentTool = ResizeRight;
-
- move = QLineF(event->lastScenePos(), event->scenePos());
- moveX = move.length() * cos((move.angle() - mAngle) * PI / 180);
- moveY = -move.length() * sin((move.angle() - mAngle) * PI / 180);
-
- mFixedPoint = getFixedPointFromPos();
-
- incH = resizeDelegate(moveX, moveY);
-
- mOriginalSize -= incV;
- mOriginalSize += incH;
-
- mCurrentTool = ResizeBottomRight;
- }
- else
- resizeDelegate(moveX, moveY);
- }
- event->accept();
-}
-
-QList<UBGraphicsDelegateFrame *> UBGraphicsDelegateFrame::getLinkedFrames()
-{
- QList<UBGraphicsDelegateFrame*> linkedFrames;
- QList<QGraphicsItem*> sItems = mDelegate->delegated()->scene()->selectedItems();
- if (sItems.count())
- {
- sItems.removeAll(delegated());
-
- foreach(QGraphicsItem *item, sItems)
- {
- UBGraphicsItem *gitem = dynamic_cast<UBGraphicsItem*>(item);
- if (gitem)
- linkedFrames << gitem->Delegate()->frame();
- }
- }
- return linkedFrames;
-}
-
-void UBGraphicsDelegateFrame::prepareFramesToMove(QList<UBGraphicsDelegateFrame *> framesToMove)
-{
- mLinkedFrames = framesToMove;
- foreach (UBGraphicsDelegateFrame *frame, mLinkedFrames)
- {
- frame->prepareLinkedFrameToMove();
- }
-}
-
-void UBGraphicsDelegateFrame::prepareLinkedFrameToMove()
-{
- mDelegate->startUndoStep();
-
- mStartingPoint = QPointF(0,0);
-
- initializeTransform();
-
- mScaleX = 1;
- mScaleY = 1;
- mTranslateX = 0;
- mTranslateY = 0;
- mAngleOffset = 0;
-
- mInitialTransform = buildTransform();
-
- mCurrentTool = Move;
-}
-
-void UBGraphicsDelegateFrame::moveLinkedItems(QLineF movingVector, bool bLinked)
-{
- if (bLinked)
- {
- mCurrentTool = Move;
-
- mTranslateX = movingVector.dx();
- mTranslateY = movingVector.dy();
-
- delegated()->setTransform(buildTransform(), false);
- }
- else
- {
- foreach(UBGraphicsDelegateFrame* frame, mLinkedFrames)
- {
- frame->moveLinkedItems(movingVector, true);
- }
- }
-}
-
-QTransform UBGraphicsDelegateFrame::buildTransform()
-{
- QTransform tr;
- QPointF center = delegated()->boundingRect().center();
-
- // Translate
- tr.translate(mTotalTranslateX + mTranslateX, mTotalTranslateY + mTranslateY);
-
- // Set angle
- tr.translate(center.x() * mTotalScaleX * mScaleX, center.y() * mTotalScaleY * mScaleY);
- tr.rotate(-mAngle);
- tr.translate(-center.x() * mTotalScaleX * mScaleX, -center.y() * mTotalScaleY * mScaleY);
-
- // Scale
- tr.scale(mTotalScaleX * mScaleX, mTotalScaleY * mScaleY);
- return tr;
-}
-
-
-void UBGraphicsDelegateFrame::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- updateResizeCursors();
-
- mDelegate->commitUndoStep();
- mTotalScaleX *= mScaleX;
- mTotalScaleY *= mScaleY;
- mTotalTranslateX += mTranslateX;
- mTotalTranslateY += mTranslateY;
- event->accept();
-
- mCurrentTool = None;
-
- QGraphicsRectItem::mouseReleaseEvent(event);
-
- // Show the buttons
- if(isResizing()){
- mResizing = false;
- }
-}
-
-
-void UBGraphicsDelegateFrame::updateResizeCursors()
-{
- QPixmap pix(":/images/cursors/resize.png");
- QTransform tr;
-
- tr.rotate(-mAngle);
- QCursor resizeCursor = QCursor(pix.transformed(tr, Qt::SmoothTransformation), pix.width() / 2, pix.height() / 2);
- mLeftResizeGrip->setCursor(resizeCursor);
- mRightResizeGrip->setCursor(resizeCursor);
-
- tr.rotate(-90);
- resizeCursor = QCursor(pix.transformed(tr, Qt::SmoothTransformation), pix.width() / 2, pix.height() / 2);
- mBottomResizeGrip->setCursor(resizeCursor);
- mTopResizeGrip->setCursor(resizeCursor);
-
- tr.rotate(-45);
- resizeCursor = QCursor(pix.transformed(tr, Qt::SmoothTransformation), pix.width() / 2, pix.height() / 2);
- mBottomRightResizeGrip->setCursor(resizeCursor);
-}
-
-
-void UBGraphicsDelegateFrame::setVisible(bool visible)
-{
- mVisible = visible;
- if (mVisible)
- setBrush(QBrush(UBSettings::paletteColor));
- else
- setBrush(Qt::NoBrush);
-}
-
-
-void UBGraphicsDelegateFrame::positionHandles()
-{
- QRectF itemRect = delegated()->boundingRect();
-
- if (mDelegate->getToolBarItem() && mDelegate->getToolBarItem()->isVisibleOnBoard()
- && mDelegate->getToolBarItem()->isShifting())
- {
- QPointF graphicsItemPosition = itemRect.topLeft();
- itemRect.setTopLeft(graphicsItemPosition-QPointF(0,mDelegate->getToolBarItem()->boundingRect().height()* mDelegate->antiScaleRatio()));
- }
-
- QTransform itemTransform = delegated()->sceneTransform();
- QPointF topLeft = itemTransform.map(itemRect.topLeft());
- QPointF topRight = itemTransform.map(itemRect.topRight());
- QPointF bottomLeft = itemTransform.map(itemRect.bottomLeft());
- QPointF bottomRight = itemTransform.map(itemRect.bottomRight());
- QPointF center = itemTransform.map(itemRect.center());
- int rotateHeight = QLineF(topLeft, bottomLeft).length();
-
- // Handle the mirroring
- if(topLeft.x() > topRight.x()){
- QPointF topTmp = topRight;
- QPointF bottomTmp = bottomRight;
- topRight = topLeft;
- topLeft = topTmp;
- bottomRight = bottomLeft;
- bottomLeft = bottomTmp;
- }
-
- if(bottomLeft.y() > topLeft.y()){
- QPointF leftTmp = bottomLeft;
- QPointF rightTmp = bottomRight;
- bottomLeft = topLeft;
- topLeft = leftTmp;
- bottomRight = topRight;
- topRight = rightTmp;
- }
-
- QLineF topLine(topLeft, topRight);
- qreal angle = topLine.angle();
- qreal width = topLine.length();
-
- QLineF leftLine(topLeft, bottomLeft);
- qreal height = leftLine.length();
-
- int h = rotating()?rotateHeight:height;
-
- if (mVisible)
- {
- setRect(center.x() - mFrameWidth - width / 2, center.y() - mFrameWidth - h / 2, width + 2 * mFrameWidth, h + 2 * mFrameWidth);
- }
- else
- {
- setRect(center.x() - width / 2, center.y() - h / 2, width, h);
- }
-
- resetTransform();
- translate(center.x(), center.y());
- rotate(-angle);
- translate(-center.x(), -center.y());
-
- mBottomRightResizeGripSvgItem->setParentItem(this);
- mBottomResizeGripSvgItem->setParentItem(this);
- mLeftResizeGripSvgItem->setParentItem(this);
- mRightResizeGripSvgItem->setParentItem(this);
- mTopResizeGripSvgItem->setParentItem(this);
- mRotateButton->setParentItem(this);
-
- mBottomRightResizeGrip->setParentItem(this);
- mBottomResizeGrip->setParentItem(this);
- mLeftResizeGrip->setParentItem(this);
- mRightResizeGrip->setParentItem(this);
- mTopResizeGrip->setParentItem(this);
-
- QRectF brRect = mBottomRightResizeGripSvgItem->mapRectToParent(mBottomRightResizeGripSvgItem->boundingRect());
- QRectF bRect = mBottomResizeGripSvgItem->mapRectToParent(mBottomResizeGripSvgItem->boundingRect());
- QRectF lRect = mLeftResizeGripSvgItem->mapRectToParent(mLeftResizeGripSvgItem->boundingRect());
- QRectF rRect = mRightResizeGripSvgItem->mapRectToParent(mRightResizeGripSvgItem->boundingRect());
- QRectF trRect = mTopResizeGripSvgItem->mapRectToParent(mTopResizeGripSvgItem->boundingRect());
-
- mBottomRightResizeGripSvgItem->setPos(rect().right() - brRect.width(), rect().bottom() - brRect.height());
- mBottomResizeGripSvgItem->setPos(rect().center().x() - bRect.width() / 2, rect().bottom() - bRect.height());
-
- mLeftResizeGripSvgItem->setPos(rect().left(), rect().center().y() - lRect.height() / 2);
- mRightResizeGripSvgItem->setPos(rect().right() - rRect.width(), rect().center().y() - rRect.height() / 2);
-
- mTopResizeGripSvgItem->setPos(rect().center().x() - trRect.width() / 2, rect().y());
- mRotateButton->setPos(rect().right() - mFrameWidth - 5, rect().top() + 5);
-
- mBottomRightResizeGrip->setRect(bottomRightResizeGripRect());
- mBottomResizeGrip->setRect(bottomResizeGripRect());
- mLeftResizeGrip->setRect(leftResizeGripRect());
- mRightResizeGrip->setRect(rightResizeGripRect());
- mTopResizeGrip->setRect(topResizeGripRect());
-
- QVariant vLocked = delegated()->data(UBGraphicsItemData::ItemLocked);
- bool isLocked = (vLocked.isValid() && vLocked.toBool());
- bool bShowHorizontalResizers = ResizingHorizontally == mOperationMode;
- bool bShowVerticalResizers = ResizingHorizontally != mOperationMode;
- bool bShowAllResizers = Resizing == mOperationMode || Scaling == mOperationMode ;
-
- mBottomRightResizeGripSvgItem->setVisible(!isLocked && bShowAllResizers);
- mBottomResizeGripSvgItem->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers));
- mLeftResizeGripSvgItem->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers));
- mRightResizeGripSvgItem->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers));
- mTopResizeGripSvgItem->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers));
- mRotateButton->setVisible(mDelegate->canRotate() && !isLocked);
-
- mBottomRightResizeGrip->setVisible(!isLocked && bShowAllResizers);
- mBottomResizeGrip->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers));
- mLeftResizeGrip->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers));
- mRightResizeGrip->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers));
- mTopResizeGrip->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers));
-
- if (isLocked)
- {
- QColor baseColor = UBSettings::paletteColor;
- baseColor.setAlphaF(baseColor.alphaF() / 3);
- setBrush(QBrush(baseColor));
- }
- else
- {
- setBrush(QBrush(UBSettings::paletteColor));
- }
-
- //make frame interact like delegated item when selected. Maybe should be deleted if selection logic will change
- setZValue(delegated()->zValue());
-}
-
-
-QGraphicsItem* UBGraphicsDelegateFrame::delegated()
-{
- return mDelegate->delegated();
-}
-
-UBGraphicsDelegateFrame::FrameTool UBGraphicsDelegateFrame::toolFromPos(QPointF pos)
-{
- if(mDelegate->isLocked())
- return None;
- else if (bottomRightResizeGripRect().contains(pos) && ResizingHorizontally != mOperationMode)
- return ResizeBottomRight;
- else if (bottomResizeGripRect().contains(pos) && ResizingHorizontally != mOperationMode){
- if(mMirrorY){
- return ResizeTop;
- }else{
- return ResizeBottom;
- }
- }
- else if (leftResizeGripRect().contains(pos)){
- if(mMirrorX){
- return ResizeRight;
- }else{
- return ResizeLeft;
- }
- return ResizeLeft;
- }
- else if (rightResizeGripRect().contains(pos)){
- if(mMirrorX){
- return ResizeLeft;
- }else{
- return ResizeRight;
- }
- }
- else if (topResizeGripRect().contains(pos) && ResizingHorizontally != mOperationMode){
- if(mMirrorY){
- return ResizeBottom;
- }else{
- return ResizeTop;
- }
- }
- else if (rotateButtonBounds().contains(pos) && mDelegate && mDelegate->canRotate())
- return Rotate;
- else
- return Move;
-}
-
-
-QRectF UBGraphicsDelegateFrame::bottomRightResizeGripRect() const
-{
- return QRectF(rect().right() - mFrameWidth, rect().bottom() - mFrameWidth, mFrameWidth, mFrameWidth);
-}
-
-
-QRectF UBGraphicsDelegateFrame::bottomResizeGripRect() const
-{
- return QRectF(rect().center().x() - mFrameWidth / 2, rect().bottom() - mFrameWidth, mFrameWidth, mFrameWidth);
-}
-
-
-QRectF UBGraphicsDelegateFrame::leftResizeGripRect() const
-{
- return QRectF(rect().left(), rect().center().y() - mFrameWidth / 2, mFrameWidth, mFrameWidth);
-}
-
-
-QRectF UBGraphicsDelegateFrame::rightResizeGripRect() const
-{
- return QRectF(rect().right() - mFrameWidth, rect().center().y() - mFrameWidth / 2, mFrameWidth, mFrameWidth);
-}
-
-
-QRectF UBGraphicsDelegateFrame::topResizeGripRect() const
-{
- return QRectF(rect().center().x() - mFrameWidth / 2, rect().top(), mFrameWidth, mFrameWidth);
-}
-
-
-QRectF UBGraphicsDelegateFrame::rotateButtonBounds() const
-{
- return QRectF(rect().right()- mFrameWidth, rect().top(), mFrameWidth, mFrameWidth);
-}
-
-void UBGraphicsDelegateFrame::refreshGeometry()
-{
- // Here we want to have the left on the left, the right on the right, the top on the top and the bottom on the bottom!
- QRectF itemRect = delegated()->boundingRect();
- QTransform itemTransform = delegated()->sceneTransform();
- QPointF topLeft = itemTransform.map(itemRect.topLeft());
- QPointF topRight = itemTransform.map(itemRect.topRight());
- QPointF bottomLeft = itemTransform.map(itemRect.bottomLeft());
-
- QLineF topLine(topLeft, topRight);
- qreal width = topLine.length();
- QLineF leftLine(topLeft, bottomLeft);
- qreal height = leftLine.length();
- setRect(topRight.x() - mFrameWidth, topLeft.y() - mFrameWidth, width + 2*mFrameWidth, height + 2*mFrameWidth);
-}
+
+
+
+#include "UBGraphicsDelegateFrame.h"
+
+#include <QtGui>
+#include <QtSvg>
+
+#include "core/UBApplication.h"
+#include "core/UBSettings.h"
+
+#include "board/UBBoardController.h"
+#include "board/UBBoardView.h"
+
+#include "domain/UBGraphicsItemDelegate.h"
+#include "domain/UBGraphicsScene.h"
+#include "domain/UBGraphicsProxyWidget.h"
+
+#include "gui/UBResources.h"
+
+#include "core/memcheck.h"
+
+UBGraphicsDelegateFrame::UBGraphicsDelegateFrame(UBGraphicsItemDelegate* pDelegate, QRectF pRect, qreal pFrameWidth, bool respectRatio)
+ : QGraphicsRectItem(), QObject(pDelegate)
+ , mCurrentTool(None)
+ , mDelegate(pDelegate)
+ , mVisible(true)
+ , mFrameWidth(pFrameWidth)
+ , mNominalFrameWidth(pFrameWidth)
+ , mRespectRatio(respectRatio)
+ , mAngle(0)
+ , mAngleOffset(0)
+ , mTotalScaleX(-1)
+ , mTotalScaleY(-1)
+ , mTranslateX(0)
+ , mTranslateY(0)
+ , mTotalTranslateX(0)
+ , mTotalTranslateY(0)
+ , mOperationMode(Scaling)
+ , mFlippedX(false)
+ , mFlippedY(false)
+ , mMirrorX(false)
+ , mMirrorY(false)
+{
+ mAngleTolerance = UBSettings::settings()->angleTolerance->get().toReal();
+
+ setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
+
+ setAcceptedMouseButtons(Qt::LeftButton);
+ setRect(pRect.adjusted(mFrameWidth, mFrameWidth, mFrameWidth * -1, mFrameWidth * -1));
+
+ setBrush(QBrush(UBSettings::paletteColor));
+ setPen(Qt::NoPen);
+ setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control));
+
+ mBottomRightResizeGripSvgItem = new QGraphicsSvgItem(":/images/resize.svg", this);
+ mBottomResizeGripSvgItem = new QGraphicsSvgItem(":/images/resizeBottom.svg", this);
+ mLeftResizeGripSvgItem = new QGraphicsSvgItem(":/images/resizeLeft.svg", this);
+ mRightResizeGripSvgItem = new QGraphicsSvgItem(":/images/resizeRight.svg", this);
+ mTopResizeGripSvgItem = new QGraphicsSvgItem(":/images/resizeTop.svg", this);
+
+ mBottomRightResizeGrip = new QGraphicsRectItem(this);
+ mBottomRightResizeGrip->setPen(Qt::NoPen);
+ mBottomResizeGrip = new QGraphicsRectItem(this);
+ mBottomResizeGrip->setPen(Qt::NoPen);
+ mLeftResizeGrip = new QGraphicsRectItem(this);
+ mLeftResizeGrip->setPen(Qt::NoPen);
+ mRightResizeGrip = new QGraphicsRectItem(this);
+ mRightResizeGrip->setPen(Qt::NoPen);
+ mTopResizeGrip = new QGraphicsRectItem(this);
+ mTopResizeGrip->setPen(Qt::NoPen);
+
+ mRotateButton = new QGraphicsSvgItem(":/images/rotate.svg", this);
+ mRotateButton->setCursor(UBResources::resources()->rotateCursor);
+ mRotateButton->setVisible(mDelegate->canRotate());
+
+ updateResizeCursors();
+
+ setAntiScale(1.0);
+
+ positionHandles();
+
+ this->setAcceptHoverEvents(true);
+}
+
+
+UBGraphicsDelegateFrame::~UBGraphicsDelegateFrame()
+{
+ // NOOP
+}
+
+void UBGraphicsDelegateFrame::setAntiScale(qreal pAntiScale)
+{
+ mFrameWidth = mNominalFrameWidth * pAntiScale;
+
+ QTransform tr;
+ tr.scale(pAntiScale, pAntiScale);
+
+ mBottomRightResizeGripSvgItem->setTransform(tr);
+ mBottomResizeGripSvgItem->setTransform(tr);
+ mLeftResizeGripSvgItem->setTransform(tr);
+ mRightResizeGripSvgItem->setTransform(tr);
+ mTopResizeGripSvgItem->setTransform(tr);
+ mRotateButton->setTransform(tr);
+}
+
+
+void UBGraphicsDelegateFrame::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+
+ QPainterPath path;
+ path.addRoundedRect(rect(), mFrameWidth / 2, mFrameWidth / 2);
+
+ if (rect().width() > 1 && rect().height() > 1)
+ {
+ QPainterPath extruded;
+ extruded.addRect(rect().adjusted(mFrameWidth, mFrameWidth, (mFrameWidth * -1), (mFrameWidth * -1)));
+ path = path.subtracted(extruded);
+ }
+
+ painter->fillPath(path, brush());
+}
+
+
+QPainterPath UBGraphicsDelegateFrame::shape() const
+{
+ QPainterPath path;
+
+ //We do not use the rounded rect here because we want the bottom right corner
+ //to be included in the frame (for resize grip handling : #702)
+ path.addRect(rect());
+
+ if (rect().width() > 0 && rect().height() > 0)
+ {
+ QPainterPath extruded;
+ extruded.addRect(rect().adjusted(mFrameWidth, mFrameWidth, mFrameWidth * -1, mFrameWidth * -1));
+ path = path.subtracted(extruded);
+ }
+
+ return path;
+}
+
+
+void UBGraphicsDelegateFrame::initializeTransform()
+{
+ QTransform itemTransform = delegated()->sceneTransform();
+ QRectF itemRect = delegated()->boundingRect();
+ QPointF topLeft = itemTransform.map(itemRect.topLeft());
+ QPointF topRight = itemTransform.map(itemRect.topRight());
+ QPointF bottomLeft = itemTransform.map(itemRect.bottomLeft());
+
+ qreal horizontalFlip = (topLeft.x() > topRight.x()) ? -1 : 1;
+ mMirrorX = horizontalFlip < 0 ;
+ if(horizontalFlip < 0){
+ // why this is because of the way of calculating the translations that checks which side is the most is the
+ // nearest instead of checking which one is the left side.
+ QPointF tmp = topLeft;
+ topLeft = topRight;
+ topRight = tmp;
+
+ // because of the calculation of the height is done by lenght and not deltaY
+ bottomLeft = itemTransform.map(itemRect.bottomRight());
+ }
+
+ qreal verticalFlip = (bottomLeft.y() < topLeft.y()) ? -1 : 1;
+ // not sure that is usefull
+ mMirrorY = verticalFlip < 0;
+ if(verticalFlip < 0 && !mMirrorX){
+ topLeft = itemTransform.map(itemRect.bottomLeft());
+ topRight = itemTransform.map(itemRect.bottomRight());
+ bottomLeft = itemTransform.map(itemRect.topLeft());
+ }
+
+ QLineF topLine(topLeft, topRight);
+ QLineF leftLine(topLeft, bottomLeft);
+ qreal width = topLine.length();
+ qreal height = leftLine.length();
+
+ mAngle = topLine.angle();
+
+ // the fact the the length is used we loose the horizontalFlip information
+ // a better way to do this is using DeltaX that preserve the direction information.
+ mTotalScaleX = (width / itemRect.width()) * horizontalFlip;
+ mTotalScaleY = height / itemRect.height() * verticalFlip;
+
+ QTransform tr;
+ QPointF center = delegated()->boundingRect().center();
+ tr.translate(center.x() * mTotalScaleX, center.y() * mTotalScaleY);
+ tr.rotate(-mAngle);
+ tr.translate(-center.x() * mTotalScaleX, -center.y() * mTotalScaleY);
+ tr.scale(mTotalScaleX, mTotalScaleY);
+
+ mTotalTranslateX = delegated()->transform().dx() - tr.dx();
+ mTotalTranslateY = delegated()->transform().dy() - tr.dy();
+}
+
+
+void UBGraphicsDelegateFrame::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ mDelegate->startUndoStep();
+
+ mStartingPoint = event->scenePos();
+
+ initializeTransform();
+
+ mScaleX = 1;
+ mScaleY = 1;
+ mTranslateX = 0;
+ mTranslateY = 0;
+ mAngleOffset = 0;
+
+ mInitialTransform = buildTransform();
+ mOriginalSize = delegated()->boundingRect().size();
+
+ mCurrentTool = toolFromPos(event->pos());
+ setCursorFromAngle(QString::number((int)mAngle % 360));
+ event->accept();
+
+ if (moving())
+ prepareFramesToMove(getLinkedFrames());
+
+}
+
+void UBGraphicsDelegateFrame::setCursorFromAngle(QString angle)
+{
+ if (mCurrentTool == Rotate)
+ {
+ QWidget *controlViewport = UBApplication::boardController->controlView()->viewport();
+
+ QSize cursorSize(45,30);
+
+
+ QImage mask_img(cursorSize, QImage::Format_Mono);
+ mask_img.fill(0xff);
+ QPainter mask_ptr(&mask_img);
+ mask_ptr.setBrush( QBrush( QColor(0, 0, 0) ) );
+ mask_ptr.drawRoundedRect(0,0, cursorSize.width()-1, cursorSize.height()-1, 6, 6);
+ QBitmap bmpMask = QBitmap::fromImage(mask_img);
+
+
+ QPixmap pixCursor(cursorSize);
+ pixCursor.fill(QColor(Qt::white));
+
+ QPainter painter(&pixCursor);
+
+ painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
+ painter.setBrush(QBrush(Qt::white));
+ painter.setPen(QPen(QColor(Qt::black)));
+ painter.drawRoundedRect(1,1,cursorSize.width()-2,cursorSize.height()-2,6,6);
+ painter.setFont(QFont("Arial", 10));
+ painter.drawText(1,1,cursorSize.width(),cursorSize.height(), Qt::AlignCenter, angle.append(QChar(176)));
+ painter.end();
+
+ pixCursor.setMask(bmpMask);
+ controlViewport->setCursor(pixCursor);
+ }
+}
+
+
+bool UBGraphicsDelegateFrame::canResizeBottomRight(qreal width, qreal height, qreal scaleFactor)
+{
+ bool res = false;
+
+ if(!mMirrorX && !mMirrorX && ((width * scaleFactor) > 2*mFrameWidth && (height * scaleFactor) > 2*mFrameWidth)){
+ res = true;
+ }else if(mMirrorX && !mMirrorY && (-width * scaleFactor) > 2*mFrameWidth && (height*scaleFactor) > 2*mFrameWidth){
+ res = true;
+ }else if(!mMirrorX && mMirrorY && (width * scaleFactor) > 2*mFrameWidth && (-height*scaleFactor) > 2*mFrameWidth){
+ res = true;
+ }else if(mMirrorX && mMirrorY && (-width * scaleFactor) > 2*mFrameWidth && (-height*scaleFactor) > 2*mFrameWidth){
+ res = true;
+ }
+
+ return res;
+}
+
+QPointF UBGraphicsDelegateFrame::getFixedPointFromPos()
+{
+ QPointF fixedPoint;
+ if (!moving() && !rotating())
+ {
+ if (resizingTop())
+ {
+ if (mMirrorX && mMirrorY)
+ {
+ if ((0 < mAngle) && (mAngle < 90))
+ fixedPoint = delegated()->sceneBoundingRect().topLeft();
+ else
+ fixedPoint = delegated()->sceneBoundingRect().topRight();
+ }
+ else
+ {
+ if ((0 < mAngle) && (mAngle <= 90))
+ fixedPoint = delegated()->sceneBoundingRect().bottomRight();
+ else
+ fixedPoint = delegated()->sceneBoundingRect().bottomLeft();
+ }
+ }
+ else if (resizingLeft())
+ {
+ if (mMirrorX && mMirrorY)
+ {
+ if ((0 < mAngle) && (mAngle < 90))
+ fixedPoint = delegated()->sceneBoundingRect().bottomLeft();
+ else
+ fixedPoint = delegated()->sceneBoundingRect().topLeft();
+ }
+ else
+ {
+ if ((0 < mAngle) && (mAngle <= 90))
+ fixedPoint = delegated()->sceneBoundingRect().topRight();
+ else
+ fixedPoint = delegated()->sceneBoundingRect().bottomRight();
+ }
+ }
+ }
+ return fixedPoint;
+}
+
+
+QSizeF UBGraphicsDelegateFrame::getResizeVector(qreal moveX, qreal moveY)
+{
+ qreal dPosX = 0;
+ qreal dPosY = 0;
+
+ if (resizingTop())
+ {
+ if (mMirrorX && mMirrorY)
+ dPosY = moveY;
+ else
+ dPosY = -moveY;
+ }
+ else if (resizingLeft())
+ {
+ if (mMirrorX && mMirrorY)
+ dPosX = moveX;
+ else
+ dPosX = -moveX;
+ }
+
+ else if (resizingRight())
+ dPosX = (mMirrorX) ? -moveX : moveX;
+ else if (resizingBottom())
+ dPosY = mMirrorY ? -moveY : moveY;
+
+ return QSizeF(dPosX, dPosY);
+}
+
+QSizeF UBGraphicsDelegateFrame::resizeDelegate(qreal moveX, qreal moveY)
+{
+ QSizeF incVector;
+ mFixedPoint = getFixedPointFromPos();
+
+ UBResizableGraphicsItem* resizableItem = dynamic_cast<UBResizableGraphicsItem*>(delegated());
+ if (resizableItem)
+ {
+ incVector = getResizeVector(moveX, moveY);
+ resizableItem->resize(mOriginalSize + incVector);
+
+ if (resizingTop() || resizingLeft() || ((mMirrorX || mMirrorY) && resizingBottomRight()))
+ {
+ QPointF pos1 = getFixedPointFromPos();
+ delegated()->setPos(delegated()->pos()-pos1+mFixedPoint);
+ }
+ }
+
+ return incVector;
+}
+
+void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ if (None == mCurrentTool)
+ return;
+
+ QLineF move = QLineF(mStartingPoint, event->scenePos());
+ qreal moveX = move.length() * cos((move.angle() - mAngle) * PI / 180);
+ qreal moveY = -move.length() * sin((move.angle() - mAngle) * PI / 180);
+ qreal width = delegated()->boundingRect().width() * mTotalScaleX;
+ qreal height = delegated()->boundingRect().height() * mTotalScaleY;
+
+ if (mOperationMode == Scaling)
+ {
+ if(!rotating())
+ {
+ mTranslateX = moveX;
+ // Perform the resize
+ if (resizingBottomRight())
+ {
+ // -----------------------------------------------------
+ // ! We want to keep the aspect ratio with this resize !
+ // -----------------------------------------------------
+ qreal scaleX;
+ qreal scaleY;
+
+ if(!mMirrorX){
+ scaleX = (width + moveX) / width;
+ }else{
+ scaleX = (width - moveX) / width;
+ }
+
+ if(!mMirrorY){
+ scaleY = (height + moveY) / height;
+ }else{
+ scaleY = (height - moveY) / height;
+ }
+
+ qreal scaleFactor = (scaleX + scaleY) / 2;
+
+ // Do not allow resizing of image size under frame size
+ if (canResizeBottomRight(width, height, scaleFactor))
+ {
+ if (mRespectRatio)
+ {
+ mScaleX = scaleFactor;
+ mScaleY = scaleFactor;
+ }
+ else
+ {
+ mScaleX = scaleX;
+ mScaleY = scaleY;
+ }
+ }
+ }else if (resizingLeft() || resizingRight())
+ {
+ if(width != 0){
+ qreal scaleX = 0.0;
+ if(resizingLeft()){
+ scaleX = (width - moveX) / width;
+ }else if(resizingRight()){
+ scaleX = (width + moveX) / width;
+ }
+ if(mDelegate->isFlippable() && qAbs(scaleX) != 0){
+ if((qAbs(width * scaleX)) < 2*mFrameWidth){
+ bool negative = (scaleX < 0)?true:false;
+ if(negative){
+ if(mMirrorX)
+ scaleX = 2*mFrameWidth/width;
+ else
+ scaleX = -2*mFrameWidth/width;
+ }else{
+ scaleX = -1;
+ mFlippedX = !mFlippedX;
+ }
+ }
+ mScaleX = scaleX;
+ }else if (scaleX > 1 || (width * scaleX) > 2 * mFrameWidth){
+ mScaleX = scaleX;
+ if(resizingLeft()){
+ mTranslateX = moveX;
+ }
+ }
+ }
+ }else if(resizingTop() || resizingBottom()){
+ if(height != 0){
+ qreal scaleY = 0.0;
+ if(resizingTop()){
+ scaleY = (height - moveY) / height;
+ }else if(resizingBottom()){
+ scaleY = (height + moveY) / height;
+ }
+
+ if(mDelegate->isFlippable() && qAbs(scaleY) != 0){
+ if((qAbs(height * scaleY)) < 2*mFrameWidth){
+ bool negative = (scaleY < 0)?true:false;
+ if(negative){
+ if(mMirrorY)
+ scaleY = 2*mFrameWidth/width;
+ else
+ scaleY = -2*mFrameWidth/width;
+ }else{
+ scaleY = -1;
+ mFlippedY = !mFlippedY;
+ }
+ }
+ mScaleY = scaleY;
+ }else if (scaleY > 1 || (height * scaleY) > 2 * mFrameWidth)
+ {
+ mScaleY = scaleY;
+ if(resizingTop()){
+ mTranslateY = moveY;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (rotating())
+ {
+ mTranslateX = 0;
+ mTranslateY = 0;
+
+ QLineF startLine(sceneBoundingRect().center(), event->lastScenePos());
+ QLineF currentLine(sceneBoundingRect().center(), event->scenePos());
+ mAngle += startLine.angleTo(currentLine);
+
+ if ((int)mAngle % 45 >= 45 - mAngleTolerance || (int)mAngle % 45 <= mAngleTolerance)
+ {
+ mAngle = qRound(mAngle / 45) * 45;
+ mAngleOffset += startLine.angleTo(currentLine);
+ if ((int)mAngleOffset % 360 > mAngleTolerance && (int)mAngleOffset % 360 < 360 - mAngleTolerance)
+ {
+ mAngle += mAngleOffset;
+ mAngleOffset = 0;
+ }
+ }
+ else if ((int)mAngle % 30 >= 30 - mAngleTolerance || (int)mAngle % 30 <= mAngleTolerance)
+ {
+ mAngle = qRound(mAngle / 30) * 30;
+ mAngleOffset += startLine.angleTo(currentLine);
+ if ((int)mAngleOffset % 360 > mAngleTolerance && (int)mAngleOffset % 360 < 360 - mAngleTolerance)
+ {
+ mAngle += mAngleOffset;
+ mAngleOffset = 0;
+ }
+ }
+
+ setCursorFromAngle(QString::number((int)mAngle % 360));
+ }
+ else if (moving())
+ {
+ mTranslateX = move.dx();
+ mTranslateY = move.dy();
+ moveLinkedItems(move);
+ }
+
+ if (mOperationMode == Scaling || moving() || rotating())
+ {
+ QTransform tr = buildTransform();
+
+ if (resizingRight() || resizingBottom() || resizingBottomRight())
+ {
+ QPointF ref;
+
+ // we just detects coordinates of corner before and after scaling and then moves object at diff between them.
+ if (resizingBottomRight() && (mMirrorX || mMirrorY))
+ {
+ if (mFlippedX && !mMirrorX && mFlippedY)// && !mMirrorY)
+ {
+ mTranslateX += mInitialTransform.map(delegated()->boundingRect().bottomLeft()).x() - tr.map(delegated()->boundingRect().bottomLeft()).x();
+ mTranslateY += mInitialTransform.map(delegated()->boundingRect().bottomLeft()).y() - tr.map(delegated()->boundingRect().bottomLeft()).y();
+ }
+ else if ((mFlippedX || mMirrorX) && (mFlippedY || mMirrorY))
+ {
+ mTranslateX += mInitialTransform.map(delegated()->boundingRect().bottomRight()).x() - tr.map(delegated()->boundingRect().bottomRight()).x();
+ mTranslateY += mInitialTransform.map(delegated()->boundingRect().bottomRight()).y() - tr.map(delegated()->boundingRect().bottomRight()).y();
+ }
+ else if (mFlippedX || mMirrorX)
+ {
+ mTranslateX += mInitialTransform.map(delegated()->boundingRect().topRight()).x() - tr.map(delegated()->boundingRect().topRight()).x();
+ mTranslateY += mInitialTransform.map(delegated()->boundingRect().topRight()).y() - tr.map(delegated()->boundingRect().topRight()).y();
+ }
+ else if (mFlippedY || mMirrorY)
+ {
+ mTranslateX += mInitialTransform.map(delegated()->boundingRect().bottomLeft()).x() - tr.map(delegated()->boundingRect().bottomLeft()).x();
+ mTranslateY += mInitialTransform.map(delegated()->boundingRect().bottomLeft()).y() - tr.map(delegated()->boundingRect().bottomLeft()).y();
+ }
+ else
+ {
+ mTranslateX += mInitialTransform.map(delegated()->boundingRect().bottomRight()).x() - tr.map(delegated()->boundingRect().bottomRight()).x();
+ mTranslateY += mInitialTransform.map(delegated()->boundingRect().bottomRight()).y() - tr.map(delegated()->boundingRect().bottomRight()).y();
+ }
+ }
+ else
+ {
+ mTranslateX += mInitialTransform.map(delegated()->boundingRect().topLeft()).x() - tr.map(delegated()->boundingRect().topLeft()).x();
+ mTranslateY += mInitialTransform.map(delegated()->boundingRect().topLeft()).y() - tr.map(delegated()->boundingRect().topLeft()).y();
+ }
+ }
+ else if (resizingTop() || resizingLeft())
+ {
+ QPointF bottomRight = tr.map(delegated()->boundingRect().bottomRight());
+ QPointF fixedPoint = mInitialTransform.map(delegated()->boundingRect().bottomRight());
+ mTranslateX += fixedPoint.x() - bottomRight.x();
+ mTranslateY += fixedPoint.y() - bottomRight.y();
+ }
+ delegated()->setTransform(buildTransform());
+ }
+ else // resizing/resizing horizontally
+ {
+
+ if (resizingBottomRight())
+ {
+ static QSizeF incV = QSizeF();
+ static QSizeF incH = QSizeF();
+
+ if (mMirrorX && mMirrorY)
+ mCurrentTool = ResizeTop;
+ else
+ mCurrentTool = ResizeBottom;
+
+ incV = resizeDelegate(moveX, moveY);
+ mOriginalSize += incV;
+
+ if (mMirrorX && mMirrorY)
+ mCurrentTool = ResizeLeft;
+ else
+ mCurrentTool = ResizeRight;
+
+ move = QLineF(event->lastScenePos(), event->scenePos());
+ moveX = move.length() * cos((move.angle() - mAngle) * PI / 180);
+ moveY = -move.length() * sin((move.angle() - mAngle) * PI / 180);
+
+ mFixedPoint = getFixedPointFromPos();
+
+ incH = resizeDelegate(moveX, moveY);
+
+ mOriginalSize -= incV;
+ mOriginalSize += incH;
+
+ mCurrentTool = ResizeBottomRight;
+ }
+ else
+ resizeDelegate(moveX, moveY);
+ }
+ event->accept();
+}
+
+QList<UBGraphicsDelegateFrame *> UBGraphicsDelegateFrame::getLinkedFrames()
+{
+ QList<UBGraphicsDelegateFrame*> linkedFrames;
+ QList<QGraphicsItem*> sItems = mDelegate->delegated()->scene()->selectedItems();
+ if (sItems.count())
+ {
+ sItems.removeAll(delegated());
+
+ foreach(QGraphicsItem *item, sItems)
+ {
+ UBGraphicsItem *gitem = dynamic_cast<UBGraphicsItem*>(item);
+ if (gitem)
+ linkedFrames << gitem->Delegate()->frame();
+ }
+ }
+ return linkedFrames;
+}
+
+void UBGraphicsDelegateFrame::prepareFramesToMove(QList<UBGraphicsDelegateFrame *> framesToMove)
+{
+ mLinkedFrames = framesToMove;
+ foreach (UBGraphicsDelegateFrame *frame, mLinkedFrames)
+ {
+ frame->prepareLinkedFrameToMove();
+ }
+}
+
+void UBGraphicsDelegateFrame::prepareLinkedFrameToMove()
+{
+ mDelegate->startUndoStep();
+
+ mStartingPoint = QPointF(0,0);
+
+ initializeTransform();
+
+ mScaleX = 1;
+ mScaleY = 1;
+ mTranslateX = 0;
+ mTranslateY = 0;
+ mAngleOffset = 0;
+
+ mInitialTransform = buildTransform();
+
+ mCurrentTool = Move;
+}
+
+void UBGraphicsDelegateFrame::moveLinkedItems(QLineF movingVector, bool bLinked)
+{
+ if (bLinked)
+ {
+ mCurrentTool = Move;
+
+ mTranslateX = movingVector.dx();
+ mTranslateY = movingVector.dy();
+
+ delegated()->setTransform(buildTransform(), false);
+ }
+ else
+ {
+ foreach(UBGraphicsDelegateFrame* frame, mLinkedFrames)
+ {
+ frame->moveLinkedItems(movingVector, true);
+ }
+ }
+}
+
+QTransform UBGraphicsDelegateFrame::buildTransform()
+{
+ QTransform tr;
+ QPointF center = delegated()->boundingRect().center();
+
+ // Translate
+ tr.translate(mTotalTranslateX + mTranslateX, mTotalTranslateY + mTranslateY);
+
+ // Set angle
+ tr.translate(center.x() * mTotalScaleX * mScaleX, center.y() * mTotalScaleY * mScaleY);
+ tr.rotate(-mAngle);
+ tr.translate(-center.x() * mTotalScaleX * mScaleX, -center.y() * mTotalScaleY * mScaleY);
+
+ // Scale
+ tr.scale(mTotalScaleX * mScaleX, mTotalScaleY * mScaleY);
+ return tr;
+}
+
+
+void UBGraphicsDelegateFrame::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ updateResizeCursors();
+
+ mDelegate->commitUndoStep();
+ mTotalScaleX *= mScaleX;
+ mTotalScaleY *= mScaleY;
+ mTotalTranslateX += mTranslateX;
+ mTotalTranslateY += mTranslateY;
+ event->accept();
+
+ mCurrentTool = None;
+
+ QGraphicsRectItem::mouseReleaseEvent(event);
+
+ // Show the buttons
+ if(isResizing()){
+ mResizing = false;
+ }
+}
+
+
+void UBGraphicsDelegateFrame::updateResizeCursors()
+{
+ QPixmap pix(":/images/cursors/resize.png");
+ QTransform tr;
+
+ tr.rotate(-mAngle);
+ QCursor resizeCursor = QCursor(pix.transformed(tr, Qt::SmoothTransformation), pix.width() / 2, pix.height() / 2);
+ mLeftResizeGrip->setCursor(resizeCursor);
+ mRightResizeGrip->setCursor(resizeCursor);
+
+ tr.rotate(-90);
+ resizeCursor = QCursor(pix.transformed(tr, Qt::SmoothTransformation), pix.width() / 2, pix.height() / 2);
+ mBottomResizeGrip->setCursor(resizeCursor);
+ mTopResizeGrip->setCursor(resizeCursor);
+
+ tr.rotate(-45);
+ resizeCursor = QCursor(pix.transformed(tr, Qt::SmoothTransformation), pix.width() / 2, pix.height() / 2);
+ mBottomRightResizeGrip->setCursor(resizeCursor);
+}
+
+
+void UBGraphicsDelegateFrame::setVisible(bool visible)
+{
+ mVisible = visible;
+ if (mVisible)
+ setBrush(QBrush(UBSettings::paletteColor));
+ else
+ setBrush(Qt::NoBrush);
+}
+
+
+void UBGraphicsDelegateFrame::positionHandles()
+{
+ QRectF itemRect = delegated()->boundingRect();
+
+ if (mDelegate->getToolBarItem() && mDelegate->getToolBarItem()->isVisibleOnBoard()
+ && mDelegate->getToolBarItem()->isShifting())
+ {
+ QPointF graphicsItemPosition = itemRect.topLeft();
+ itemRect.setTopLeft(graphicsItemPosition-QPointF(0,mDelegate->getToolBarItem()->boundingRect().height()* mDelegate->antiScaleRatio()));
+ }
+
+ QTransform itemTransform = delegated()->sceneTransform();
+ QPointF topLeft = itemTransform.map(itemRect.topLeft());
+ QPointF topRight = itemTransform.map(itemRect.topRight());
+ QPointF bottomLeft = itemTransform.map(itemRect.bottomLeft());
+ QPointF bottomRight = itemTransform.map(itemRect.bottomRight());
+ QPointF center = itemTransform.map(itemRect.center());
+ int rotateHeight = QLineF(topLeft, bottomLeft).length();
+
+ // Handle the mirroring
+ if(topLeft.x() > topRight.x()){
+ QPointF topTmp = topRight;
+ QPointF bottomTmp = bottomRight;
+ topRight = topLeft;
+ topLeft = topTmp;
+ bottomRight = bottomLeft;
+ bottomLeft = bottomTmp;
+ }
+
+ if(bottomLeft.y() > topLeft.y()){
+ QPointF leftTmp = bottomLeft;
+ QPointF rightTmp = bottomRight;
+ bottomLeft = topLeft;
+ topLeft = leftTmp;
+ bottomRight = topRight;
+ topRight = rightTmp;
+ }
+
+ QLineF topLine(topLeft, topRight);
+ qreal angle = topLine.angle();
+ qreal width = topLine.length();
+
+ QLineF leftLine(topLeft, bottomLeft);
+ qreal height = leftLine.length();
+
+ int h = rotating()?rotateHeight:height;
+
+ if (mVisible)
+ {
+ setRect(center.x() - mFrameWidth - width / 2, center.y() - mFrameWidth - h / 2, width + 2 * mFrameWidth, h + 2 * mFrameWidth);
+ }
+ else
+ {
+ setRect(center.x() - width / 2, center.y() - h / 2, width, h);
+ }
+
+ resetTransform();
+ translate(center.x(), center.y());
+ rotate(-angle);
+ translate(-center.x(), -center.y());
+
+ mBottomRightResizeGripSvgItem->setParentItem(this);
+ mBottomResizeGripSvgItem->setParentItem(this);
+ mLeftResizeGripSvgItem->setParentItem(this);
+ mRightResizeGripSvgItem->setParentItem(this);
+ mTopResizeGripSvgItem->setParentItem(this);
+ mRotateButton->setParentItem(this);
+
+ mBottomRightResizeGrip->setParentItem(this);
+ mBottomResizeGrip->setParentItem(this);
+ mLeftResizeGrip->setParentItem(this);
+ mRightResizeGrip->setParentItem(this);
+ mTopResizeGrip->setParentItem(this);
+
+ QRectF brRect = mBottomRightResizeGripSvgItem->mapRectToParent(mBottomRightResizeGripSvgItem->boundingRect());
+ QRectF bRect = mBottomResizeGripSvgItem->mapRectToParent(mBottomResizeGripSvgItem->boundingRect());
+ QRectF lRect = mLeftResizeGripSvgItem->mapRectToParent(mLeftResizeGripSvgItem->boundingRect());
+ QRectF rRect = mRightResizeGripSvgItem->mapRectToParent(mRightResizeGripSvgItem->boundingRect());
+ QRectF trRect = mTopResizeGripSvgItem->mapRectToParent(mTopResizeGripSvgItem->boundingRect());
+
+ mBottomRightResizeGripSvgItem->setPos(rect().right() - brRect.width(), rect().bottom() - brRect.height());
+ mBottomResizeGripSvgItem->setPos(rect().center().x() - bRect.width() / 2, rect().bottom() - bRect.height());
+
+ mLeftResizeGripSvgItem->setPos(rect().left(), rect().center().y() - lRect.height() / 2);
+ mRightResizeGripSvgItem->setPos(rect().right() - rRect.width(), rect().center().y() - rRect.height() / 2);
+
+ mTopResizeGripSvgItem->setPos(rect().center().x() - trRect.width() / 2, rect().y());
+ mRotateButton->setPos(rect().right() - mFrameWidth - 5, rect().top() + 5);
+
+ mBottomRightResizeGrip->setRect(bottomRightResizeGripRect());
+ mBottomResizeGrip->setRect(bottomResizeGripRect());
+ mLeftResizeGrip->setRect(leftResizeGripRect());
+ mRightResizeGrip->setRect(rightResizeGripRect());
+ mTopResizeGrip->setRect(topResizeGripRect());
+
+ QVariant vLocked = delegated()->data(UBGraphicsItemData::ItemLocked);
+ bool isLocked = (vLocked.isValid() && vLocked.toBool());
+ bool bShowHorizontalResizers = ResizingHorizontally == mOperationMode;
+ bool bShowVerticalResizers = ResizingHorizontally != mOperationMode;
+ bool bShowAllResizers = Resizing == mOperationMode || Scaling == mOperationMode ;
+
+ mBottomRightResizeGripSvgItem->setVisible(!isLocked && bShowAllResizers);
+ mBottomResizeGripSvgItem->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers));
+ mLeftResizeGripSvgItem->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers));
+ mRightResizeGripSvgItem->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers));
+ mTopResizeGripSvgItem->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers));
+ mRotateButton->setVisible(mDelegate->canRotate() && !isLocked);
+
+ mBottomRightResizeGrip->setVisible(!isLocked && bShowAllResizers);
+ mBottomResizeGrip->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers));
+ mLeftResizeGrip->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers));
+ mRightResizeGrip->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers));
+ mTopResizeGrip->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers));
+
+ if (isLocked)
+ {
+ QColor baseColor = UBSettings::paletteColor;
+ baseColor.setAlphaF(baseColor.alphaF() / 3);
+ setBrush(QBrush(baseColor));
+ }
+ else
+ {
+ setBrush(QBrush(UBSettings::paletteColor));
+ }
+
+ //make frame interact like delegated item when selected. Maybe should be deleted if selection logic will change
+ setZValue(delegated()->zValue());
+}
+
+
+QGraphicsItem* UBGraphicsDelegateFrame::delegated()
+{
+ return mDelegate->delegated();
+}
+
+UBGraphicsDelegateFrame::FrameTool UBGraphicsDelegateFrame::toolFromPos(QPointF pos)
+{
+ if(mDelegate->isLocked())
+ return None;
+ else if (bottomRightResizeGripRect().contains(pos) && ResizingHorizontally != mOperationMode)
+ return ResizeBottomRight;
+ else if (bottomResizeGripRect().contains(pos) && ResizingHorizontally != mOperationMode){
+ if(mMirrorY){
+ return ResizeTop;
+ }else{
+ return ResizeBottom;
+ }
+ }
+ else if (leftResizeGripRect().contains(pos)){
+ if(mMirrorX){
+ return ResizeRight;
+ }else{
+ return ResizeLeft;
+ }
+ return ResizeLeft;
+ }
+ else if (rightResizeGripRect().contains(pos)){
+ if(mMirrorX){
+ return ResizeLeft;
+ }else{
+ return ResizeRight;
+ }
+ }
+ else if (topResizeGripRect().contains(pos) && ResizingHorizontally != mOperationMode){
+ if(mMirrorY){
+ return ResizeBottom;
+ }else{
+ return ResizeTop;
+ }
+ }
+ else if (rotateButtonBounds().contains(pos) && mDelegate && mDelegate->canRotate())
+ return Rotate;
+ else
+ return Move;
+}
+
+
+QRectF UBGraphicsDelegateFrame::bottomRightResizeGripRect() const
+{
+ return QRectF(rect().right() - mFrameWidth, rect().bottom() - mFrameWidth, mFrameWidth, mFrameWidth);
+}
+
+
+QRectF UBGraphicsDelegateFrame::bottomResizeGripRect() const
+{
+ return QRectF(rect().center().x() - mFrameWidth / 2, rect().bottom() - mFrameWidth, mFrameWidth, mFrameWidth);
+}
+
+
+QRectF UBGraphicsDelegateFrame::leftResizeGripRect() const
+{
+ return QRectF(rect().left(), rect().center().y() - mFrameWidth / 2, mFrameWidth, mFrameWidth);
+}
+
+
+QRectF UBGraphicsDelegateFrame::rightResizeGripRect() const
+{
+ return QRectF(rect().right() - mFrameWidth, rect().center().y() - mFrameWidth / 2, mFrameWidth, mFrameWidth);
+}
+
+
+QRectF UBGraphicsDelegateFrame::topResizeGripRect() const
+{
+ return QRectF(rect().center().x() - mFrameWidth / 2, rect().top(), mFrameWidth, mFrameWidth);
+}
+
+
+QRectF UBGraphicsDelegateFrame::rotateButtonBounds() const
+{
+ return QRectF(rect().right()- mFrameWidth, rect().top(), mFrameWidth, mFrameWidth);
+}
+
+void UBGraphicsDelegateFrame::refreshGeometry()
+{
+ // Here we want to have the left on the left, the right on the right, the top on the top and the bottom on the bottom!
+ QRectF itemRect = delegated()->boundingRect();
+ QTransform itemTransform = delegated()->sceneTransform();
+ QPointF topLeft = itemTransform.map(itemRect.topLeft());
+ QPointF topRight = itemTransform.map(itemRect.topRight());
+ QPointF bottomLeft = itemTransform.map(itemRect.bottomLeft());
+
+ QLineF topLine(topLeft, topRight);
+ qreal width = topLine.length();
+ QLineF leftLine(topLeft, bottomLeft);
+ qreal height = leftLine.length();
+ setRect(topRight.x() - mFrameWidth, topLeft.y() - mFrameWidth, width + 2*mFrameWidth, height + 2*mFrameWidth);
+}
diff --git a/Sankore-3.1/src/domain/UBGraphicsDelegateFrame.h b/Sankore-3.1/src/domain/UBGraphicsDelegateFrame.h
index f52a38e..bab9b99 100644
--- a/Sankore-3.1/src/domain/UBGraphicsDelegateFrame.h
+++ b/Sankore-3.1/src/domain/UBGraphicsDelegateFrame.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSDELEGATEFRAME_H_
#define UBGRAPHICSDELEGATEFRAME_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsGroupContainerItem.cpp b/Sankore-3.1/src/domain/UBGraphicsGroupContainerItem.cpp
index 6ff7bd0..a936a4e 100644
--- a/Sankore-3.1/src/domain/UBGraphicsGroupContainerItem.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsGroupContainerItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsGroupContainerItem.h"
#include <QtGui>
@@ -30,6 +31,15 @@
#include "domain/UBGraphicsGroupContainerItemDelegate.h"
#include "domain/UBGraphicsScene.h"
+#include "document/UBDocumentProxy.h"
+#include "core/UBApplication.h"
+#include "document/UBDocumentController.h"
+#include "board/UBBoardController.h"
+#include "document/UBDocumentProxy.h"
+#include "customWidgets/UBGraphicsItemAction.h"
+#include "frameworks/UBFileSystemUtils.h"
+#include "core/UBPersistenceManager.h"
+
#include "core/memcheck.h"
UBGraphicsGroupContainerItem::UBGraphicsGroupContainerItem(QGraphicsItem *parent)
@@ -38,12 +48,13 @@ UBGraphicsGroupContainerItem::UBGraphicsGroupContainerItem(QGraphicsItem *parent
{
setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object);
- setDelegate(new UBGraphicsGroupContainerItemDelegate(this, 0));
+ setDelegate(new UBGraphicsGroupContainerItemDelegate(this, 0));
Delegate()->init();
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);
setFlag(QGraphicsItem::ItemIsMovable, true);
+ Delegate()->setCanTrigAnAction(true);
UBGraphicsGroupContainerItem::setAcceptHoverEvents(true);
@@ -56,7 +67,7 @@ UBGraphicsGroupContainerItem::~UBGraphicsGroupContainerItem()
{
}
-void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item)
+void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item,bool removeAction)
{
if (!item) {
qWarning("UBGraphicsGroupContainerItem::addToGroup: cannot add null item");
@@ -67,6 +78,12 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item)
return;
}
+ //TODO claudio
+ UBGraphicsItem* ubGraphics = dynamic_cast<UBGraphicsItem*>(item);
+ if(ubGraphics && ubGraphics->Delegate() && removeAction)
+ ubGraphics->Delegate()->setAction(0);
+
+
//Check if group is allready rotatable or flippable
if (childItems().count()) {
if (UBGraphicsItem::isFlippable(this) && !UBGraphicsItem::isFlippable(item)) {
@@ -139,7 +156,7 @@ void UBGraphicsGroupContainerItem::removeFromGroup(QGraphicsItem *item)
UBCoreGraphicsScene *groupScene = corescene();
if (groupScene)
- {
+ {
groupScene->addItemToDeletion(item);
}
@@ -164,7 +181,7 @@ void UBGraphicsGroupContainerItem::deselectCurrentItem()
{
dynamic_cast<UBGraphicsMediaItem*>(mCurrentItem)->Delegate()->getToolBarItem()->hide();
}
- break;
+ break;
}
mCurrentItem->setSelected(false);
@@ -226,6 +243,14 @@ void UBGraphicsGroupContainerItem::copyItemParameters(UBItem *copy) const
cp->setFlag(QGraphicsItem::ItemIsSelectable, true);
cp->setData(UBGraphicsItemData::ItemLayerType, this->data(UBGraphicsItemData::ItemLayerType));
cp->setData(UBGraphicsItemData::ItemLocked, this->data(UBGraphicsItemData::ItemLocked));
+ if(Delegate()->action()){
+ if(Delegate()->action()->linkType() == eLinkToAudio){
+ UBGraphicsItemPlayAudioAction* action = new UBGraphicsItemPlayAudioAction(Delegate()->action()->path());
+ cp->Delegate()->setAction(action);
+ }
+ else
+ cp->Delegate()->setAction(Delegate()->action());
+ }
}
}
@@ -352,7 +377,7 @@ void UBGraphicsGroupContainerItem::pRemoveFromGroup(QGraphicsItem *item)
UBGraphicsScene *Scene = dynamic_cast<UBGraphicsScene *>(item->scene());
if (Scene)
- {
+ {
Scene->addItem(item);
}
diff --git a/Sankore-3.1/src/domain/UBGraphicsGroupContainerItem.h b/Sankore-3.1/src/domain/UBGraphicsGroupContainerItem.h
index 362e43d..ebbbefd 100644
--- a/Sankore-3.1/src/domain/UBGraphicsGroupContainerItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsGroupContainerItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSGROUPCONTAINERITEM_H
#define UBGRAPHICSGROUPCONTAINERITEM_H
@@ -35,7 +36,7 @@ public:
UBGraphicsGroupContainerItem (QGraphicsItem *parent = 0);
virtual ~UBGraphicsGroupContainerItem();
- void addToGroup(QGraphicsItem *item);
+ void addToGroup(QGraphicsItem *item, bool removeAction=true);
void removeFromGroup(QGraphicsItem *item);
void setCurrentItem(QGraphicsItem *item){mCurrentItem = item;}
QGraphicsItem *getCurrentItem() const {return mCurrentItem;}
diff --git a/Sankore-3.1/src/domain/UBGraphicsGroupContainerItemDelegate.cpp b/Sankore-3.1/src/domain/UBGraphicsGroupContainerItemDelegate.cpp
index f016336..9c5875d 100644
--- a/Sankore-3.1/src/domain/UBGraphicsGroupContainerItemDelegate.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsGroupContainerItemDelegate.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,17 +20,29 @@
*/
+
#include "UBGraphicsGroupContainerItemDelegate.h"
#include <QtGui>
#include "UBGraphicsScene.h"
+
+#include "core/UBApplication.h"
+
+#include "board/UBBoardPaletteManager.h"
+
+
#include "gui/UBResources.h"
+#include "gui/UBCreateLinkPalette.h"
#include "domain/UBGraphicsDelegateFrame.h"
#include "domain/UBGraphicsGroupContainerItem.h"
#include "board/UBBoardController.h"
+#include "board/UBDrawingController.h"
+
+
+#include "customWidgets/UBGraphicsItemAction.h"
#include "core/memcheck.h"
@@ -65,6 +77,54 @@ void UBGraphicsGroupContainerItemDelegate::decorateMenu(QMenu *menu)
showIcon.addPixmap(QPixmap(":/images/eyeOpened.svg"), QIcon::Normal, QIcon::On);
showIcon.addPixmap(QPixmap(":/images/eyeClosed.svg"), QIcon::Normal, QIcon::Off);
mShowOnDisplayAction->setIcon(showIcon);
+
+ mShowPanelToAddAnAction = menu->addAction(tr("Add an action"),this,SLOT(onAddActionClicked()));
+}
+
+//TODO claudio
+// duplicated code UBGraphicsDelegateItem
+void UBGraphicsGroupContainerItemDelegate::onAddActionClicked()
+{
+ UBCreateLinkPalette* linkPalette = UBApplication::boardController->paletteManager()->linkPalette();
+ linkPalette->show();
+ connect(linkPalette,SIGNAL(definedAction(UBGraphicsItemAction*)),this,SLOT(saveAction(UBGraphicsItemAction*)));
+}
+
+//TODO claudio
+// duplicated code UBGraphicsDelegateItem
+void UBGraphicsGroupContainerItemDelegate::saveAction(UBGraphicsItemAction* action)
+{
+ mAction = action;
+ mMenu->removeAction(mShowPanelToAddAnAction);
+ QString actionLabel;
+ switch (mAction->linkType()) {
+ case eLinkToAudio:
+ actionLabel= tr("Remove link to audio");
+ break;
+ case eLinkToPage:
+ actionLabel = tr("Remove link to page");
+ break;
+ case eLinkToWebUrl:
+ actionLabel = tr("Remove link to web url");
+ default:
+ break;
+ }
+
+ mRemoveAnAction = mMenu->addAction(actionLabel,this,SLOT(onRemoveActionClicked()));
+ mMenu->addAction(mRemoveAnAction);
+}
+
+//TODO claudio
+// duplicated code UBGraphicsDelegateItem
+void UBGraphicsGroupContainerItemDelegate::onRemoveActionClicked()
+{
+ if(mAction){
+ mAction->actionRemoved();
+ delete mAction;
+ mAction = NULL;
+ }
+ mMenu->removeAction(mRemoveAnAction);
+ mMenu->addAction(mShowPanelToAddAnAction);
}
void UBGraphicsGroupContainerItemDelegate::buildButtons()
@@ -75,7 +135,15 @@ void UBGraphicsGroupContainerItemDelegate::buildButtons()
bool UBGraphicsGroupContainerItemDelegate::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
+ //TODO claudio
+ // another chunk of duplicated code
delegated()->deselectCurrentItem();
+ UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool();
+ if(currentTool == UBStylusTool::Play){
+ if(mAction)
+ mAction->play();
+ return true;
+ }
return false;
}
@@ -92,3 +160,8 @@ bool UBGraphicsGroupContainerItemDelegate::mouseReleaseEvent(QGraphicsSceneMouse
return false;
}
+
+void UBGraphicsGroupContainerItemDelegate::setAction(UBGraphicsItemAction* action)
+{
+ UBGraphicsItemDelegate::setAction(action);
+}
diff --git a/Sankore-3.1/src/domain/UBGraphicsGroupContainerItemDelegate.h b/Sankore-3.1/src/domain/UBGraphicsGroupContainerItemDelegate.h
index 496f002..25bd333 100644
--- a/Sankore-3.1/src/domain/UBGraphicsGroupContainerItemDelegate.h
+++ b/Sankore-3.1/src/domain/UBGraphicsGroupContainerItemDelegate.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSGROUPCONTAINERITEMDELEGATE_H
#define UBGRAPHICSGROUPCONTAINERITEMDELEGATE_H
@@ -34,6 +35,7 @@ Q_OBJECT
public:
UBGraphicsGroupContainerItemDelegate(QGraphicsItem* pDelegated, QObject * parent = 0);
UBGraphicsGroupContainerItem *delegated();
+ void setAction(UBGraphicsItemAction* action);
protected:
virtual void decorateMenu(QMenu *menu);
@@ -45,6 +47,11 @@ protected:
private:
DelegateButton *mDestroyGroupButton;
+
+private slots:
+ void onAddActionClicked();
+ void onRemoveActionClicked();
+ void saveAction(UBGraphicsItemAction *action);
};
#endif // UBGRAPHICSGROUPCONTAINERITEMDELEGATE_H
diff --git a/Sankore-3.1/src/domain/UBGraphicsItemDelegate.cpp b/Sankore-3.1/src/domain/UBGraphicsItemDelegate.cpp
index 38127d8..a1f944b 100644
--- a/Sankore-3.1/src/domain/UBGraphicsItemDelegate.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsItemDelegate.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include <QtSvg>
#include <QDrag>
@@ -33,6 +34,7 @@
#include "board/UBBoardController.h" // TODO UB 4.x clean that dependency
#include "board/UBBoardView.h" // TODO UB 4.x clean that dependency
+#include "board/UBBoardPaletteManager.h"
#include "core/UBApplication.h"
#include "core/UBApplicationController.h"
@@ -53,6 +55,10 @@
#include "frameworks/UBFileSystemUtils.h"
#include "board/UBDrawingController.h"
+#include "gui/UBCreateLinkPalette.h"
+
+#include "customWidgets/UBGraphicsItemAction.h"
+
#include "core/memcheck.h"
class UBGraphicsParaschoolEditorWidgetItem;
@@ -165,9 +171,11 @@ UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObjec
, mFrameWidth(UBSettings::settings()->objectFrameWidth)
, mAntiScaleRatio(1.0)
, mToolBarItem(NULL)
+ , mAction(0)
, mCanRotate(canRotate)
, mCanDuplicate(true)
, mRespectRatio(respectRatio)
+ , mCanTrigAnAction(false)
, mMimeData(NULL)
, mFlippable(false)
, mToolBarUsed(useToolBar)
@@ -236,9 +244,7 @@ UBGraphicsItemDelegate::~UBGraphicsItemDelegate()
QVariant UBGraphicsItemDelegate::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
{
- if(change == QGraphicsItem::ItemChildAddedChange){
-
- }else if (change == QGraphicsItem::ItemSelectedHasChanged) {
+ if (change == QGraphicsItem::ItemSelectedHasChanged) {
bool ok;
bool selected = value.toUInt(&ok);
if (ok) {
@@ -286,6 +292,8 @@ bool UBGraphicsItemDelegate::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
mDragStartPosition = event->pos();
+ mMoved = false;
+
startUndoStep();
if (!delegated()->isSelected())
@@ -315,6 +323,7 @@ bool UBGraphicsItemDelegate::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
}
mDrag->exec();
mDragPixmap = QPixmap();
+ mMoved = true;
return true;
}
return false;
@@ -324,21 +333,23 @@ bool UBGraphicsItemDelegate::weelEvent(QGraphicsSceneWheelEvent *event)
{
Q_UNUSED(event);
if( delegated()->isSelected() )
- {
-// event->accept();
return true;
- }
else
- {
-// event->ignore();
return false;
- }
}
bool UBGraphicsItemDelegate::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event);
+ UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool();
+ if(!mMoved && currentTool == UBStylusTool::Play)
+ {
+ if(mAction)
+ mAction->play();
+ return true;
+ }
+
//Deselect all the rest selected items if no ctrl key modifier
if (delegated()->scene()
&& delegated()->scene()->selectedItems().count()
@@ -358,17 +369,11 @@ bool UBGraphicsItemDelegate::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
void UBGraphicsItemDelegate::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event)
-// if (!mDelegated->isSelected()) {
-// setZOrderButtonsVisible(true);
-// }
}
void UBGraphicsItemDelegate::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event)
-// if (!mDelegated->isSelected()) {
-// setZOrderButtonsVisible(false);
-// }
}
QGraphicsItem *UBGraphicsItemDelegate::delegated()
@@ -439,22 +444,9 @@ void UBGraphicsItemDelegate::setZOrderButtonsVisible(bool visible)
void UBGraphicsItemDelegate::remove(bool canUndo)
{
- /*UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mDelegated->scene());
- if (scene && canUndo)
- {
- UBGraphicsItemUndoCommand *uc = new UBGraphicsItemUndoCommand(scene, mDelegated, 0);
- UBApplication::undoStack->push(uc);
- }
- mDelegated->hide(); */
-
UBGraphicsScene* scene = dynamic_cast<UBGraphicsScene*>(mDelegated->scene());
if (scene)
{
-// bool shownOnDisplay = mDelegated->data(UBGraphicsItemData::ItemLayerType).toInt() != UBItemLayerType::Control;
-// showHide(shownOnDisplay);
-// updateFrame();
-// updateButtons();
-
if (mFrame && !mFrame->scene() && mDelegated->scene())
{
mDelegated->scene()->addItem(mFrame);
@@ -639,6 +631,51 @@ void UBGraphicsItemDelegate::decorateMenu(QMenu* menu)
sourceIcon.addPixmap(QPixmap(":/images/toolbar/internet.png"), QIcon::Normal, QIcon::On);
mGotoContentSourceAction->setIcon(sourceIcon);
}
+
+ if(mCanTrigAnAction)
+ mShowPanelToAddAnAction = menu->addAction(tr("Add an action"),this,SLOT(onAddActionClicked()));
+}
+
+void UBGraphicsItemDelegate::onAddActionClicked()
+{
+ UBCreateLinkPalette* linkPalette = UBApplication::boardController->paletteManager()->linkPalette();
+ linkPalette->show();
+ connect(linkPalette,SIGNAL(definedAction(UBGraphicsItemAction*)),this,SLOT(saveAction(UBGraphicsItemAction*)));
+}
+
+void UBGraphicsItemDelegate::saveAction(UBGraphicsItemAction* action)
+{
+ mAction = action;
+ mMenu->removeAction(mShowPanelToAddAnAction);
+ QString actionLabel;
+ switch (mAction->linkType()) {
+ case eLinkToAudio:
+ actionLabel= tr("Remove link to audio");
+ break;
+ case eLinkToPage:
+ actionLabel = tr("Remove link to page");
+ break;
+ case eLinkToWebUrl:
+ actionLabel = tr("Remove link to web url");
+ default:
+ break;
+ }
+
+ mRemoveAnAction = mMenu->addAction(actionLabel,this,SLOT(onRemoveActionClicked()));
+ mMenu->addAction(mRemoveAnAction);
+}
+
+void UBGraphicsItemDelegate::onRemoveActionClicked()
+{
+ if(mAction){
+ mAction->actionRemoved();
+ delete mAction;
+ mAction = NULL;
+ }
+ if(mRemoveAnAction && mMenu){
+ mMenu->removeAction(mRemoveAnAction);
+ mMenu->addAction(mShowPanelToAddAnAction);
+ }
}
void UBGraphicsItemDelegate::updateMenuActionState()
@@ -685,6 +722,11 @@ void UBGraphicsItemDelegate::setFlippable(bool flippable)
}
}
+void UBGraphicsItemDelegate::setCanTrigAnAction(bool canTrig)
+{
+ mCanTrigAnAction = canTrig;
+}
+
void UBGraphicsItemDelegate::setRotatable(bool pCanRotate)
{
mCanRotate = pCanRotate;
@@ -734,7 +776,7 @@ void UBGraphicsItemDelegate::updateButtons(bool showUpdated)
mDelegated->scene()->addItem(mDeleteButton);
}
- if (showUpdated /*&& mFrame->isResizing()*/)
+ if (showUpdated)
mDeleteButton->show();
int i = 1, j = 0, k = 0;
@@ -771,8 +813,24 @@ void UBGraphicsItemDelegate::setButtonsVisible(bool visible)
}
}
+void UBGraphicsItemDelegate::setAction(UBGraphicsItemAction* action)
+{
+ if(!action)
+ onRemoveActionClicked();
+ else{
+ setCanTrigAnAction(true);
+ if(!mMenu){
+ //TODO claudio
+ // Remove this very bad chunk of code
+ mMenu = new QMenu(UBApplication::boardController->controlView());
+ decorateMenu(mMenu);
+ }
+ saveAction(action);
+ }
+}
-UBGraphicsToolBarItem::UBGraphicsToolBarItem(QGraphicsItem * parent) :
+
+UBGraphicsToolBarItem::UBGraphicsToolBarItem(QGraphicsItem * parent) :
QGraphicsRectItem(parent),
mShifting(true),
mVisible(false),
@@ -785,7 +843,6 @@ UBGraphicsToolBarItem::UBGraphicsToolBarItem(QGraphicsItem * parent) :
rect.setWidth(parent->boundingRect().width());
this->setRect(rect);
- // setBrush(QColor(UBSettings::paletteColor));
setPen(Qt::NoPen);
hide();
@@ -815,36 +872,40 @@ void UBGraphicsToolBarItem::paint(QPainter *painter, const QStyleOptionGraphicsI
Q_UNUSED(widget);
QPainterPath path;
- path.addRoundedRect(rect(), 10, 10);
+ path.addRoundedRect(rect(), 10, 10);
setBrush(QBrush(UBSettings::paletteColor));
painter->fillPath(path, brush());
}
-MediaTimer::MediaTimer(QGraphicsItem * parent): QGraphicsRectItem(parent)
+MediaTimer::MediaTimer(QGraphicsItem * parent): QGraphicsRectItem(parent)
{
val = 0;
smallPoint = false;
- setNumDigits(4);
+ setNumDigits(6);
}
MediaTimer::~MediaTimer()
{}
+void MediaTimer::positionHandles()
+{
+ digitSpace = smallPoint ? 2 : 1;
+ ySegLen = rect().height()*5/12;
+ xSegLen = ySegLen*2/3;
+ segLen = xSegLen;
+ xAdvance = segLen*(5 + digitSpace)/5;
+ xOffset = (rect().width() - ndigits*xAdvance + segLen/5)/2;
+ yOffset = rect().height() - ySegLen*2;
+
+ setRect(rect().x(), rect().y(), xOffset + xAdvance*ndigits, rect().height());
+}
+
void MediaTimer::drawString(const QString &s, QPainter &p,
QBitArray *newPoints, bool newString)
{
QPoint pos;
-
- int digitSpace = smallPoint ? 2 : 1;
- int xSegLen = (rect().width()/1)*5/(ndigits*(5 + digitSpace) + digitSpace);
- int ySegLen = rect().height()*5/12;
- int segLen = ySegLen > xSegLen ? xSegLen : ySegLen;
- int xAdvance = segLen*(5 + digitSpace)/5;
- int xOffset = rect().x() + (rect().width()/1 - ndigits*xAdvance + segLen/5)/2;
- int yOffset = (rect().height() - segLen*2)/2;
-
for (int i=0; i<ndigits; i++) {
pos = QPoint(xOffset + xAdvance*i, yOffset);
if (newString)
@@ -878,11 +939,11 @@ void MediaTimer::drawDigit(const QPoint &pos, QPainter &p, int segLen,
int nUpdates;
const char *segs;
int i,j;
-
+
const char erase = 0;
const char draw = 1;
const char leaveAlone = 2;
-
+
segs = getSegments(oldCh);
for (nErases=0; segs[nErases] != 99; nErases++) {
updates[nErases][0] = erase; // get segments to erase to
@@ -910,8 +971,8 @@ void MediaTimer::drawDigit(const QPoint &pos, QPainter &p, int segLen,
}
}
-char MediaTimer::segments [][8] =
- {
+char MediaTimer::segments [][8] =
+ {
{ 0, 1, 2, 4, 5, 6,99, 0}, // 0 0
{ 2, 5,99, 0, 0, 0, 0, 0}, // 1 1
{ 0, 2, 3, 4, 6,99, 0, 0}, // 2 2
@@ -934,7 +995,7 @@ const char* MediaTimer::getSegments(char ch) // gets list of segme
return segments[10];
if (ch == ' ')
return segments[11];
-
+
return NULL;
}
@@ -946,7 +1007,7 @@ void MediaTimer::drawSegment(const QPoint &pos, char segmentNo, QPainter &p,
QPoint ppt;
QPoint pt = pos;
int width = segLen/5;
-
+
#define LINETO(X,Y) addPoint(a, QPoint(pt.x() + (X),pt.y() + (Y)))
#define LIGHT
#define DARK
@@ -1090,10 +1151,6 @@ void MediaTimer::paint(QPainter *p,
Q_UNUSED(option);
Q_UNUSED(widget);
- QFont f = p->font();
- f.setPointSizeF(f.pointSizeF());
- p->setFont(f);
-
if (smallPoint)
drawString(digitStr, *p, &points, false);
else
@@ -1178,7 +1235,7 @@ void MediaTimer::setNumDigits(int numDigits)
numDigits = 0;
}
if (digitStr.isNull()) { // from constructor
- ndigits = numDigits;
+ ndigits = numDigits + numDigits/2 - 1;
digitStr.fill(QLatin1Char(' '), ndigits);
points.fill(0, ndigits);
digitStr[ndigits - 1] = QLatin1Char('0'); // "0" is the default number
@@ -1208,6 +1265,7 @@ void MediaTimer::setNumDigits(int numDigits)
ndigits = numDigits;
update();
}
+ positionHandles();
}
DelegateMediaControl::DelegateMediaControl(UBGraphicsMediaItem* pDelegated, QGraphicsItem * parent)
@@ -1235,15 +1293,8 @@ void DelegateMediaControl::paint(QPainter *painter,
{
Q_UNUSED(option);
Q_UNUSED(widget);
-
- QPainterPath path;
-
- mLCDTimerArea.setHeight(rect().height());
- mLCDTimerArea.setWidth(rect().height());
- mSeecArea.setWidth(rect().width()-mLCDTimerArea.width()-2);
- mSeecArea.setHeight(rect().height()-2*mSeecAreaBorderHeight);
- mSeecArea.setY(mSeecAreaBorderHeight);
+ QPainterPath path;
path.addRoundedRect(mSeecArea, mSeecArea.height()/2, mSeecArea.height()/2);
painter->fillPath(path, brush());
@@ -1274,28 +1325,59 @@ QPainterPath DelegateMediaControl::shape() const
void DelegateMediaControl::positionHandles()
{
- mLCDTimerArea.setWidth(parentItem()->boundingRect().height());
+ QRectF selfRect = rect();
+ selfRect.setHeight(parentItem()->boundingRect().height());
+ setRect(selfRect);
+
+ QTime tTotal;
+ tTotal = tTotal.addMSecs(mTotalTimeInMs);
+
mLCDTimerArea.setHeight(parentItem()->boundingRect().height());
+
+ int digitsCount = 2;
+ int timerWidth = mLCDTimerArea.height();
+
+ mDisplayFormat = "ss";
+
+ if (tTotal.minute() > 0)
+ {
+ mDisplayFormat = "mm:" + mDisplayFormat;
+ digitsCount += 3;
+ timerWidth += mLCDTimerArea.height()*0.5;
+ }
+
+ if (tTotal.hour() > 0)
+ {
+ mDisplayFormat = "hh:" + mDisplayFormat;
+ digitsCount += 3;
+ timerWidth += mLCDTimerArea.height();
+ }
+
+ lcdTimer->setNumDigits(digitsCount);
+
+ mLCDTimerArea.setWidth(timerWidth);
+
lcdTimer->setRect(mLCDTimerArea);
- lcdTimer->setPos(mSeecArea.width()-mLCDTimerArea.width(),0);
+
+ // not the best solution, but it works.
+ lcdTimer->positionHandles();
+ mLCDTimerArea = lcdTimer->rect();
+ // -------------------------------------
+
+ lcdTimer->setPos(rect().width() - mLCDTimerArea.width(), 0);
mSeecAreaBorderHeight = rect().height()/20;
mSeecArea.setWidth(rect().width()-mLCDTimerArea.width()-2);
mSeecArea.setHeight(rect().height()-2*mSeecAreaBorderHeight);
mSeecArea.setY(mSeecAreaBorderHeight);
-
- QRectF selfRect = rect();
- selfRect.setHeight(parentItem()->boundingRect().height());
- setRect(selfRect);
-
- lcdTimer->setPos(rect().width() - mLCDTimerArea.width(), 0);
}
void DelegateMediaControl::update()
{
- QTime t;
- t = t.addMSecs(mCurrentTimeInMs < 0 ? 0 : mCurrentTimeInMs);
- lcdTimer->display(t.toString("m:ss"));
+ QTime tCurrent;
+ tCurrent = tCurrent.addMSecs(mCurrentTimeInMs < 0 ? 0 : mCurrentTimeInMs);
+
+ lcdTimer->display(tCurrent.toString(mDisplayFormat));
QGraphicsRectItem::update();
}
@@ -1309,17 +1391,21 @@ void DelegateMediaControl::updateTicker(qint64 time )
void DelegateMediaControl::totalTimeChanged(qint64 newTotalTime)
{
- mTotalTimeInMs = newTotalTime;
- update();
+ if (mTotalTimeInMs != newTotalTime)
+ {
+ mTotalTimeInMs = newTotalTime;
+ positionHandles();
+ update();
+ }
}
void DelegateMediaControl::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qreal frameWidth = mSeecArea.height()/2;
- if (boundingRect().contains(event->pos() - QPointF(frameWidth,0))
+ if (boundingRect().contains(event->pos() - QPointF(frameWidth,0))
&& boundingRect().contains(event->pos() + QPointF(frameWidth,0)))
- {
+ {
mDisplayCurrentTime = true;
seekToMousePos(event->pos());
this->update();
@@ -1331,9 +1417,9 @@ void DelegateMediaControl::mousePressEvent(QGraphicsSceneMouseEvent *event)
void DelegateMediaControl::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
qreal frameWidth = mSeecArea.height() / 2;
- if (boundingRect().contains(event->pos() - QPointF(frameWidth,0))
+ if (boundingRect().contains(event->pos() - QPointF(frameWidth,0))
&& boundingRect().contains(event->pos() + QPointF(frameWidth,0)))
- {
+ {
seekToMousePos(event->pos());
this->update();
event->accept();
@@ -1347,7 +1433,7 @@ void DelegateMediaControl::seekToMousePos(QPointF mousePos)
qreal frameWidth = rect().height() / 2;
minX = frameWidth;
- length = mSeecArea.width() - lcdTimer->rect().width();
+ length = mSeecArea.width() - mSeecArea.height();
qreal mouseX = mousePos.x();
if (mouseX >= (mSeecArea.width() - mSeecArea.height()/2))
diff --git a/Sankore-3.1/src/domain/UBGraphicsItemDelegate.h b/Sankore-3.1/src/domain/UBGraphicsItemDelegate.h
index 16542a3..f7a4ab4 100644
--- a/Sankore-3.1/src/domain/UBGraphicsItemDelegate.h
+++ b/Sankore-3.1/src/domain/UBGraphicsItemDelegate.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSITEMDELEGATE_H_
#define UBGRAPHICSITEMDELEGATE_H_
@@ -37,6 +38,7 @@ class UBGraphicsProxyWidget;
class UBGraphicsDelegateFrame;
class UBGraphicsWidgetItem;
class UBGraphicsMediaItem;
+class UBGraphicsItemAction;
class DelegateButton: public QGraphicsSvgItem
{
@@ -103,10 +105,11 @@ public:
MediaTimer(QGraphicsItem * parent = 0);
~MediaTimer();
+ void positionHandles();
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget);
-
void display(const QString &str);
+ void setNumDigits(int nDigits);
private:
@@ -116,7 +119,6 @@ private:
void drawSegment(const QPoint &, char, QPainter &, int, bool = false);
void addPoint(QPolygon&, const QPoint&);
void internalSetString(const QString& s);
- void setNumDigits(int nDigits);
static char segments [][8];
@@ -127,6 +129,14 @@ private:
uint shadow : 1;
uint smallPoint : 1;
+
+ int digitSpace;
+ int xSegLen;
+ int ySegLen;
+ int segLen;
+ int xAdvance;
+ int xOffset;
+ int yOffset;
};
class DelegateMediaControl: public QObject, public QGraphicsRectItem
@@ -177,6 +187,8 @@ class DelegateMediaControl: public QObject, public QGraphicsRectItem
QRectF mLCDTimerArea;
MediaTimer *lcdTimer;
+
+ QString mDisplayFormat;
};
class UBGraphicsToolBarItem : public QGraphicsRectItem, public QObject
@@ -188,7 +200,7 @@ class UBGraphicsToolBarItem : public QGraphicsRectItem, public QObject
bool isVisibleOnBoard() const { return mVisible; }
void setVisibleOnBoard(bool visible) { mVisible = visible; }
bool isShifting() const { return mShifting; }
- void setShifting(bool shifting) { mShifting = shifting; }
+ void setShifting(bool shifting) { mShifting = shifting; }
QList<QGraphicsItem*> itemsOnToolBar() const { return mItemsOnToolBar; }
void setItemsOnToolBar(QList<QGraphicsItem*> itemsOnToolBar) { mItemsOnToolBar = itemsOnToolBar;}
int minWidth() { return mMinWidth; }
@@ -258,6 +270,8 @@ class UBGraphicsItemDelegate : public QObject
void setRotatable(bool pCanRotate);
bool isFlippable();
+ void setCanTrigAnAction(bool canTrig);
+
void setButtonsVisible(bool visible);
UBGraphicsToolBarItem* getToolBarItem() const { return mToolBarItem; }
@@ -265,6 +279,10 @@ class UBGraphicsItemDelegate : public QObject
qreal antiScaleRatio() const { return mAntiScaleRatio; }
virtual void update() {positionHandles();}
+ UBGraphicsItemAction* action() { return mAction; }
+ void setAction(UBGraphicsItemAction* action);
+
+
signals:
void showOnDisplayChanged(bool shown);
void lockChanged(bool locked);
@@ -305,6 +323,8 @@ class UBGraphicsItemDelegate : public QObject
QAction* mLockAction;
QAction* mShowOnDisplayAction;
QAction* mGotoContentSourceAction;
+ QAction* mShowPanelToAddAnAction;
+ QAction* mRemoveAnAction;
UBGraphicsDelegateFrame* mFrame;
qreal mFrameWidth;
@@ -314,6 +334,8 @@ class UBGraphicsItemDelegate : public QObject
QList<DelegateButton*> mToolBarButtons;
UBGraphicsToolBarItem* mToolBarItem;
+ UBGraphicsItemAction* mAction;
+
protected slots:
virtual void gotoContentSource();
@@ -331,6 +353,7 @@ private:
bool mCanRotate;
bool mCanDuplicate;
bool mRespectRatio;
+ bool mCanTrigAnAction;
QMimeData* mMimeData;
QPixmap mDragPixmap;
@@ -339,6 +362,13 @@ private:
bool mToolBarUsed;
bool mShowGoContentButton;
+
+ bool mMoved;
+
+private slots:
+ void onAddActionClicked();
+ void onRemoveActionClicked();
+ void saveAction(UBGraphicsItemAction *action);
};
diff --git a/Sankore-3.1/src/domain/UBGraphicsItemGroupUndoCommand.cpp b/Sankore-3.1/src/domain/UBGraphicsItemGroupUndoCommand.cpp
index da37dd2..25a3ebe 100644
--- a/Sankore-3.1/src/domain/UBGraphicsItemGroupUndoCommand.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsItemGroupUndoCommand.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsItemGroupUndoCommand.h"
#include "UBGraphicsGroupContainerItem.h"
diff --git a/Sankore-3.1/src/domain/UBGraphicsItemGroupUndoCommand.h b/Sankore-3.1/src/domain/UBGraphicsItemGroupUndoCommand.h
index cc68a60..981ebb3 100644
--- a/Sankore-3.1/src/domain/UBGraphicsItemGroupUndoCommand.h
+++ b/Sankore-3.1/src/domain/UBGraphicsItemGroupUndoCommand.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSITEMGROUPUNDOCOMMAND_H
#define UBGRAPHICSITEMGROUPUNDOCOMMAND_H
diff --git a/Sankore-3.1/src/domain/UBGraphicsItemTransformUndoCommand.cpp b/Sankore-3.1/src/domain/UBGraphicsItemTransformUndoCommand.cpp
index 770315b..a40d991 100644
--- a/Sankore-3.1/src/domain/UBGraphicsItemTransformUndoCommand.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsItemTransformUndoCommand.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsItemTransformUndoCommand.h"
#include "UBResizableGraphicsItem.h"
#include "domain/UBItem.h"
diff --git a/Sankore-3.1/src/domain/UBGraphicsItemTransformUndoCommand.h b/Sankore-3.1/src/domain/UBGraphicsItemTransformUndoCommand.h
index 8fc57a4..aa586ec 100644
--- a/Sankore-3.1/src/domain/UBGraphicsItemTransformUndoCommand.h
+++ b/Sankore-3.1/src/domain/UBGraphicsItemTransformUndoCommand.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSITEMTRANSFORMUNDOCOMMAND_H_
#define UBGRAPHICSITEMTRANSFORMUNDOCOMMAND_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsItemUndoCommand.cpp b/Sankore-3.1/src/domain/UBGraphicsItemUndoCommand.cpp
index ad306d5..1c7915c 100644
--- a/Sankore-3.1/src/domain/UBGraphicsItemUndoCommand.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsItemUndoCommand.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,221 +18,268 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBGraphicsItemUndoCommand.h"
-
-#include <QtGui>
-
-#include "UBGraphicsScene.h"
-
-#include "core/UBApplication.h"
-
-#include "board/UBBoardController.h"
-
-#include "core/memcheck.h"
-#include "domain/UBGraphicsGroupContainerItem.h"
-#include "domain/UBGraphicsPolygonItem.h"
-
-UBGraphicsItemUndoCommand::UBGraphicsItemUndoCommand(UBGraphicsScene* pScene, const QSet<QGraphicsItem*>& pRemovedItems,
- const QSet<QGraphicsItem*>& pAddedItems, const GroupDataTable &groupsMap)
- : mScene(pScene)
- , mRemovedItems(pRemovedItems - pAddedItems)
- , mAddedItems(pAddedItems - pRemovedItems)
- , mExcludedFromGroup(groupsMap)
-{
- mFirstRedo = true;
-
- QSetIterator<QGraphicsItem*> itAdded(mAddedItems);
- while (itAdded.hasNext())
- {
- UBApplication::boardController->freezeW3CWidget(itAdded.next(), true);
- }
-
- QSetIterator<QGraphicsItem*> itRemoved(mRemovedItems);
- while (itRemoved.hasNext())
- {
- UBApplication::boardController->freezeW3CWidget(itRemoved.next(), false);
- }
-}
-
-UBGraphicsItemUndoCommand::UBGraphicsItemUndoCommand(UBGraphicsScene* pScene, QGraphicsItem* pRemovedItem,
- QGraphicsItem* pAddedItem) :
- mScene(pScene)
-{
-
- if (pRemovedItem)
- {
- mRemovedItems.insert(pRemovedItem);
- }
-
- if (pAddedItem)
- {
- mAddedItems.insert(pAddedItem);
- }
-
- mFirstRedo = true;
-
-}
-
-UBGraphicsItemUndoCommand::~UBGraphicsItemUndoCommand()
-{
- //NOOP
-}
-
-void UBGraphicsItemUndoCommand::undo()
-{
- if (!mScene){
- return;
- }
-
- QSetIterator<QGraphicsItem*> itAdded(mAddedItems);
- while (itAdded.hasNext())
- {
- QGraphicsItem* item = itAdded.next();
-
- UBApplication::boardController->freezeW3CWidget(item, true);
- item->setSelected(false);
- mScene->removeItem(item);
- }
-
- QSetIterator<QGraphicsItem*> itRemoved(mRemovedItems);
- while (itRemoved.hasNext())
- {
- QGraphicsItem* item = itRemoved.next();
- if (item)
- {
- if (UBItemLayerType::FixedBackground == item->data(UBGraphicsItemData::ItemLayerType))
- mScene->setAsBackgroundObject(item);
- else
- mScene->addItem(item);
-
- if (UBGraphicsPolygonItem::Type == item->type())
- {
- UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
- if (polygonItem)
- {
- mScene->removeItem(polygonItem);
- mScene->removeItemFromDeletion(polygonItem);
- polygonItem->strokesGroup()->addToGroup(polygonItem);
- }
- }
-
- UBApplication::boardController->freezeW3CWidget(item, false);
- }
- }
-
- QMapIterator<UBGraphicsGroupContainerItem*, QUuid> curMapElement(mExcludedFromGroup);
- UBGraphicsGroupContainerItem *nextGroup = NULL;
- UBGraphicsGroupContainerItem *previousGroupItem = NULL;
- bool groupChanged = false;
-
- while (curMapElement.hasNext()) {
- curMapElement.next();
-
- groupChanged = previousGroupItem != curMapElement.key();
- //trying to find the group on the scene;
- if (!nextGroup || groupChanged) {
- UBGraphicsGroupContainerItem *groupCandidate = curMapElement.key();
- if (groupCandidate) {
- nextGroup = groupCandidate;
- if(!mScene->items().contains(nextGroup)) {
- mScene->addItem(nextGroup);
- }
- nextGroup->setVisible(true);
- }
- }
-
- QGraphicsItem *groupedItem = mScene->itemForUuid(curMapElement.value());
- if (groupedItem) {
- nextGroup->addToGroup(groupedItem);
- }
-
- previousGroupItem = curMapElement.key();
- UBGraphicsItem::Delegate(nextGroup)->update();
- }
-
- // force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint
- mScene->update(mScene->sceneRect());
-
-}
-
-void UBGraphicsItemUndoCommand::redo()
-{
- // the Undo framework calls a redo while appending the undo command.
- // as we have already plotted the elements, we do not want to do it twice
- if (!mFirstRedo)
- {
- if (!mScene){
- return;
- }
-
- QMapIterator<UBGraphicsGroupContainerItem*, QUuid> curMapElement(mExcludedFromGroup);
- UBGraphicsGroupContainerItem *nextGroup = NULL;
- UBGraphicsGroupContainerItem *previousGroupItem = NULL;
- bool groupChanged = false;
-
- while (curMapElement.hasNext()) {
- curMapElement.next();
-
- groupChanged = previousGroupItem != curMapElement.key();
- //trying to find the group on the scene;
- if (!nextGroup || groupChanged) {
- UBGraphicsGroupContainerItem *groupCandidate = curMapElement.key();
- if (groupCandidate) {
- nextGroup = groupCandidate;
- }
- }
- QGraphicsItem *groupedItem = mScene->itemForUuid(curMapElement.value());
- if (groupedItem) {
- if (nextGroup->childItems().count() == 1) {
- nextGroup->destroy(false);
- break;
- }
- nextGroup->removeFromGroup(groupedItem);
- }
-
- previousGroupItem = curMapElement.key();
- UBGraphicsItem::Delegate(nextGroup)->update();
- }
-
- QSetIterator<QGraphicsItem*> itRemoved(mRemovedItems);
- while (itRemoved.hasNext())
- {
- QGraphicsItem* item = itRemoved.next();
- item->setSelected(false);
- mScene->removeItem(item);
- UBApplication::boardController->freezeW3CWidget(item, true);
- }
-
- QSetIterator<QGraphicsItem*> itAdded(mAddedItems);
- while (itAdded.hasNext())
- {
- QGraphicsItem* item = itAdded.next();
- if (item)
- {
- UBApplication::boardController->freezeW3CWidget(item, false);
-
- if (UBItemLayerType::FixedBackground == item->data(UBGraphicsItemData::ItemLayerType))
- mScene->setAsBackgroundObject(item);
- else
- mScene->addItem(item);
-
- UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
- if (polygonItem)
- {
- mScene->removeItem(polygonItem);
- mScene->removeItemFromDeletion(polygonItem);
- polygonItem->strokesGroup()->addToGroup(polygonItem);
- }
- }
- }
-
- // force refresh, QT is a bit lazy and take a lot of time (nb item ^2) to trigger repaint
- mScene->update(mScene->sceneRect());
- }
- else
- {
- mFirstRedo = false;
- }
-}
+
+
+
+#include "UBGraphicsItemUndoCommand.h"
+
+#include <QtGui>
+
+#include "UBGraphicsScene.h"
+
+#include "core/UBApplication.h"
+
+#include "board/UBBoardController.h"
+
+#include "core/memcheck.h"
+#include "domain/UBGraphicsGroupContainerItem.h"
+#include "domain/UBGraphicsPolygonItem.h"
+
+UBGraphicsItemUndoCommand::UBGraphicsItemUndoCommand(UBGraphicsScene* pScene, const QSet<QGraphicsItem*>& pRemovedItems,
+ const QSet<QGraphicsItem*>& pAddedItems, const GroupDataTable &groupsMap)
+ : mScene(pScene)
+ , mRemovedItems(pRemovedItems - pAddedItems)
+ , mAddedItems(pAddedItems - pRemovedItems)
+ , mExcludedFromGroup(groupsMap)
+{
+ mFirstRedo = true;
+
+ QSetIterator<QGraphicsItem*> itAdded(mAddedItems);
+ while (itAdded.hasNext())
+ {
+ UBApplication::boardController->freezeW3CWidget(itAdded.next(), true);
+ }
+
+ QSetIterator<QGraphicsItem*> itRemoved(mRemovedItems);
+ while (itRemoved.hasNext())
+ {
+ UBApplication::boardController->freezeW3CWidget(itRemoved.next(), false);
+ }
+}
+
+UBGraphicsItemUndoCommand::UBGraphicsItemUndoCommand(UBGraphicsScene* pScene, QGraphicsItem* pRemovedItem,
+ QGraphicsItem* pAddedItem) :
+ mScene(pScene)
+{
+
+ if (pRemovedItem)
+ {
+ mRemovedItems.insert(pRemovedItem);
+ }
+
+ if (pAddedItem)
+ {
+ mAddedItems.insert(pAddedItem);
+ }
+
+ mFirstRedo = true;
+
+}
+
+UBGraphicsItemUndoCommand::~UBGraphicsItemUndoCommand()
+{
+ //NOOP
+}
+
+void UBGraphicsItemUndoCommand::undo()
+{
+ if (!mScene){
+ return;
+ }
+
+ QSetIterator<QGraphicsItem*> itAdded(mAddedItems);
+ while (itAdded.hasNext())
+ {
+ QGraphicsItem* item = itAdded.next();
+
+ UBApplication::boardController->freezeW3CWidget(item, true);
+ item->setSelected(false);
+
+ QTransform t;
+ bool bApplyTransform = false;
+ UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
+ if (polygonItem){
+ if (polygonItem->strokesGroup()
+ && polygonItem->strokesGroup()->parentItem()
+ && UBGraphicsGroupContainerItem::Type == polygonItem->strokesGroup()->parentItem()->type())
+ {
+ bApplyTransform = true;
+ t = polygonItem->sceneTransform();
+ }
+ else if (polygonItem->strokesGroup())
+ polygonItem->resetTransform();
+
+ polygonItem->strokesGroup()->removeFromGroup(polygonItem);
+ }
+ mScene->removeItem(item);
+
+ if (bApplyTransform)
+ polygonItem->setTransform(t);
+
+ }
+
+ QSetIterator<QGraphicsItem*> itRemoved(mRemovedItems);
+ while (itRemoved.hasNext())
+ {
+ QGraphicsItem* item = itRemoved.next();
+ if (item)
+ {
+ if (UBItemLayerType::FixedBackground == item->data(UBGraphicsItemData::ItemLayerType)) {
+ mScene->setAsBackgroundObject(item);
+ } else {
+ qreal ownZ = UBGraphicsItem::getOwnZValue(item);
+ mScene->addItem(item);
+ UBGraphicsItem::assignZValue(item, ownZ); //restoring the previous z index
+ }
+
+ if (UBGraphicsPolygonItem::Type == item->type())
+ {
+ UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
+ if (polygonItem)
+ {
+ mScene->removeItem(polygonItem);
+ mScene->removeItemFromDeletion(polygonItem);
+ polygonItem->strokesGroup()->addToGroup(polygonItem);
+ }
+ }
+
+ UBApplication::boardController->freezeW3CWidget(item, false);
+ }
+ }
+
+ QMapIterator<UBGraphicsGroupContainerItem*, QUuid> curMapElement(mExcludedFromGroup);
+ UBGraphicsGroupContainerItem *nextGroup = NULL;
+ UBGraphicsGroupContainerItem *previousGroupItem = NULL;
+ bool groupChanged = false;
+
+ while (curMapElement.hasNext()) {
+ curMapElement.next();
+
+ groupChanged = previousGroupItem != curMapElement.key();
+ //trying to find the group on the scene;
+ if (!nextGroup || groupChanged) {
+ UBGraphicsGroupContainerItem *groupCandidate = curMapElement.key();
+ if (groupCandidate) {
+ nextGroup = groupCandidate;
+ if(!mScene->items().contains(nextGroup)) {
+ mScene->addItem(nextGroup);
+ }
+ nextGroup->setVisible(true);
+ }
+ }
+
+ QGraphicsItem *groupedItem = mScene->itemForUuid(curMapElement.value());
+ if (groupedItem) {
+ nextGroup->addToGroup(groupedItem);
+ }
+
+ previousGroupItem = curMapElement.key();
+ UBGraphicsItem::Delegate(nextGroup)->update();
+ }
+
+ // force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint
+ mScene->update(mScene->sceneRect());
+
+}
+
+void UBGraphicsItemUndoCommand::redo()
+{
+ // the Undo framework calls a redo while appending the undo command.
+ // as we have already plotted the elements, we do not want to do it twice
+ if (!mFirstRedo)
+ {
+ if (!mScene){
+ return;
+ }
+
+ QMapIterator<UBGraphicsGroupContainerItem*, QUuid> curMapElement(mExcludedFromGroup);
+ UBGraphicsGroupContainerItem *nextGroup = NULL;
+ UBGraphicsGroupContainerItem *previousGroupItem = NULL;
+ bool groupChanged = false;
+
+ while (curMapElement.hasNext()) {
+ curMapElement.next();
+
+ groupChanged = previousGroupItem != curMapElement.key();
+ //trying to find the group on the scene;
+ if (!nextGroup || groupChanged) {
+ UBGraphicsGroupContainerItem *groupCandidate = curMapElement.key();
+ if (groupCandidate) {
+ nextGroup = groupCandidate;
+ }
+ }
+ QGraphicsItem *groupedItem = mScene->itemForUuid(curMapElement.value());
+ if (groupedItem) {
+ if (nextGroup->childItems().count() == 1) {
+ nextGroup->destroy(false);
+ break;
+ }
+ nextGroup->removeFromGroup(groupedItem);
+ }
+
+ previousGroupItem = curMapElement.key();
+ UBGraphicsItem::Delegate(nextGroup)->update();
+ }
+
+ QSetIterator<QGraphicsItem*> itRemoved(mRemovedItems);
+ while (itRemoved.hasNext())
+ {
+ QGraphicsItem* item = itRemoved.next();
+ item->setSelected(false);
+
+ QTransform t;
+ bool bApplyTransform = false;
+ UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
+
+ if (polygonItem){
+ if(polygonItem->strokesGroup()
+ && polygonItem->strokesGroup()->parentItem()
+ && UBGraphicsGroupContainerItem::Type == polygonItem->strokesGroup()->parentItem()->type())
+ {
+ bApplyTransform = true;
+ t = polygonItem->sceneTransform();
+ }
+ else if (polygonItem->strokesGroup())
+ polygonItem->resetTransform();
+
+ polygonItem->strokesGroup()->removeFromGroup(polygonItem);
+ }
+ mScene->removeItem(item);
+
+ if (bApplyTransform)
+ item->setTransform(t);
+
+ UBApplication::boardController->freezeW3CWidget(item, true);
+ }
+
+ QSetIterator<QGraphicsItem*> itAdded(mAddedItems);
+ while (itAdded.hasNext())
+ {
+ QGraphicsItem* item = itAdded.next();
+ if (item)
+ {
+ UBApplication::boardController->freezeW3CWidget(item, false);
+
+ if (UBItemLayerType::FixedBackground == item->data(UBGraphicsItemData::ItemLayerType))
+ mScene->setAsBackgroundObject(item);
+ else
+ mScene->addItem(item);
+
+ UBGraphicsPolygonItem *polygonItem = qgraphicsitem_cast<UBGraphicsPolygonItem*>(item);
+ if (polygonItem)
+ {
+ mScene->removeItem(polygonItem);
+ mScene->removeItemFromDeletion(polygonItem);
+ polygonItem->strokesGroup()->addToGroup(polygonItem);
+ }
+ }
+ }
+
+ // force refresh, QT is a bit lazy and take a lot of time (nb item ^2) to trigger repaint
+ mScene->update(mScene->sceneRect());
+ }
+ else
+ {
+ mFirstRedo = false;
+ }
+}
diff --git a/Sankore-3.1/src/domain/UBGraphicsItemUndoCommand.h b/Sankore-3.1/src/domain/UBGraphicsItemUndoCommand.h
index 84c807c..f349938 100644
--- a/Sankore-3.1/src/domain/UBGraphicsItemUndoCommand.h
+++ b/Sankore-3.1/src/domain/UBGraphicsItemUndoCommand.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSITEMUNDOCOMMAND_H_
#define UBGRAPHICSITEMUNDOCOMMAND_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsMediaItem.cpp b/Sankore-3.1/src/domain/UBGraphicsMediaItem.cpp
index 53759a9..d1f56db 100644
--- a/Sankore-3.1/src/domain/UBGraphicsMediaItem.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsMediaItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsGroupContainerItem.h"
#include "UBGraphicsMediaItem.h"
#include "UBGraphicsMediaItemDelegate.h"
@@ -34,7 +35,6 @@
UBAudioPresentationWidget::UBAudioPresentationWidget(QWidget *parent)
: QWidget(parent)
, mBorderSize(10)
- , mTitleSize(10)
{
}
@@ -43,7 +43,7 @@ void UBAudioPresentationWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.fillRect(rect(), QBrush(Qt::white));
-
+
QPen borderPen;
borderPen.setWidth(2);
borderPen.setColor(QColor(Qt::black));
@@ -84,7 +84,7 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte
if ("" == mediaPath)
mediaPath = pMediaFileUrl.toLocalFile();
- if (mediaPath.toLower().contains("videos"))
+ if (mediaPath.toLower().contains("videos"))
{
mMediaType = mediaType_Video;
@@ -101,7 +101,7 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte
haveLinkedImage = true;
}
- else
+ else
if (mediaPath.toLower().contains("audios"))
{
mMediaType = mediaType_Audio;
@@ -116,20 +116,20 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte
borderSize = pAudioWidget->borderSize();
}
- mAudioWidget->resize(320,26+3*borderSize);
+ mAudioWidget->resize(320,26+2*borderSize); //3*border size with enabled title
mAudioWidget->setMinimumSize(150,26+borderSize);
haveLinkedImage = false;
}
Phonon::createPath(mMediaObject, mAudioOutput);
-
+
mSource = Phonon::MediaSource(pMediaFileUrl);
mMediaObject->setCurrentSource(mSource);
// we should create delegate after media objects because delegate uses his properties at creation.
setDelegate(new UBGraphicsMediaItemDelegate(this, mMediaObject));
-
+
// delegate should be created earler because we setWidget calls resize event for graphics proxy widgt.
// resize uses delegate.
if (mediaType_Video == mMediaType)
@@ -202,7 +202,7 @@ void UBGraphicsMediaItem::setSourceUrl(const QUrl &pSourceUrl)
UBAudioPresentationWidget* pAudioWidget = dynamic_cast<UBAudioPresentationWidget*>(mAudioWidget);
if (pAudioWidget)
{
- pAudioWidget->setTitle(UBFileSystemUtils::lastPathComponent(pSourceUrl.toString()));
+ // pAudioWidget->setTitle(UBFileSystemUtils::lastPathComponent(pSourceUrl.toString()));
}
UBItem::setSourceUrl(pSourceUrl);
@@ -319,13 +319,13 @@ void UBGraphicsMediaItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem *curItem = group->getCurrentItem();
if (curItem && this != curItem)
- {
- group->deselectCurrentItem();
- }
+ {
+ group->deselectCurrentItem();
+ }
group->setCurrentItem(this);
this->setSelected(true);
Delegate()->positionHandles();
- }
+ }
}
}
@@ -338,7 +338,7 @@ void UBGraphicsMediaItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
event->accept();
}
}
- else
+ else
{
mShouldMove = (event->buttons() & Qt::LeftButton);
mMousePressPos = event->scenePos();
diff --git a/Sankore-3.1/src/domain/UBGraphicsMediaItem.h b/Sankore-3.1/src/domain/UBGraphicsMediaItem.h
index 11d4f0d..b512beb 100644
--- a/Sankore-3.1/src/domain/UBGraphicsMediaItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsMediaItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSMEDIAITEM_H
#define UBGRAPHICSMEDIAITEM_H
@@ -44,7 +45,6 @@ private:
virtual void paintEvent(QPaintEvent *event);
int mBorderSize;
- int mTitleSize;
QString mTitle;
};
diff --git a/Sankore-3.1/src/domain/UBGraphicsMediaItemDelegate.cpp b/Sankore-3.1/src/domain/UBGraphicsMediaItemDelegate.cpp
index 67b689a..52ee2fc 100644
--- a/Sankore-3.1/src/domain/UBGraphicsMediaItemDelegate.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsMediaItemDelegate.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include <QtSvg>
@@ -254,6 +255,11 @@ void UBGraphicsMediaItemDelegate::mediaStateChanged ( Phonon::State newstate, Ph
{
Q_UNUSED(newstate);
Q_UNUSED(oldstate);
+
+ if (oldstate == Phonon::LoadingState)
+ {
+ mMediaControl->totalTimeChanged(delegated()->mediaObject()->totalTime());
+ }
updatePlayPauseState();
}
diff --git a/Sankore-3.1/src/domain/UBGraphicsMediaItemDelegate.h b/Sankore-3.1/src/domain/UBGraphicsMediaItemDelegate.h
index 8ce8700..9ac65c9 100644
--- a/Sankore-3.1/src/domain/UBGraphicsMediaItemDelegate.h
+++ b/Sankore-3.1/src/domain/UBGraphicsMediaItemDelegate.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSMEDIAITEMDELEGATE_H_
#define UBGRAPHICSMEDIAITEMDELEGATE_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsPDFItem.cpp b/Sankore-3.1/src/domain/UBGraphicsPDFItem.cpp
index cca2641..0acc8ab 100644
--- a/Sankore-3.1/src/domain/UBGraphicsPDFItem.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsPDFItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsPDFItem.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/domain/UBGraphicsPDFItem.h b/Sankore-3.1/src/domain/UBGraphicsPDFItem.h
index 52d1204..9a1a42d 100644
--- a/Sankore-3.1/src/domain/UBGraphicsPDFItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsPDFItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSPDFITEM_H_
#define UBGRAPHICSPDFITEM_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsPixmapItem.cpp b/Sankore-3.1/src/domain/UBGraphicsPixmapItem.cpp
index 3d0a9a0..bba9f7a 100644
--- a/Sankore-3.1/src/domain/UBGraphicsPixmapItem.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsPixmapItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsPixmapItem.h"
#include <QtGui>
@@ -30,6 +31,15 @@
#include "UBGraphicsItemDelegate.h"
+#include "document/UBDocumentProxy.h"
+#include "core/UBApplication.h"
+#include "document/UBDocumentController.h"
+#include "board/UBBoardController.h"
+#include "document/UBDocumentProxy.h"
+#include "customWidgets/UBGraphicsItemAction.h"
+#include "frameworks/UBFileSystemUtils.h"
+#include "core/UBPersistenceManager.h"
+
#include "core/memcheck.h"
UBGraphicsPixmapItem::UBGraphicsPixmapItem(QGraphicsItem* parent)
@@ -39,6 +49,7 @@ UBGraphicsPixmapItem::UBGraphicsPixmapItem(QGraphicsItem* parent)
Delegate()->init();
Delegate()->setFlippable(true);
Delegate()->setRotatable(true);
+ Delegate()->setCanTrigAnAction(true);
setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object);
setTransformationMode(Qt::SmoothTransformation);
@@ -82,7 +93,7 @@ void UBGraphicsPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
}
else
{
-// QGraphicsPixmapItem::mousePressEvent(event);
+ QGraphicsPixmapItem::mousePressEvent(event);
}
}
@@ -141,6 +152,16 @@ void UBGraphicsPixmapItem::copyItemParameters(UBItem *copy) const
cp->setData(UBGraphicsItemData::ItemLayerType, this->data(UBGraphicsItemData::ItemLayerType));
cp->setData(UBGraphicsItemData::ItemLocked, this->data(UBGraphicsItemData::ItemLocked));
cp->setSourceUrl(this->sourceUrl());
+
+ if(Delegate()->action()){
+ if(Delegate()->action()->linkType() == eLinkToAudio){
+ UBGraphicsItemPlayAudioAction* action = new UBGraphicsItemPlayAudioAction(Delegate()->action()->path());
+ cp->Delegate()->setAction(action);
+ }
+ else
+ cp->Delegate()->setAction(Delegate()->action());
+ }
+
}
}
diff --git a/Sankore-3.1/src/domain/UBGraphicsPixmapItem.h b/Sankore-3.1/src/domain/UBGraphicsPixmapItem.h
index 999b3f8..3ef6b84 100644
--- a/Sankore-3.1/src/domain/UBGraphicsPixmapItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsPixmapItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSPIXMAPITEM_H_
#define UBGRAPHICSPIXMAPITEM_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsPolygonItem.cpp b/Sankore-3.1/src/domain/UBGraphicsPolygonItem.cpp
index d61270f..46b7a9d 100644
--- a/Sankore-3.1/src/domain/UBGraphicsPolygonItem.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsPolygonItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsPolygonItem.h"
#include "frameworks/UBGeometryUtils.h"
@@ -35,6 +36,7 @@ UBGraphicsPolygonItem::UBGraphicsPolygonItem (QGraphicsItem * parent)
, mOriginalWidth(-1)
, mIsNominalLine(false)
, mStroke(0)
+ , mpGroup(NULL)
{
// NOOP
initialize();
@@ -59,6 +61,7 @@ UBGraphicsPolygonItem::UBGraphicsPolygonItem (const QLineF& pLine, qreal pWidth)
, mOriginalWidth(pWidth)
, mIsNominalLine(true)
, mStroke(0)
+ , mpGroup(NULL)
{
// NOOP
initialize();
diff --git a/Sankore-3.1/src/domain/UBGraphicsPolygonItem.h b/Sankore-3.1/src/domain/UBGraphicsPolygonItem.h
index 0ac714f..1432805 100644
--- a/Sankore-3.1/src/domain/UBGraphicsPolygonItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsPolygonItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSPOLYGONITEM_H
#define UBGRAPHICSPOLYGONITEM_H
diff --git a/Sankore-3.1/src/domain/UBGraphicsProxyWidget.cpp b/Sankore-3.1/src/domain/UBGraphicsProxyWidget.cpp
index dde91e8..250304e 100644
--- a/Sankore-3.1/src/domain/UBGraphicsProxyWidget.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsProxyWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsProxyWidget.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/domain/UBGraphicsProxyWidget.h b/Sankore-3.1/src/domain/UBGraphicsProxyWidget.h
index a3f5782..37c13d9 100644
--- a/Sankore-3.1/src/domain/UBGraphicsProxyWidget.h
+++ b/Sankore-3.1/src/domain/UBGraphicsProxyWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSPROXYWIDGET_H_
#define UBGRAPHICSPROXYWIDGET_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsScene.cpp b/Sankore-3.1/src/domain/UBGraphicsScene.cpp
index e53dec2..57d24d8 100644
--- a/Sankore-3.1/src/domain/UBGraphicsScene.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsScene.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsScene.h"
#include <QtGui>
@@ -67,6 +68,8 @@
#include "UBGraphicsTextItem.h"
#include "UBGraphicsStrokesGroup.h"
+#include "customWidgets/UBGraphicsItemAction.h"
+
#include "domain/UBGraphicsGroupContainerItem.h"
#include "UBGraphicsStroke.h"
@@ -335,8 +338,8 @@ void UBGraphicsScene::updateGroupButtonState()
{
UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool();
- if (UBStylusTool::Selector != currentTool)
- UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ if (UBStylusTool::Selector != currentTool && UBStylusTool::Play != currentTool)
+ return;
QAction *groupAction = UBApplication::mainWindow->actionGroupItems;
QList<QGraphicsItem*> selItems = selectedItems();
@@ -578,9 +581,14 @@ bool UBGraphicsScene::inputDeviceRelease()
// Add the center cross
foreach(QGraphicsItem* item, mAddedItems){
+ mAddedItems.remove(item);
removeItem(item);
UBCoreGraphicsScene::removeItemFromDeletion(item);
- mArcPolygonItem->setStrokesGroup(pStrokes);
+
+ UBGraphicsPolygonItem *crossLine = qgraphicsitem_cast<UBGraphicsPolygonItem *>(item);
+ if (crossLine)
+ crossLine->setStrokesGroup(pStrokes);
+
pStrokes->addToGroup(item);
}
@@ -825,14 +833,14 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth)
if (!intersectedPolygons[i].empty())
{
- // intersected polygons generated as QList<QPolygon> QPainterPath::toFillPolygons(),
- // so each intersectedPolygonItem has one or couple of QPolygons who should be removed from it.
+ // intersected polygons generated as QList<QPolygon> QPainterPath::toFillPolygons(),
+ // so each intersectedPolygonItem has one or couple of QPolygons who should be removed from it.
for(int j = 0; j < intersectedPolygons[i].size(); j++)
{
// create small polygon from couple of polygons to replace particular erased polygon
UBGraphicsPolygonItem* polygonItem = new UBGraphicsPolygonItem(intersectedPolygons[i][j], intersectedPolygonItem->parentItem());
- intersectedPolygonItem->copyItemParameters(polygonItem);
+ intersectedPolygonItem->copyItemParameters(polygonItem);
polygonItem->setStroke(intersectedPolygonItem->stroke());
polygonItem->setStrokesGroup(intersectedPolygonItem->strokesGroup());
intersectedPolygonItem->strokesGroup()->addToGroup(polygonItem);
@@ -840,10 +848,30 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth)
}
}
- //remove full polygon item for replace it by couple of polygons who creates the same stroke without a part which intersects with eraser
- mRemovedItems << intersectedPolygonItem;
- intersectedPolygonItem->strokesGroup()->removeFromGroup(intersectedPolygonItem);
+ //remove full polygon item for replace it by couple of polygons which creates the same stroke without a part intersects with eraser
+ mRemovedItems << intersectedPolygonItem;
+
+ QTransform t;
+ bool bApplyTransform = false;
+ if (intersectedPolygonItem->strokesGroup())
+ {
+ if (intersectedPolygonItem->strokesGroup()->parentItem())
+ {
+ bApplyTransform = true;
+ t = intersectedPolygonItem->sceneTransform();
+ }
+ intersectedPolygonItem->strokesGroup()->removeFromGroup(intersectedPolygonItem);
+ }
+
+ removeItem(intersectedPolygonItem);
+ if (bApplyTransform)
+ intersectedPolygonItem->setTransform(t);
+
+
removeItem(intersectedPolygonItem);
+
+ if (bApplyTransform)
+ intersectedPolygonItem->setTransform(t);
}
if (!intersectedItems.empty())
@@ -1484,18 +1512,40 @@ UBGraphicsTextItem* UBGraphicsScene::textForObjectName(const QString& pString, c
textItem->setObjectName(objectName);
}
}
+
if(!textItem){
textItem = addTextWithFont(pString,QPointF(0,0) ,72,UBSettings::settings()->fontFamily(),true,false);
textItem->setObjectName(objectName);
- QSizeF size = textItem->size();
- textItem->setPos(QPointF(-size.width()/2.0,-size.height()/2.0));
textItem->setData(UBGraphicsItemData::ItemEditable,QVariant(false));
+ textItem->adjustSize();
+ textItem->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
+ textItem->setPlainText(pString);
+ }
+ else{
+ textItem->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
+ if (pString == textItem->toPlainText())
+ return textItem;
+
+ QTextCursor curCursor = textItem->textCursor();
+ QFont font = textItem->font();
+ QColor color = curCursor.charFormat().foreground().color();
+
+ textItem->setPlainText(pString);
+ textItem->clearFocus();
+ textItem->setFont(font);
+
+
+ QTextCharFormat format;
+ format.setForeground(QBrush(color));
+ curCursor.mergeCharFormat(format);
+ textItem->setTextCursor(curCursor);
+// textItem->setSelected(true);
+ textItem->contentsChanged();
+
}
- textItem->setPlainText(pString);
- textItem->adjustSize();
textItem->clearFocus();
- textItem->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
+
return textItem;
}
@@ -1862,6 +1912,7 @@ void UBGraphicsScene::addMagnifier(UBMagnifierParams params)
connect(magniferControlViewWidget, SIGNAL(magnifierClose_Signal()), this, SLOT(closeMagnifier()));
connect(magniferControlViewWidget, SIGNAL(magnifierZoomIn_Signal()), this, SLOT(zoomInMagnifier()));
connect(magniferControlViewWidget, SIGNAL(magnifierZoomOut_Signal()), this, SLOT(zoomOutMagnifier()));
+ connect(magniferControlViewWidget, SIGNAL(magnifierDrawingModeChange_Signal(int)), this, SLOT(changeMagnifierMode(int)));
connect(magniferControlViewWidget, SIGNAL(magnifierResized_Signal(qreal)), this, SLOT(resizedMagnifier(qreal)));
setModified(true);
@@ -1928,6 +1979,14 @@ void UBGraphicsScene::zoomOutMagnifier()
}
}
+void UBGraphicsScene::changeMagnifierMode(int mode)
+{
+ if(magniferControlViewWidget)
+ magniferControlViewWidget->setDrawingMode(mode);
+ if(magniferDisplayViewWidget)
+ magniferDisplayViewWidget->setDrawingMode(mode);
+}
+
void UBGraphicsScene::resizedMagnifier(qreal newPercent)
{
if(newPercent > 18 && newPercent < 50)
@@ -2024,14 +2083,22 @@ QList<QUrl> UBGraphicsScene::relativeDependencies() const
while (itItems.hasNext())
{
- UBGraphicsMediaItem *videoItem = qgraphicsitem_cast<UBGraphicsMediaItem*> (itItems.next());
+ QGraphicsItem* item = itItems.next();
+ UBGraphicsMediaItem *videoItem = qgraphicsitem_cast<UBGraphicsMediaItem*> (item);
if (videoItem && videoItem->mediaFileUrl().isRelative())
{
relativePathes << videoItem->mediaFileUrl();
}
+
+ UBGraphicsItem* ubItem = dynamic_cast<UBGraphicsItem*>(item);
+ if(ubItem && ubItem->Delegate()->action() && ubItem->Delegate()->action()->linkType() == eLinkToAudio)
+ relativePathes << QUrl(ubItem->Delegate()->action()->path().replace(document()->persistencePath(),""));
+
}
+ qDebug() << relativePathes;
+
return relativePathes;
}
diff --git a/Sankore-3.1/src/domain/UBGraphicsScene.h b/Sankore-3.1/src/domain/UBGraphicsScene.h
index c7cbc6c..650fd1b 100644
--- a/Sankore-3.1/src/domain/UBGraphicsScene.h
+++ b/Sankore-3.1/src/domain/UBGraphicsScene.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSSCENE_H_
#define UBGRAPHICSSCENE_H_
@@ -337,6 +338,7 @@ public slots:
void closeMagnifier();
void zoomInMagnifier();
void zoomOutMagnifier();
+ void changeMagnifierMode(int mode);
void resizedMagnifier(qreal newPercent);
signals:
diff --git a/Sankore-3.1/src/domain/UBGraphicsStroke.cpp b/Sankore-3.1/src/domain/UBGraphicsStroke.cpp
index c8c89a0..8cf92cb 100644
--- a/Sankore-3.1/src/domain/UBGraphicsStroke.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsStroke.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsStroke.h"
#include "UBGraphicsPolygonItem.h"
diff --git a/Sankore-3.1/src/domain/UBGraphicsStroke.h b/Sankore-3.1/src/domain/UBGraphicsStroke.h
index 70709e3..6d246d7 100644
--- a/Sankore-3.1/src/domain/UBGraphicsStroke.h
+++ b/Sankore-3.1/src/domain/UBGraphicsStroke.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSSTROKE_H_
#define UBGRAPHICSSTROKE_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsStrokesGroup.cpp b/Sankore-3.1/src/domain/UBGraphicsStrokesGroup.cpp
index 925ac82..71b521a 100644
--- a/Sankore-3.1/src/domain/UBGraphicsStrokesGroup.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsStrokesGroup.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,10 +20,20 @@
*/
+
#include "UBGraphicsStrokesGroup.h"
#include "domain/UBGraphicsPolygonItem.h"
+#include "document/UBDocumentProxy.h"
+#include "core/UBApplication.h"
+#include "document/UBDocumentController.h"
+#include "board/UBBoardController.h"
+#include "document/UBDocumentProxy.h"
+#include "customWidgets/UBGraphicsItemAction.h"
+#include "frameworks/UBFileSystemUtils.h"
+#include "core/UBPersistenceManager.h"
+
#include "core/memcheck.h"
UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent)
@@ -33,7 +43,7 @@ UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent)
Delegate()->init();
Delegate()->setFlippable(true);
Delegate()->setRotatable(true);
-
+ Delegate()->setCanTrigAnAction(true);
setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object);
@@ -42,6 +52,7 @@ UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent)
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);
setFlag(QGraphicsItem::ItemIsMovable, true);
+
}
UBGraphicsStrokesGroup::~UBGraphicsStrokesGroup()
@@ -104,14 +115,7 @@ QColor UBGraphicsStrokesGroup::color(colorType pColorType) const
void UBGraphicsStrokesGroup::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
- if (Delegate()->mousePressEvent(event))
- {
- //NOOP
- }
- else
- {
-// QGraphicsItemGroup::mousePressEvent(event);
- }
+ Delegate()->mousePressEvent(event);
}
void UBGraphicsStrokesGroup::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
@@ -134,18 +138,18 @@ void UBGraphicsStrokesGroup::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
UBItem* UBGraphicsStrokesGroup::deepCopy() const
{
- UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup();
+ UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup();
- QTransform groupTransform = transform();
- const_cast<UBGraphicsStrokesGroup*>(this)->resetTransform();
+ QTransform groupTransform = transform();
+ const_cast<UBGraphicsStrokesGroup*>(this)->resetTransform();
- QList<QGraphicsItem*> chl = childItems();
+ QList<QGraphicsItem*> chl = childItems();
- foreach(QGraphicsItem *child, chl)
- {
- UBGraphicsPolygonItem *polygon = dynamic_cast<UBGraphicsPolygonItem*>(child);
+ foreach(QGraphicsItem *child, chl)
+ {
+ UBGraphicsPolygonItem *polygon = dynamic_cast<UBGraphicsPolygonItem*>(child);
- if (polygon){
+ if (polygon){
UBGraphicsPolygonItem *polygonCopy = dynamic_cast<UBGraphicsPolygonItem*>(polygon->deepCopy());
if (polygonCopy)
{
@@ -153,18 +157,18 @@ UBItem* UBGraphicsStrokesGroup::deepCopy() const
copy->addToGroup(pItem);
polygonCopy->setStrokesGroup(copy);
}
- }
+ }
- }
- const_cast<UBGraphicsStrokesGroup*>(this)->setTransform(groupTransform);
- copyItemParameters(copy);
+ }
+ const_cast<UBGraphicsStrokesGroup*>(this)->setTransform(groupTransform);
+ copyItemParameters(copy);
- return copy;
+ return copy;
}
void UBGraphicsStrokesGroup::copyItemParameters(UBItem *copy) const
{
- QGraphicsItem *cp = dynamic_cast<QGraphicsItem*>(copy);
+ QGraphicsItem *cp = dynamic_cast<QGraphicsItem*>(copy);
if(NULL != cp)
{
cp->setTransform(transform());
@@ -205,7 +209,7 @@ QPainterPath UBGraphicsStrokesGroup::shape () const
foreach(QGraphicsItem* item, childItems())
{
path.addPath(item->shape());
- }
+ }
}
return path;
diff --git a/Sankore-3.1/src/domain/UBGraphicsStrokesGroup.h b/Sankore-3.1/src/domain/UBGraphicsStrokesGroup.h
index f7878ce..846051d 100644
--- a/Sankore-3.1/src/domain/UBGraphicsStrokesGroup.h
+++ b/Sankore-3.1/src/domain/UBGraphicsStrokesGroup.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSSTROKESGROUP_H
#define UBGRAPHICSSTROKESGROUP_H
diff --git a/Sankore-3.1/src/domain/UBGraphicsSvgItem.cpp b/Sankore-3.1/src/domain/UBGraphicsSvgItem.cpp
index 89d277a..3a2d95a 100644
--- a/Sankore-3.1/src/domain/UBGraphicsSvgItem.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsSvgItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsSvgItem.h"
#include <QtGui>
@@ -28,6 +29,15 @@
#include "UBGraphicsItemDelegate.h"
#include "UBGraphicsPixmapItem.h"
+#include "document/UBDocumentProxy.h"
+#include "core/UBApplication.h"
+#include "document/UBDocumentController.h"
+#include "board/UBBoardController.h"
+#include "document/UBDocumentProxy.h"
+#include "customWidgets/UBGraphicsItemAction.h"
+#include "frameworks/UBFileSystemUtils.h"
+#include "core/UBPersistenceManager.h"
+
#include "core/memcheck.h"
UBGraphicsSvgItem::UBGraphicsSvgItem(const QString& pFilePath, QGraphicsItem* parent)
@@ -64,6 +74,7 @@ void UBGraphicsSvgItem::init()
Delegate()->init();
Delegate()->setFlippable(true);
Delegate()->setRotatable(true);
+ Delegate()->setCanTrigAnAction(true);
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
@@ -97,6 +108,16 @@ QVariant UBGraphicsSvgItem::itemChange(GraphicsItemChange change, const QVariant
void UBGraphicsSvgItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
+ QMimeData* pMime = new QMimeData();
+ QPixmap pixmap = toPixmapItem()->pixmap();
+ pMime->setImageData(pixmap.toImage());
+ Delegate()->setMimeData(pMime);
+ qreal k = (qreal)pixmap.width() / 100.0;
+
+ QSize newSize((int)(pixmap.width() / k), (int)(pixmap.height() / k));
+
+ Delegate()->setDragPixmap(pixmap.scaled(newSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+
if (Delegate()->mousePressEvent(event))
{
//NOOP
@@ -164,6 +185,14 @@ void UBGraphicsSvgItem::copyItemParameters(UBItem *copy) const
cp->setData(UBGraphicsItemData::ItemLayerType, this->data(UBGraphicsItemData::ItemLayerType));
cp->setData(UBGraphicsItemData::ItemLocked, this->data(UBGraphicsItemData::ItemLocked));
cp->setSourceUrl(this->sourceUrl());
+ if(Delegate()->action()){
+ if(Delegate()->action()->linkType() == eLinkToAudio){
+ UBGraphicsItemPlayAudioAction* action = new UBGraphicsItemPlayAudioAction(Delegate()->action()->path());
+ cp->Delegate()->setAction(action);
+ }
+ else
+ cp->Delegate()->setAction(Delegate()->action());
+ }
}
}
diff --git a/Sankore-3.1/src/domain/UBGraphicsSvgItem.h b/Sankore-3.1/src/domain/UBGraphicsSvgItem.h
index ceb7b1b..ef805bd 100644
--- a/Sankore-3.1/src/domain/UBGraphicsSvgItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsSvgItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSSVGITEM_H_
#define UBGRAPHICSSVGITEM_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsTextItem.cpp b/Sankore-3.1/src/domain/UBGraphicsTextItem.cpp
index eb2465b..6bdaf6f 100644
--- a/Sankore-3.1/src/domain/UBGraphicsTextItem.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsTextItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include "UBGraphicsGroupContainerItem.h"
#include "UBGraphicsTextItem.h"
@@ -33,6 +34,15 @@
#include "board/UBDrawingController.h"
#include "core/UBSettings.h"
+#include "document/UBDocumentProxy.h"
+#include "core/UBApplication.h"
+#include "document/UBDocumentController.h"
+#include "board/UBBoardController.h"
+#include "document/UBDocumentProxy.h"
+#include "customWidgets/UBGraphicsItemAction.h"
+#include "frameworks/UBFileSystemUtils.h"
+#include "core/UBPersistenceManager.h"
+
#include "core/memcheck.h"
QColor UBGraphicsTextItem::lastUsedTextColor;
@@ -49,17 +59,16 @@ UBGraphicsTextItem::UBGraphicsTextItem(QGraphicsItem * parent) :
Delegate()->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing);
Delegate()->setFlippable(false);
Delegate()->setRotatable(true);
+ Delegate()->setCanTrigAnAction(true);
mTypeTextHereLabel = tr("<Type Text Here>");
setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object);
-// setData(UBGraphicsItemData::ItemEditable, QVariant(true));
setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly
setFlag(QGraphicsItem::ItemIsSelectable, true);
-// setFlag(QGraphicsItem::ItemIsMovable, true);
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
setTextInteractionFlags(Qt::TextEditorInteraction);
@@ -90,10 +99,10 @@ QVariant UBGraphicsTextItem::itemChange(GraphicsItemChange change, const QVarian
void UBGraphicsTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
- // scene()->itemAt(pos) returns 0 if pos is not over text, but over text item, but mouse press comes.
- // It is a cludge...
+ // It is a cludge...
if (UBStylusTool::Play == UBDrawingController::drawingController()->stylusTool())
{
+ QGraphicsTextItem::mousePressEvent(event);
event->accept();
clearFocus();
return;
@@ -109,13 +118,13 @@ void UBGraphicsTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem *curItem = group->getCurrentItem();
if (curItem && this != curItem)
- {
- group->deselectCurrentItem();
- }
+ {
+ group->deselectCurrentItem();
+ }
group->setCurrentItem(this);
this->setSelected(true);
Delegate()->positionHandles();
- }
+ }
}
else
@@ -177,10 +186,16 @@ void UBGraphicsTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
void UBGraphicsTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
- // scene()->itemAt(pos) returns 0 if pos is not over text, but over text item, but mouse press comes.
- // It is a cludge...
+ // scene()->itemAt(pos) returns 0 if pos is not over text, but over text item, but mouse press comes.
+ // It is a cludge...
if (UBStylusTool::Play == UBDrawingController::drawingController()->stylusTool())
{
+ QPointF distance = event->pos() - event->lastPos();
+ if( fabs(distance.x()) < 1 && fabs(distance.y()) < 1 )
+ Delegate()->mouseReleaseEvent(event);
+ else
+ QGraphicsTextItem::mouseReleaseEvent(event);
+
event->accept();
clearFocus();
return;
@@ -245,17 +260,21 @@ void UBGraphicsTextItem::copyItemParameters(UBItem *copy) const
cp->setData(UBGraphicsItemData::ItemLayerType, this->data(UBGraphicsItemData::ItemLayerType));
cp->setData(UBGraphicsItemData::ItemLocked, this->data(UBGraphicsItemData::ItemLocked));
cp->setData(UBGraphicsItemData::ItemEditable, data(UBGraphicsItemData::ItemEditable).toBool());
- // cp->setDefaultTextColor(this->defaultTextColor());
- // cp->setFont(this->font());
- // cp->setColorOnDarkBackground(this->colorOnDarkBackground());
- // cp->setColorOnLightBackground(this->colorOnLightBackground());
cp->setTextWidth(this->textWidth());
cp->setTextHeight(this->textHeight());
- cp->setSourceUrl(this->sourceUrl());
+ if(Delegate()->action()){
+ if(Delegate()->action()->linkType() == eLinkToAudio){
+ UBGraphicsItemPlayAudioAction* action = new UBGraphicsItemPlayAudioAction(Delegate()->action()->path());
+ cp->Delegate()->setAction(action);
+ }
+ else
+ cp->Delegate()->setAction(Delegate()->action());
+ }
}
}
+
QRectF UBGraphicsTextItem::boundingRect() const
{
qreal width = textWidth();
diff --git a/Sankore-3.1/src/domain/UBGraphicsTextItem.h b/Sankore-3.1/src/domain/UBGraphicsTextItem.h
index 4f29c4b..06d4133 100644
--- a/Sankore-3.1/src/domain/UBGraphicsTextItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsTextItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSTEXTITEM_H_
#define UBGRAPHICSTEXTITEM_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsTextItemDelegate.cpp b/Sankore-3.1/src/domain/UBGraphicsTextItemDelegate.cpp
index 298887a..7d36b84 100644
--- a/Sankore-3.1/src/domain/UBGraphicsTextItemDelegate.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsTextItemDelegate.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include <QtSvg>
@@ -86,14 +87,8 @@ QFont UBGraphicsTextItemDelegate::createDefaultFont()
textFormat.setFontItalic(true);
QFont font(fFamily, -1, bold ? QFont::Bold : -1, italic);
-// int pixSize = UBSettings::settings()->fontPixelSize();
-// if (pixSize > 0) {
-// mLastFontPixelSize = pixSize;
-// font.setPixelSize(pixSize);
-// }
int pointSize = UBSettings::settings()->fontPointSize();
if (pointSize > 0) {
-// mLastFontPixelSize = pointSize;
font.setPointSize(pointSize);
}
@@ -205,7 +200,9 @@ void UBGraphicsTextItemDelegate::pickFont()
delegated()->setTextCursor(curCursor);
delegated()->setFont(selectedFont);
delegated()->setSelected(true);
- delegated()->document()->adjustSize();
+// disabled and replaced by the next line because of not optimum result (text splits to two lines when that is not necessary)
+// delegated()->adjustSize();
+ delegated()->resize(delegated()->document()->idealWidth(), delegated()->size().height());
delegated()->contentsChanged();
}
}
@@ -226,8 +223,6 @@ void UBGraphicsTextItemDelegate::pickColor()
{
QColor selectedColor = colorDialog.selectedColor();
delegated()->setDefaultTextColor(selectedColor);
-// delegated()->setColorOnDarkBackground(selectedColor);
-// delegated()->setColorOnLightBackground(selectedColor);
QTextCursor curCursor = delegated()->textCursor();
QTextCharFormat format;
format.setForeground(QBrush(selectedColor));
@@ -292,19 +287,20 @@ void UBGraphicsTextItemDelegate::updateMenuActionState()
{
UBGraphicsItemDelegate::updateMenuActionState();
}
+
void UBGraphicsTextItemDelegate::positionHandles()
{
UBGraphicsItemDelegate::positionHandles();
- if (mDelegated->isSelected() || (mDelegated->parentItem() && UBGraphicsGroupContainerItem::Type == mDelegated->parentItem()->type()))
+ if (mDelegated->isSelected() || (mDelegated->parentItem() && UBGraphicsGroupContainerItem::Type == mDelegated->parentItem()->type()))
{
if (mToolBarItem->isVisibleOnBoard())
{
- qreal AntiScaleRatio = 1 / (UBApplication::boardController->systemScaleFactor() * UBApplication::boardController->currentZoom());
+ qreal AntiScaleRatio = 1 / (UBApplication::boardController->systemScaleFactor() * UBApplication::boardController->currentZoom());
mToolBarItem->setScale(AntiScaleRatio);
QRectF toolBarRect = mToolBarItem->rect();
toolBarRect.setWidth(delegated()->boundingRect().width()/AntiScaleRatio);
- mToolBarItem->setRect(toolBarRect);
+ mToolBarItem->setRect(toolBarRect);
mToolBarItem->positionHandles();
mToolBarItem->update();
if (mToolBarItem->isShifting())
@@ -373,16 +369,15 @@ void UBGraphicsTextItemDelegate::ChangeTextSize(qreal factor, textChangeMode cha
// we search continuous blocks of the text with the same PointSize and allpy new settings for them.
cursor.setPosition (startPos, QTextCursor::MoveAnchor);
while(iCursorPos < endPos)
- {
+ {
bEndofTheSameBlock = false;
- iBlockLen = 0;
+ iBlockLen = 0;
cursor.setPosition (iCursorPos+1, QTextCursor::KeepAnchor);
iPointSize = cursor.charFormat().font().pointSize();
-
+ curFont = cursor.charFormat().font();
cursor.setPosition (iCursorPos, QTextCursor::KeepAnchor);
- curFont = cursor.charFormat().font();
do
{
@@ -408,7 +403,6 @@ void UBGraphicsTextItemDelegate::ChangeTextSize(qreal factor, textChangeMode cha
cursor.setPosition (iCursorPos, QTextCursor::MoveAnchor);
}
- delegated()->setFont(curFont);
UBSettings::settings()->setFontPointSize(iPointSize);
//returning initial selection
cursor.setPosition (anchorPos, QTextCursor::MoveAnchor);
diff --git a/Sankore-3.1/src/domain/UBGraphicsTextItemDelegate.h b/Sankore-3.1/src/domain/UBGraphicsTextItemDelegate.h
index ba0d132..8d62c27 100644
--- a/Sankore-3.1/src/domain/UBGraphicsTextItemDelegate.h
+++ b/Sankore-3.1/src/domain/UBGraphicsTextItemDelegate.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSTEXTITEMDELEGATE_H_
#define UBGRAPHICSTEXTITEMDELEGATE_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsTextItemUndoCommand.cpp b/Sankore-3.1/src/domain/UBGraphicsTextItemUndoCommand.cpp
index b391644..879626b 100644
--- a/Sankore-3.1/src/domain/UBGraphicsTextItemUndoCommand.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsTextItemUndoCommand.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsTextItemUndoCommand.h"
#include "UBGraphicsTextItem.h"
diff --git a/Sankore-3.1/src/domain/UBGraphicsTextItemUndoCommand.h b/Sankore-3.1/src/domain/UBGraphicsTextItemUndoCommand.h
index 24991b6..5b1d8c5 100644
--- a/Sankore-3.1/src/domain/UBGraphicsTextItemUndoCommand.h
+++ b/Sankore-3.1/src/domain/UBGraphicsTextItemUndoCommand.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSTEXTITEMUNDOCOMMAND_H_
#define UBGRAPHICSTEXTITEMUNDOCOMMAND_H_
diff --git a/Sankore-3.1/src/domain/UBGraphicsVideoItem.cpp b/Sankore-3.1/src/domain/UBGraphicsVideoItem.cpp
index f1d2d6b..98cdbdb 100644
--- a/Sankore-3.1/src/domain/UBGraphicsVideoItem.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsVideoItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -19,3 +19,4 @@
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
+
diff --git a/Sankore-3.1/src/domain/UBGraphicsVideoItem.h b/Sankore-3.1/src/domain/UBGraphicsVideoItem.h
index f1d2d6b..98cdbdb 100644
--- a/Sankore-3.1/src/domain/UBGraphicsVideoItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsVideoItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -19,3 +19,4 @@
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
+
diff --git a/Sankore-3.1/src/domain/UBGraphicsVideoItemDelegate.cpp b/Sankore-3.1/src/domain/UBGraphicsVideoItemDelegate.cpp
index f1d2d6b..f55fd45 100644
--- a/Sankore-3.1/src/domain/UBGraphicsVideoItemDelegate.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsVideoItemDelegate.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/domain/UBGraphicsVideoItemDelegate.h b/Sankore-3.1/src/domain/UBGraphicsVideoItemDelegate.h
index cdc9499..57a8597 100644
--- a/Sankore-3.1/src/domain/UBGraphicsVideoItemDelegate.h
+++ b/Sankore-3.1/src/domain/UBGraphicsVideoItemDelegate.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,106 +18,107 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBGRAPHICSVIDEOITEMDELEGATE_H_
-#define UBGRAPHICSVIDEOITEMDELEGATE_H_
-
-#include <QtGui>
-#include <phonon/MediaObject>
-
-#include "core/UB.h"
-#include "UBGraphicsItemDelegate.h"
-
-class QGraphicsSceneMouseEvent;
-class QGraphicsItem;
-class UBGraphicsVideoItem;
-
-class DelegateVideoControl: public QGraphicsRectItem
-{
- public:
-
- DelegateVideoControl(UBGraphicsVideoItem* pDelegated, QGraphicsItem * parent = 0);
-
- virtual ~DelegateVideoControl()
- {
- // NOOP
- }
-
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
- QWidget *widget);
-
- QPainterPath shape() const;
-
- void setAntiScale(qreal antiScale){ mAntiScale = antiScale; }
-
- virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
- virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-
- void updateTicker(qint64 time);
- void totalTimeChanged( qint64 newTotalTime);
-
- protected:
-
-
- void seekToMousePos(QPointF mousePos);
-
- UBGraphicsVideoItem* mDelegate;
- bool mDisplayCurrentTime;
-
- qreal mAntiScale;
- qint64 mCurrentTimeInMs;
- qint64 mTotalTimeInMs;
-
- private:
- int mStartWidth;
- QRectF mBalloon;
-};
-
-
-class UBGraphicsVideoItemDelegate : public UBGraphicsItemDelegate
-{
- Q_OBJECT
-
- public:
- UBGraphicsVideoItemDelegate(UBGraphicsVideoItem* pDelegated, Phonon::MediaObject* pMedia, QObject * parent = 0);
- virtual ~UBGraphicsVideoItemDelegate();
-
- virtual void positionHandles();
-
- public slots:
-
- void toggleMute();
- void updateTicker(qint64 time);
-
- protected slots:
-
- virtual void remove(bool canUndo = true);
-
- void togglePlayPause();
-
- void mediaStateChanged ( Phonon::State newstate, Phonon::State oldstate );
-
- void updatePlayPauseState();
-
- void totalTimeChanged( qint64 newTotalTime);
-
- protected:
-
- virtual void buildButtons();
-
- private:
-
- UBGraphicsVideoItem* delegated();
-
- DelegateButton* mPlayPauseButton;
- DelegateButton* mStopButton;
- DelegateButton* mMuteButton;
- DelegateVideoControl *mVideoControl;
-
- Phonon::MediaObject* mMedia;
-};
-
-
-#endif /* UBGRAPHICSVIDEOITEMDELEGATE_H_ */
+
+
+
+#ifndef UBGRAPHICSVIDEOITEMDELEGATE_H_
+#define UBGRAPHICSVIDEOITEMDELEGATE_H_
+
+#include <QtGui>
+#include <phonon/MediaObject>
+
+#include "core/UB.h"
+#include "UBGraphicsItemDelegate.h"
+
+class QGraphicsSceneMouseEvent;
+class QGraphicsItem;
+class UBGraphicsVideoItem;
+
+class DelegateVideoControl: public QGraphicsRectItem
+{
+ public:
+
+ DelegateVideoControl(UBGraphicsVideoItem* pDelegated, QGraphicsItem * parent = 0);
+
+ virtual ~DelegateVideoControl()
+ {
+ // NOOP
+ }
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
+ QWidget *widget);
+
+ QPainterPath shape() const;
+
+ void setAntiScale(qreal antiScale){ mAntiScale = antiScale; }
+
+ virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
+ virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
+
+ void updateTicker(qint64 time);
+ void totalTimeChanged( qint64 newTotalTime);
+
+ protected:
+
+
+ void seekToMousePos(QPointF mousePos);
+
+ UBGraphicsVideoItem* mDelegate;
+ bool mDisplayCurrentTime;
+
+ qreal mAntiScale;
+ qint64 mCurrentTimeInMs;
+ qint64 mTotalTimeInMs;
+
+ private:
+ int mStartWidth;
+ QRectF mBalloon;
+};
+
+
+class UBGraphicsVideoItemDelegate : public UBGraphicsItemDelegate
+{
+ Q_OBJECT
+
+ public:
+ UBGraphicsVideoItemDelegate(UBGraphicsVideoItem* pDelegated, Phonon::MediaObject* pMedia, QObject * parent = 0);
+ virtual ~UBGraphicsVideoItemDelegate();
+
+ virtual void positionHandles();
+
+ public slots:
+
+ void toggleMute();
+ void updateTicker(qint64 time);
+
+ protected slots:
+
+ virtual void remove(bool canUndo = true);
+
+ void togglePlayPause();
+
+ void mediaStateChanged ( Phonon::State newstate, Phonon::State oldstate );
+
+ void updatePlayPauseState();
+
+ void totalTimeChanged( qint64 newTotalTime);
+
+ protected:
+
+ virtual void buildButtons();
+
+ private:
+
+ UBGraphicsVideoItem* delegated();
+
+ DelegateButton* mPlayPauseButton;
+ DelegateButton* mStopButton;
+ DelegateButton* mMuteButton;
+ DelegateVideoControl *mVideoControl;
+
+ Phonon::MediaObject* mMedia;
+};
+
+
+#endif /* UBGRAPHICSVIDEOITEMDELEGATE_H_ */
diff --git a/Sankore-3.1/src/domain/UBGraphicsWidgetItem.cpp b/Sankore-3.1/src/domain/UBGraphicsWidgetItem.cpp
index 4372d27..1587141 100644
--- a/Sankore-3.1/src/domain/UBGraphicsWidgetItem.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsWidgetItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtNetwork>
#include <QtXml>
@@ -608,7 +609,9 @@ void UBGraphicsWidgetItem::mainFrameLoadFinished (bool ok)
{
mLoadIsErronous = !ok;
update(boundingRect());
- takeSnapshot();
+
+ if (mInitialLoadDone && scene() && scene()->renderingContext() == UBGraphicsScene::Screen)
+ takeSnapshot();
}
void UBGraphicsWidgetItem::wheelEvent(QGraphicsSceneWheelEvent *event)
@@ -643,8 +646,11 @@ void UBGraphicsWidgetItem::resize(qreal w, qreal h)
void UBGraphicsWidgetItem::resize(const QSizeF & pSize)
{
if (pSize != size()) {
- QGraphicsWebView::setMaximumSize(pSize.width(), pSize.height());
- QGraphicsWebView::resize(pSize.width(), pSize.height());
+ qreal w = qMax((qreal)mMinimumSize.width(), pSize.width());
+ qreal h = qMax((qreal)mMinimumSize.height(), pSize.height());
+ QGraphicsWebView::setMaximumSize(w, h);
+ QGraphicsWebView::page()->setViewportSize(QSize(w, h));
+ QGraphicsWebView::resize(QSizeF(w, h));
if (Delegate())
Delegate()->positionHandles();
if (scene())
@@ -764,6 +770,8 @@ UBGraphicsW3CWidgetItem::UBGraphicsW3CWidgetItem(const QUrl& pWidgetUrl, QGraphi
int width = 300;
int height = 150;
+ int minWidth = 10;
+ int minHeight = 10;
QFile configFile(path + "config.xml");
configFile.open(QFile::ReadOnly);
@@ -778,6 +786,9 @@ UBGraphicsW3CWidgetItem::UBGraphicsW3CWidgetItem(const QUrl& pWidgetUrl, QGraphi
width = widgetElement.attribute("width", "300").toInt();
height = widgetElement.attribute("height", "150").toInt();
+ minWidth = widgetElement.attribute("minimum_width", "10").toInt();
+ minHeight = widgetElement.attribute("minimum_height", "10").toInt();
+
mMetadatas.id = widgetElement.attribute("id", "");
/* some early widget (<= 4.3.4) where using identifier instead of id */
@@ -885,6 +896,7 @@ UBGraphicsW3CWidgetItem::UBGraphicsW3CWidgetItem(const QUrl& pWidgetUrl, QGraphi
setMaximumSize(QSize(width, height));
+ mMinimumSize = QSize(minWidth, minHeight);
mNominalSize = QSize(width, height);
initialize();
@@ -923,7 +935,7 @@ UBGraphicsW3CWidgetItem::Metadata UBGraphicsW3CWidgetItem::metadatas() const
QString UBGraphicsW3CWidgetItem::createNPAPIWrapper(const QString& url, const QString& pMimeType, const QSize& sizeHint, const QString& pName)
{
- const QString userWidgetPath = UBSettings::settings()->userInteractiveDirectory() + "/" + tr("Web");
+ const QString userWidgetPath = UBSettings::settings()->userWidgetPath();
QDir userWidgetDir(userWidgetPath);
return createNPAPIWrapperInDir(url, userWidgetDir, pMimeType, sizeHint, pName);
@@ -1141,6 +1153,8 @@ void UBGraphicsW3CWidgetItem::loadNPAPIWrappersTemplates()
QDir etcDir(etcPath);
+ qDebug() << etcDir.entryList().count();
+
foreach(QString fileName, etcDir.entryList()) {
if (fileName.startsWith("npapi-wrapper") && (fileName.endsWith(".htm") || fileName.endsWith(".html"))) {
diff --git a/Sankore-3.1/src/domain/UBGraphicsWidgetItem.h b/Sankore-3.1/src/domain/UBGraphicsWidgetItem.h
index fd5a224..2dac676 100644
--- a/Sankore-3.1/src/domain/UBGraphicsWidgetItem.h
+++ b/Sankore-3.1/src/domain/UBGraphicsWidgetItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSWIDGETITEM_H
#define UBGRAPHICSWIDGETITEM_H
@@ -141,6 +142,7 @@ class UBGraphicsWidgetItem : public QGraphicsWebView, public UBItem, public UBRe
int mCanBeContent;
int mCanBeTool;
QSize mNominalSize;
+ QSize mMinimumSize;
QString mMainHtmlFileName;
QUrl mMainHtmlUrl;
QUrl mWidgetUrl;
diff --git a/Sankore-3.1/src/domain/UBGraphicsWidgetItemDelegate.cpp b/Sankore-3.1/src/domain/UBGraphicsWidgetItemDelegate.cpp
index 963dc1b..840da66 100644
--- a/Sankore-3.1/src/domain/UBGraphicsWidgetItemDelegate.cpp
+++ b/Sankore-3.1/src/domain/UBGraphicsWidgetItemDelegate.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include <QtSvg>
diff --git a/Sankore-3.1/src/domain/UBGraphicsWidgetItemDelegate.h b/Sankore-3.1/src/domain/UBGraphicsWidgetItemDelegate.h
index b40307f..642dbfe 100644
--- a/Sankore-3.1/src/domain/UBGraphicsWidgetItemDelegate.h
+++ b/Sankore-3.1/src/domain/UBGraphicsWidgetItemDelegate.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSWIDGETITEMDELEGATE_H_
#define UBGRAPHICSWIDGETITEMDELEGATE_H_
diff --git a/Sankore-3.1/src/domain/UBItem.cpp b/Sankore-3.1/src/domain/UBItem.cpp
index 7f672d6..f73864f 100644
--- a/Sankore-3.1/src/domain/UBItem.cpp
+++ b/Sankore-3.1/src/domain/UBItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBItem.h"
#include "core/memcheck.h"
@@ -79,6 +80,11 @@ QUuid UBGraphicsItem::getOwnUuid(QGraphicsItem *item)
return idCandidate == QUuid().toString() ? QUuid() : QUuid(idCandidate);
}
+qreal UBGraphicsItem::getOwnZValue(QGraphicsItem *item)
+{
+ return item->data(UBGraphicsItemData::ItemOwnZValue).toReal();
+}
+
void UBGraphicsItem::remove(bool canUndo)
{
if (Delegate())
diff --git a/Sankore-3.1/src/domain/UBItem.h b/Sankore-3.1/src/domain/UBItem.h
index bbf7cfb..ca1c3af 100644
--- a/Sankore-3.1/src/domain/UBItem.h
+++ b/Sankore-3.1/src/domain/UBItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBITEM_H
#define UBITEM_H
@@ -115,6 +116,7 @@ public:
static bool isRotatable(QGraphicsItem *item);
static bool isFlippable(QGraphicsItem *item);
static QUuid getOwnUuid(QGraphicsItem *item);
+ static qreal getOwnZValue(QGraphicsItem *item);
static UBGraphicsItemDelegate *Delegate(QGraphicsItem *pItem);
diff --git a/Sankore-3.1/src/domain/UBPageSizeUndoCommand.cpp b/Sankore-3.1/src/domain/UBPageSizeUndoCommand.cpp
index 0445745..adde99e 100644
--- a/Sankore-3.1/src/domain/UBPageSizeUndoCommand.cpp
+++ b/Sankore-3.1/src/domain/UBPageSizeUndoCommand.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBPageSizeUndoCommand.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/domain/UBPageSizeUndoCommand.h b/Sankore-3.1/src/domain/UBPageSizeUndoCommand.h
index b184350..35e46bd 100644
--- a/Sankore-3.1/src/domain/UBPageSizeUndoCommand.h
+++ b/Sankore-3.1/src/domain/UBPageSizeUndoCommand.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBPageSizeUndoCommand_H_
#define UBPageSizeUndoCommand_H_
diff --git a/Sankore-3.1/src/domain/UBResizableGraphicsItem.cpp b/Sankore-3.1/src/domain/UBResizableGraphicsItem.cpp
index 6dd2b79..a16884c 100644
--- a/Sankore-3.1/src/domain/UBResizableGraphicsItem.cpp
+++ b/Sankore-3.1/src/domain/UBResizableGraphicsItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBResizableGraphicsItem.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/domain/UBResizableGraphicsItem.h b/Sankore-3.1/src/domain/UBResizableGraphicsItem.h
index f2972a4..74f4ed8 100644
--- a/Sankore-3.1/src/domain/UBResizableGraphicsItem.h
+++ b/Sankore-3.1/src/domain/UBResizableGraphicsItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBRESIZABLEGRAPHICSITEM_H_
#define UBRESIZABLEGRAPHICSITEM_H_
diff --git a/Sankore-3.1/src/frameworks/MacUtils.h b/Sankore-3.1/src/frameworks/MacUtils.h
index 5d7ea4f..2a33227 100644
--- a/Sankore-3.1/src/frameworks/MacUtils.h
+++ b/Sankore-3.1/src/frameworks/MacUtils.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/frameworks/UBBase32.cpp b/Sankore-3.1/src/frameworks/UBBase32.cpp
index 1b63f3f..0dc02f4 100644
--- a/Sankore-3.1/src/frameworks/UBBase32.cpp
+++ b/Sankore-3.1/src/frameworks/UBBase32.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBBase32.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/frameworks/UBBase32.h b/Sankore-3.1/src/frameworks/UBBase32.h
index fa28a0d..dbbc64f 100644
--- a/Sankore-3.1/src/frameworks/UBBase32.h
+++ b/Sankore-3.1/src/frameworks/UBBase32.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBBASE32_H_
#define UBBASE32_H_
diff --git a/Sankore-3.1/src/frameworks/UBCoreGraphicsScene.cpp b/Sankore-3.1/src/frameworks/UBCoreGraphicsScene.cpp
index 100b136..96769dd 100644
--- a/Sankore-3.1/src/frameworks/UBCoreGraphicsScene.cpp
+++ b/Sankore-3.1/src/frameworks/UBCoreGraphicsScene.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBCoreGraphicsScene.h"
#include "domain/UBGraphicsMediaItem.h"
@@ -39,15 +40,9 @@ UBCoreGraphicsScene::~UBCoreGraphicsScene()
{
//we must delete removed items that are no more in any scene
//at groups deleting some items can be added to mItemsToDelete, so we need to use iterators.
- foreach(QGraphicsItem* item, mItemsToDelete)
- {
- if (item)
- {
- if (item->scene() == NULL || item->scene() == this)
- {
- delete item;
- }
- }
+ foreach(QGraphicsItem* item, mItemsToDelete){
+ if (item && item->type() != UBGraphicsItemType::PolygonItemType && item->type() != QGraphicsItem::UserType && item->type() != UBGraphicsItemType::groupContainerType && (item->scene() == NULL || item->scene() == this))
+ delete item;
}
mItemsToDelete.clear();
}
@@ -61,7 +56,7 @@ void UBCoreGraphicsScene::addItem(QGraphicsItem* item)
removeItemFromDeletion(curItem);
}
}
-
+
if (item->scene() != this)
QGraphicsScene::addItem(item);
@@ -74,7 +69,7 @@ void UBCoreGraphicsScene::removeItem(QGraphicsItem* item, bool forceDelete)
QGraphicsScene::removeItem(item);
if (forceDelete)
{
- qDebug() << "force delete is " << forceDelete;
+// qDebug() << "force delete is " << forceDelete;
deleteItem(item);
}
setModified(true);
diff --git a/Sankore-3.1/src/frameworks/UBCoreGraphicsScene.h b/Sankore-3.1/src/frameworks/UBCoreGraphicsScene.h
index 87f52df..6537a9e 100644
--- a/Sankore-3.1/src/frameworks/UBCoreGraphicsScene.h
+++ b/Sankore-3.1/src/frameworks/UBCoreGraphicsScene.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBCOREGRAPHICSSCENE_H_
#define UBCOREGRAPHICSSCENE_H_
@@ -27,6 +28,8 @@
class UBCoreGraphicsScene : public QGraphicsScene
{
+ Q_OBJECT
+
public:
UBCoreGraphicsScene(QObject * parent = 0);
virtual ~UBCoreGraphicsScene();
diff --git a/Sankore-3.1/src/frameworks/UBCryptoUtils.cpp b/Sankore-3.1/src/frameworks/UBCryptoUtils.cpp
index 46e130f..b5df8cc 100644
--- a/Sankore-3.1/src/frameworks/UBCryptoUtils.cpp
+++ b/Sankore-3.1/src/frameworks/UBCryptoUtils.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBCryptoUtils.h"
#include <openssl/aes.h>
diff --git a/Sankore-3.1/src/frameworks/UBCryptoUtils.h b/Sankore-3.1/src/frameworks/UBCryptoUtils.h
index 48951c7..c286f70 100644
--- a/Sankore-3.1/src/frameworks/UBCryptoUtils.h
+++ b/Sankore-3.1/src/frameworks/UBCryptoUtils.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBCRYPTOUTILS_H_
#define UBCRYPTOUTILS_H_
diff --git a/Sankore-3.1/src/frameworks/UBFileSystemUtils.cpp b/Sankore-3.1/src/frameworks/UBFileSystemUtils.cpp
index 06633e9..2c2b96f 100644
--- a/Sankore-3.1/src/frameworks/UBFileSystemUtils.cpp
+++ b/Sankore-3.1/src/frameworks/UBFileSystemUtils.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBFileSystemUtils.h"
#include <QtGui>
@@ -472,6 +473,8 @@ QString UBFileSystemUtils::mimeTypeFromFileName(const QString& fileName)
// Apple widget
if (ext == "wdgt") return "application/vnd.apple-widget"; //mime type invented by us :-(
if (ext == "swf") return "application/x-shockwave-flash";
+ if (ext == "bkm") return "internal/bookmark";
+ if (ext == "lnk") return "internal/link";
return "";
@@ -545,6 +548,8 @@ QString UBFileSystemUtils::fileExtensionFromMimeType(const QString& pMimeType)
if (pMimeType == "application/widget") return "wgt";
if (pMimeType == "application/vnd.apple-widget") return "wdgt"; //mime type invented by us :-(
if (pMimeType == "application/x-shockwave-flash") return "swf";
+ if (pMimeType == "internal/bookmark") return "bkm";
+ if (pMimeType == "internal/link") return "lnk";
return "";
@@ -595,7 +600,18 @@ UBMimeType::Enum UBFileSystemUtils::mimeTypeFromString(const QString& typeString
{
type = UBMimeType::UniboardTool;
}
-
+ else if (typeString.startsWith("internal/bookmark"))
+ {
+ type = UBMimeType::Bookmark;
+ }
+ else if (typeString.startsWith("internal/link"))
+ {
+ type = UBMimeType::Link;
+ }
+ else if (typeString.startsWith("text/html"))
+ {
+ type = UBMimeType::Web;
+ }
return type;
}
diff --git a/Sankore-3.1/src/frameworks/UBFileSystemUtils.h b/Sankore-3.1/src/frameworks/UBFileSystemUtils.h
index dea35b5..70f543f 100644
--- a/Sankore-3.1/src/frameworks/UBFileSystemUtils.h
+++ b/Sankore-3.1/src/frameworks/UBFileSystemUtils.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBFILESYSTEMUTILS_H_
#define UBFILESYSTEMUTILS_H_
diff --git a/Sankore-3.1/src/frameworks/UBGeometryUtils.cpp b/Sankore-3.1/src/frameworks/UBGeometryUtils.cpp
index 577115c..d8da926 100644
--- a/Sankore-3.1/src/frameworks/UBGeometryUtils.cpp
+++ b/Sankore-3.1/src/frameworks/UBGeometryUtils.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,221 +18,222 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBGeometryUtils.h"
-
-#include "core/memcheck.h"
-
-const double PI = 4.0 * atan(1.0);
-const int UBGeometryUtils::centimeterGraduationHeight = 15;
-const int UBGeometryUtils::halfCentimeterGraduationHeight = 10;
-const int UBGeometryUtils::millimeterGraduationHeight = 5;
-const int UBGeometryUtils::millimetersPerCentimeter = 10;
-const int UBGeometryUtils::millimetersPerHalfCentimeter = 5;
-const float UBGeometryUtils::inchSize = 25.4f;
-
-UBGeometryUtils::UBGeometryUtils()
-{
- // NOOP
-}
-
-UBGeometryUtils::~UBGeometryUtils()
-{
- // NOOP
-}
-
-QPolygonF UBGeometryUtils::lineToPolygon(const QLineF& pLine, const qreal& pWidth)
-{
- qreal x1 = pLine.x1();
- qreal y1 = pLine.y1();
-
- qreal x2 = pLine.x2();
- qreal y2 = pLine.y2();
-
- qreal alpha = (90.0 - pLine.angle()) * PI / 180.0;
- qreal hypothenuse = pWidth / 2;
-
- // TODO UB 4.x PERF cache sin/cos table
- qreal opposite = sin(alpha) * hypothenuse;
- qreal adjacent = cos(alpha) * hypothenuse;
-
- QPointF p1a(x1 - adjacent, y1 - opposite);
- QPointF p1b(x1 + adjacent, y1 + opposite);
-
- QPointF p2a(x2 - adjacent, y2 - opposite);
- QPointF p2b(x2 + adjacent, y2 + opposite);
-
- QPainterPath painterPath;
-
- painterPath.moveTo(p1a);
- painterPath.lineTo(p2a);
-
- painterPath.arcTo(x2 - hypothenuse, y2 - hypothenuse, pWidth, pWidth, (90.0 + pLine.angle()), -180.0);
-
- //painterPath.lineTo(p2b);
- painterPath.lineTo(p1b);
-
- painterPath.arcTo(x1 - hypothenuse, y1 - hypothenuse, pWidth, pWidth, -1 * (90.0 - pLine.angle()), -180.0);
-
- painterPath.closeSubpath();
-
- return painterPath.toFillPolygon();
-}
-
-QPolygonF UBGeometryUtils::lineToPolygon(const QPointF& pStart, const QPointF& pEnd,
- const qreal& pStartWidth, const qreal& pEndWidth)
-{
-
- qreal x1 = pStart.x();
- qreal y1 = pStart.y();
-
- qreal x2 = pEnd.x();
- qreal y2 = pEnd.y();
-
- QLineF line(pStart, pEnd);
-
- qreal alpha = (90.0 - line.angle()) * PI / 180.0;
- qreal hypothenuseStart = pStartWidth / 2;
-
- qreal hypothenuseEnd = pEndWidth / 2;
-
- qreal sinAlpha = sin(alpha);
- qreal cosAlpha = cos(alpha);
-
- // TODO UB 4.x PERF cache sin/cos table
- qreal oppositeStart = sinAlpha * hypothenuseStart;
- qreal adjacentStart = cosAlpha * hypothenuseStart;
-
- QPointF p1a(x1 - adjacentStart, y1 - oppositeStart);
- QPointF p1b(x1 + adjacentStart, y1 + oppositeStart);
-
- qreal oppositeEnd = sinAlpha * hypothenuseEnd;
- qreal adjacentEnd = cosAlpha * hypothenuseEnd;
-
- QPointF p2a(x2 - adjacentEnd, y2 - oppositeEnd);
-
- QPainterPath painterPath;
-
- painterPath.moveTo(p1a);
- painterPath.lineTo(p2a);
-
- painterPath.arcTo(x2 - hypothenuseEnd, y2 - hypothenuseEnd, pEndWidth, pEndWidth, (90.0 + line.angle()), -180.0);
-
- painterPath.lineTo(p1b);
-
- painterPath.arcTo(x1 - hypothenuseStart, y1 - hypothenuseStart, pStartWidth, pStartWidth, -1 * (90.0 - line.angle()), -180.0);
-
- painterPath.closeSubpath();
-
- return painterPath.toFillPolygon();
-}
-
-QPolygonF UBGeometryUtils::arcToPolygon(const QLineF& startRadius, qreal spanAngleInDegrees, qreal width)
-{
- qreal startAngleInDegrees = - startRadius.angle();
- if (startAngleInDegrees > 180)
- startAngleInDegrees -= 360;
- else if (startAngleInDegrees < -180)
- startAngleInDegrees += 360;
-
- qreal radiusLength = startRadius.length();
- qreal angle = 2 * asin(width / (2 * radiusLength)) * 180 / PI;
- bool overlap = abs(spanAngleInDegrees) > 360 - angle;
- if (overlap)
- spanAngleInDegrees = spanAngleInDegrees < 0 ? -360 : 360;
-
- qreal endAngleInDegrees = startAngleInDegrees + spanAngleInDegrees;
-
- qreal innerRadius = radiusLength - width / 2;
- QRectF innerSquare(
- startRadius.p1().x() - innerRadius,
- startRadius.p1().y() - innerRadius,
- 2 * innerRadius,
- 2 * innerRadius);
- qreal outerRadius = radiusLength + width / 2;
- QRectF outerSquare(
- startRadius.p1().x() - outerRadius,
- startRadius.p1().y() - outerRadius,
- 2 * outerRadius,
- 2 * outerRadius);
- QRectF startSquare(
- startRadius.p2().x() - width / 2,
- startRadius.p2().y() - width / 2,
- width,
- width);
- QRectF endSquare(
- startRadius.p1().x() + radiusLength * cos(endAngleInDegrees * PI / 180.0) - width / 2,
- startRadius.p1().y() + radiusLength * sin(endAngleInDegrees * PI / 180.0) - width / 2,
- width,
- width);
-
- QPainterPath painterPath(
- QPointF(
- startRadius.p1().x() + innerRadius * cos(startAngleInDegrees * PI / 180.0),
- startRadius.p1().y() + innerRadius * sin(startAngleInDegrees * PI / 180.0)));
- startAngleInDegrees = - startAngleInDegrees;
- endAngleInDegrees = - endAngleInDegrees;
- spanAngleInDegrees = - spanAngleInDegrees;
-
- if (overlap)
- {
- painterPath.addEllipse(outerSquare);
- QPainterPath innerPainterPath;
- innerPainterPath.addEllipse(innerSquare);
- painterPath = painterPath.subtracted(innerPainterPath);
- }
- else
- {
- painterPath.arcTo(innerSquare, startAngleInDegrees, spanAngleInDegrees);
- painterPath.arcTo(endSquare, 180.0 + endAngleInDegrees, spanAngleInDegrees > 0 ? -180.0 : 180.0);
- painterPath.arcTo(outerSquare, endAngleInDegrees, - spanAngleInDegrees);
- painterPath.arcTo(startSquare, startAngleInDegrees, spanAngleInDegrees > 0 ? -180.0 : 180.0);
- painterPath.closeSubpath();
- }
-
- return painterPath.toFillPolygon();
-}
-
-QPointF UBGeometryUtils::pointConstrainedInRect(QPointF point, QRectF rect)
-{
- return QPointF(qMax(rect.x(), qMin(rect.x() + rect.width(), point.x())), qMax(rect.y(), qMin(rect.y() + rect.height(), point.y())));
-}
-
-
-QPoint UBGeometryUtils::pointConstrainedInRect(QPoint point, QRect rect)
-{
- return QPoint(qMax(rect.x(), qMin(rect.x() + rect.width(), point.x())), qMax(rect.y(), qMin(rect.y() + rect.height(), point.y())));
-}
-
-
-QRectF UBGeometryUtils::lineToInnerRect(const QLineF& pLine, const qreal& pWidth)
-{
- qreal centerX = (pLine.x1() + pLine.x2()) / 2;
- qreal centerY = (pLine.y1() + pLine.y2()) / 2;
-
- // Please put a fucking comment here
- qreal side = sqrt((pWidth * pWidth) / 2);
- qreal halfSide = side / 2;
-
- return QRectF(centerX - halfSide, centerY - halfSide, side, side);
-}
-
-
-void UBGeometryUtils::crashPointList(QVector<QPointF> &points)
-{
- // QVector<QPointF> result(points);
- int position = 1;
-
- while(position < points.size())
- {
- if (points.at(position) == points.at(position - 1))
- {
- points.remove(position);
- }
- else
- {
- ++position;
- }
- }
-}
+
+
+
+#include "UBGeometryUtils.h"
+
+#include "core/memcheck.h"
+
+const double PI = 4.0 * atan(1.0);
+const int UBGeometryUtils::centimeterGraduationHeight = 15;
+const int UBGeometryUtils::halfCentimeterGraduationHeight = 10;
+const int UBGeometryUtils::millimeterGraduationHeight = 5;
+const int UBGeometryUtils::millimetersPerCentimeter = 10;
+const int UBGeometryUtils::millimetersPerHalfCentimeter = 5;
+const float UBGeometryUtils::inchSize = 25.4f;
+
+UBGeometryUtils::UBGeometryUtils()
+{
+ // NOOP
+}
+
+UBGeometryUtils::~UBGeometryUtils()
+{
+ // NOOP
+}
+
+QPolygonF UBGeometryUtils::lineToPolygon(const QLineF& pLine, const qreal& pWidth)
+{
+ qreal x1 = pLine.x1();
+ qreal y1 = pLine.y1();
+
+ qreal x2 = pLine.x2();
+ qreal y2 = pLine.y2();
+
+ qreal alpha = (90.0 - pLine.angle()) * PI / 180.0;
+ qreal hypothenuse = pWidth / 2;
+
+ // TODO UB 4.x PERF cache sin/cos table
+ qreal opposite = sin(alpha) * hypothenuse;
+ qreal adjacent = cos(alpha) * hypothenuse;
+
+ QPointF p1a(x1 - adjacent, y1 - opposite);
+ QPointF p1b(x1 + adjacent, y1 + opposite);
+
+ QPointF p2a(x2 - adjacent, y2 - opposite);
+ QPointF p2b(x2 + adjacent, y2 + opposite);
+
+ QPainterPath painterPath;
+
+ painterPath.moveTo(p1a);
+ painterPath.lineTo(p2a);
+
+ painterPath.arcTo(x2 - hypothenuse, y2 - hypothenuse, pWidth, pWidth, (90.0 + pLine.angle()), -180.0);
+
+ //painterPath.lineTo(p2b);
+ painterPath.lineTo(p1b);
+
+ painterPath.arcTo(x1 - hypothenuse, y1 - hypothenuse, pWidth, pWidth, -1 * (90.0 - pLine.angle()), -180.0);
+
+ painterPath.closeSubpath();
+
+ return painterPath.toFillPolygon();
+}
+
+QPolygonF UBGeometryUtils::lineToPolygon(const QPointF& pStart, const QPointF& pEnd,
+ const qreal& pStartWidth, const qreal& pEndWidth)
+{
+
+ qreal x1 = pStart.x();
+ qreal y1 = pStart.y();
+
+ qreal x2 = pEnd.x();
+ qreal y2 = pEnd.y();
+
+ QLineF line(pStart, pEnd);
+
+ qreal alpha = (90.0 - line.angle()) * PI / 180.0;
+ qreal hypothenuseStart = pStartWidth / 2;
+
+ qreal hypothenuseEnd = pEndWidth / 2;
+
+ qreal sinAlpha = sin(alpha);
+ qreal cosAlpha = cos(alpha);
+
+ // TODO UB 4.x PERF cache sin/cos table
+ qreal oppositeStart = sinAlpha * hypothenuseStart;
+ qreal adjacentStart = cosAlpha * hypothenuseStart;
+
+ QPointF p1a(x1 - adjacentStart, y1 - oppositeStart);
+ QPointF p1b(x1 + adjacentStart, y1 + oppositeStart);
+
+ qreal oppositeEnd = sinAlpha * hypothenuseEnd;
+ qreal adjacentEnd = cosAlpha * hypothenuseEnd;
+
+ QPointF p2a(x2 - adjacentEnd, y2 - oppositeEnd);
+
+ QPainterPath painterPath;
+
+ painterPath.moveTo(p1a);
+ painterPath.lineTo(p2a);
+
+ painterPath.arcTo(x2 - hypothenuseEnd, y2 - hypothenuseEnd, pEndWidth, pEndWidth, (90.0 + line.angle()), -180.0);
+
+ painterPath.lineTo(p1b);
+
+ painterPath.arcTo(x1 - hypothenuseStart, y1 - hypothenuseStart, pStartWidth, pStartWidth, -1 * (90.0 - line.angle()), -180.0);
+
+ painterPath.closeSubpath();
+
+ return painterPath.toFillPolygon();
+}
+
+QPolygonF UBGeometryUtils::arcToPolygon(const QLineF& startRadius, qreal spanAngleInDegrees, qreal width)
+{
+ qreal startAngleInDegrees = - startRadius.angle();
+ if (startAngleInDegrees > 180)
+ startAngleInDegrees -= 360;
+ else if (startAngleInDegrees < -180)
+ startAngleInDegrees += 360;
+
+ qreal radiusLength = startRadius.length();
+ qreal angle = 2 * asin(width / (2 * radiusLength)) * 180 / PI;
+ bool overlap = abs(spanAngleInDegrees) > 360 - angle;
+ if (overlap)
+ spanAngleInDegrees = spanAngleInDegrees < 0 ? -360 : 360;
+
+ qreal endAngleInDegrees = startAngleInDegrees + spanAngleInDegrees;
+
+ qreal innerRadius = radiusLength - width / 2;
+ QRectF innerSquare(
+ startRadius.p1().x() - innerRadius,
+ startRadius.p1().y() - innerRadius,
+ 2 * innerRadius,
+ 2 * innerRadius);
+ qreal outerRadius = radiusLength + width / 2;
+ QRectF outerSquare(
+ startRadius.p1().x() - outerRadius,
+ startRadius.p1().y() - outerRadius,
+ 2 * outerRadius,
+ 2 * outerRadius);
+ QRectF startSquare(
+ startRadius.p2().x() - width / 2,
+ startRadius.p2().y() - width / 2,
+ width,
+ width);
+ QRectF endSquare(
+ startRadius.p1().x() + radiusLength * cos(endAngleInDegrees * PI / 180.0) - width / 2,
+ startRadius.p1().y() + radiusLength * sin(endAngleInDegrees * PI / 180.0) - width / 2,
+ width,
+ width);
+
+ QPainterPath painterPath(
+ QPointF(
+ startRadius.p1().x() + innerRadius * cos(startAngleInDegrees * PI / 180.0),
+ startRadius.p1().y() + innerRadius * sin(startAngleInDegrees * PI / 180.0)));
+ startAngleInDegrees = - startAngleInDegrees;
+ endAngleInDegrees = - endAngleInDegrees;
+ spanAngleInDegrees = - spanAngleInDegrees;
+
+ if (overlap)
+ {
+ painterPath.addEllipse(outerSquare);
+ QPainterPath innerPainterPath;
+ innerPainterPath.addEllipse(innerSquare);
+ painterPath = painterPath.subtracted(innerPainterPath);
+ }
+ else
+ {
+ painterPath.arcTo(innerSquare, startAngleInDegrees, spanAngleInDegrees);
+ painterPath.arcTo(endSquare, 180.0 + endAngleInDegrees, spanAngleInDegrees > 0 ? -180.0 : 180.0);
+ painterPath.arcTo(outerSquare, endAngleInDegrees, - spanAngleInDegrees);
+ painterPath.arcTo(startSquare, startAngleInDegrees, spanAngleInDegrees > 0 ? -180.0 : 180.0);
+ painterPath.closeSubpath();
+ }
+
+ return painterPath.toFillPolygon();
+}
+
+QPointF UBGeometryUtils::pointConstrainedInRect(QPointF point, QRectF rect)
+{
+ return QPointF(qMax(rect.x(), qMin(rect.x() + rect.width(), point.x())), qMax(rect.y(), qMin(rect.y() + rect.height(), point.y())));
+}
+
+
+QPoint UBGeometryUtils::pointConstrainedInRect(QPoint point, QRect rect)
+{
+ return QPoint(qMax(rect.x(), qMin(rect.x() + rect.width(), point.x())), qMax(rect.y(), qMin(rect.y() + rect.height(), point.y())));
+}
+
+
+QRectF UBGeometryUtils::lineToInnerRect(const QLineF& pLine, const qreal& pWidth)
+{
+ qreal centerX = (pLine.x1() + pLine.x2()) / 2;
+ qreal centerY = (pLine.y1() + pLine.y2()) / 2;
+
+ // Please put a fucking comment here
+ qreal side = sqrt((pWidth * pWidth) / 2);
+ qreal halfSide = side / 2;
+
+ return QRectF(centerX - halfSide, centerY - halfSide, side, side);
+}
+
+
+void UBGeometryUtils::crashPointList(QVector<QPointF> &points)
+{
+ // QVector<QPointF> result(points);
+ int position = 1;
+
+ while(position < points.size())
+ {
+ if (points.at(position) == points.at(position - 1))
+ {
+ points.remove(position);
+ }
+ else
+ {
+ ++position;
+ }
+ }
+}
diff --git a/Sankore-3.1/src/frameworks/UBGeometryUtils.h b/Sankore-3.1/src/frameworks/UBGeometryUtils.h
index 72b35ec..3d762aa 100644
--- a/Sankore-3.1/src/frameworks/UBGeometryUtils.h
+++ b/Sankore-3.1/src/frameworks/UBGeometryUtils.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,39 +18,40 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBGEOMETRYUTILS_H_
-#define UBGEOMETRYUTILS_H_
-
-#include <QtGui>
-
-class UBGeometryUtils
-{
- private:
- UBGeometryUtils();
- virtual ~UBGeometryUtils();
-
- public:
- static QPolygonF lineToPolygon(const QLineF& pLine, const qreal& pWidth);
- static QRectF lineToInnerRect(const QLineF& pLine, const qreal& pWidth);
-
- static QPolygonF arcToPolygon(const QLineF& startRadius, qreal spanAngle, qreal width);
-
- static QPolygonF lineToPolygon(const QPointF& pStart, const QPointF& pEnd,
- const qreal& pStartWidth, const qreal& pEndWidth);
-
- static QPointF pointConstrainedInRect(QPointF point, QRectF rect);
- static QPoint pointConstrainedInRect(QPoint point, QRect rect);
-
- static void crashPointList(QVector<QPointF> &points);
-
- const static int centimeterGraduationHeight;
- const static int halfCentimeterGraduationHeight;
- const static int millimeterGraduationHeight;
- const static int millimetersPerCentimeter;
- const static int millimetersPerHalfCentimeter;
- const static float inchSize;
-};
-
-#endif /* UBGEOMETRYUTILS_H_ */
+
+
+
+#ifndef UBGEOMETRYUTILS_H_
+#define UBGEOMETRYUTILS_H_
+
+#include <QtGui>
+
+class UBGeometryUtils
+{
+ private:
+ UBGeometryUtils();
+ virtual ~UBGeometryUtils();
+
+ public:
+ static QPolygonF lineToPolygon(const QLineF& pLine, const qreal& pWidth);
+ static QRectF lineToInnerRect(const QLineF& pLine, const qreal& pWidth);
+
+ static QPolygonF arcToPolygon(const QLineF& startRadius, qreal spanAngle, qreal width);
+
+ static QPolygonF lineToPolygon(const QPointF& pStart, const QPointF& pEnd,
+ const qreal& pStartWidth, const qreal& pEndWidth);
+
+ static QPointF pointConstrainedInRect(QPointF point, QRectF rect);
+ static QPoint pointConstrainedInRect(QPoint point, QRect rect);
+
+ static void crashPointList(QVector<QPointF> &points);
+
+ const static int centimeterGraduationHeight;
+ const static int halfCentimeterGraduationHeight;
+ const static int millimeterGraduationHeight;
+ const static int millimetersPerCentimeter;
+ const static int millimetersPerHalfCentimeter;
+ const static float inchSize;
+};
+
+#endif /* UBGEOMETRYUTILS_H_ */
diff --git a/Sankore-3.1/src/frameworks/UBPlatformUtils.cpp b/Sankore-3.1/src/frameworks/UBPlatformUtils.cpp
index 7939e23..2de70a4 100644
--- a/Sankore-3.1/src/frameworks/UBPlatformUtils.cpp
+++ b/Sankore-3.1/src/frameworks/UBPlatformUtils.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBPlatformUtils.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/frameworks/UBPlatformUtils.h b/Sankore-3.1/src/frameworks/UBPlatformUtils.h
index f957a98..57a49f6 100644
--- a/Sankore-3.1/src/frameworks/UBPlatformUtils.h
+++ b/Sankore-3.1/src/frameworks/UBPlatformUtils.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBPLATFORMUTILS_H_
#define UBPLATFORMUTILS_H_
@@ -87,18 +88,30 @@ struct KEYCODE{
*/
struct KEYBT
{
- QChar symbol1;
- QChar symbol2;
+ QChar simpleSymbol;
+ QChar shiftedSymbol;
+#if defined(Q_WS_MACX)
+ QChar capsedSymbol;
+#else
bool capsLockSwitch;
- int modifier1;
- int modifier2;
+#endif
+ int modifierNo;
+ int modifierShift;
+ int modifierCaps;
KEYCODE codes[8];
- KEYBT( QChar _symbol1,
- QChar _symbol2,
+ KEYBT( QChar _simple,
+ QChar _shifted,
+#if defined(Q_WS_MACX)
+ QChar _capsed,
+#else
bool _capsLockSwitch,
- int _modifier1,
- int _modifier2,
+#endif
+ int _modNo,
+ int _modShift,
+#if defined(Q_WS_MACX)
+ int _modCaps,
+#endif
KEYCODE c1 = 0,
KEYCODE c2 = 0,
KEYCODE c3 = 0,
@@ -107,11 +120,18 @@ struct KEYBT
KEYCODE c6 = 0,
KEYCODE c7 = 0,
KEYCODE c8 = 0)
- :symbol1(_symbol1)
- ,symbol2(_symbol2)
+ :simpleSymbol(_simple)
+ ,shiftedSymbol(_shifted)
+#if defined(Q_WS_MACX)
+ ,capsedSymbol(_capsed)
+#else
,capsLockSwitch(_capsLockSwitch)
- ,modifier1(_modifier1)
- ,modifier2(_modifier2)
+#endif
+ ,modifierNo(_modNo)
+ ,modifierShift(_modShift)
+#if defined(Q_WS_MACX)
+ ,modifierCaps(_modCaps)
+#endif
{
codes[0] = c1;
codes[1] = c2;
diff --git a/Sankore-3.1/src/frameworks/UBPlatformUtils_linux.cpp b/Sankore-3.1/src/frameworks/UBPlatformUtils_linux.cpp
index 159ce87..d101594 100644
--- a/Sankore-3.1/src/frameworks/UBPlatformUtils_linux.cpp
+++ b/Sankore-3.1/src/frameworks/UBPlatformUtils_linux.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBPlatformUtils.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/frameworks/UBPlatformUtils_mac.mm b/Sankore-3.1/src/frameworks/UBPlatformUtils_mac.mm
index 72dcb75..11b295d 100644
--- a/Sankore-3.1/src/frameworks/UBPlatformUtils_mac.mm
+++ b/Sankore-3.1/src/frameworks/UBPlatformUtils_mac.mm
@@ -1,3 +1,24 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#include "MacUtils.h"
#include "UBPlatformUtils.h"
@@ -419,13 +440,25 @@ KEYBT* createKeyBt(const UCKeyboardLayout* keyLayout, int vkk)
UInt32 kbdType = kKeyboardISO;
UniCharCount cnt1, cnt2;
- UniChar unicodeString1[100], unicodeString2[100], unicodeString3[100];
+ UniChar unicodeSimple[100], unicodeShifted[100], unicodeCapsed[100];
- UCKeyTranslate(keyLayout, vkk, kUCKeyActionDisplay, 0, kbdType, kUCKeyTranslateNoDeadKeysBit, &deadKeyState, 100, &cnt1, unicodeString1);
- UCKeyTranslate(keyLayout, vkk, kUCKeyActionDisplay, (shiftKey >> 8) & 0xff, kbdType, kUCKeyTranslateNoDeadKeysBit, &deadKeyState, 100, &cnt2, unicodeString2);
- UCKeyTranslate(keyLayout, vkk, kUCKeyActionDisplay, (alphaLock >> 8) & 0xff, kbdType, kUCKeyTranslateNoDeadKeysBit, &deadKeyState, 100, &cnt2, unicodeString3);
+ UCKeyTranslate(keyLayout, vkk, kUCKeyActionDisplay, 0, kbdType, kUCKeyTranslateNoDeadKeysBit, &deadKeyState, 100, &cnt1, unicodeSimple);
+ UCKeyTranslate(keyLayout, vkk, kUCKeyActionDisplay, (shiftKey >> 8) & 0xff, kbdType, kUCKeyTranslateNoDeadKeysBit, &deadKeyState, 100, &cnt2, unicodeShifted);
+ UCKeyTranslate(keyLayout, vkk, kUCKeyActionDisplay, (alphaLock >> 8) & 0xff, kbdType, kUCKeyTranslateNoDeadKeysBit, &deadKeyState, 100, &cnt2, unicodeCapsed);
- return new KEYBT(unicodeString1[0], unicodeString2[0], unicodeString1[0] != unicodeString3[0], 0,0, KEYCODE(0, vkk, 0), KEYCODE(0, vkk, 1));
+ // workaround for wrong character returned from UCKeyTranslate for swiss-french keyboard.
+ if (unicodeSimple[0] == 94 && unicodeShifted[0] == 80)
+ {
+ unicodeShifted[0] = 168;
+ unicodeCapsed[0] = unicodeSimple[0];
+ }
+
+ if (unicodeSimple[0] == 94 && unicodeShifted[0] == 63)
+ {
+ unicodeShifted[0] = 96;
+ unicodeCapsed[0] = unicodeSimple[0];
+ }
+ return new KEYBT(unicodeSimple[0], unicodeShifted[0], unicodeCapsed[0], 0,0,0, KEYCODE(0, vkk, 0), KEYCODE(0, vkk, 1), KEYCODE(0, vkk, 2));
}
diff --git a/Sankore-3.1/src/frameworks/UBPlatformUtils_win.cpp b/Sankore-3.1/src/frameworks/UBPlatformUtils_win.cpp
index ac41552..edb7340 100644
--- a/Sankore-3.1/src/frameworks/UBPlatformUtils_win.cpp
+++ b/Sankore-3.1/src/frameworks/UBPlatformUtils_win.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBPlatformUtils.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/frameworks/UBStringUtils.cpp b/Sankore-3.1/src/frameworks/UBStringUtils.cpp
index f4c0d14..1e17b01 100644
--- a/Sankore-3.1/src/frameworks/UBStringUtils.cpp
+++ b/Sankore-3.1/src/frameworks/UBStringUtils.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBStringUtils.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/frameworks/UBStringUtils.h b/Sankore-3.1/src/frameworks/UBStringUtils.h
index 9082220..587a628 100644
--- a/Sankore-3.1/src/frameworks/UBStringUtils.h
+++ b/Sankore-3.1/src/frameworks/UBStringUtils.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBSTRINGUTILS_H
#define UBSTRINGUTILS_H
diff --git a/Sankore-3.1/src/frameworks/UBVersion.cpp b/Sankore-3.1/src/frameworks/UBVersion.cpp
index ea89a77..854101d 100644
--- a/Sankore-3.1/src/frameworks/UBVersion.cpp
+++ b/Sankore-3.1/src/frameworks/UBVersion.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBVersion.h"
#include <QtCore>
diff --git a/Sankore-3.1/src/frameworks/UBVersion.h b/Sankore-3.1/src/frameworks/UBVersion.h
index 4931776..b2aed9b 100644
--- a/Sankore-3.1/src/frameworks/UBVersion.h
+++ b/Sankore-3.1/src/frameworks/UBVersion.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBVERSION_H_
#define UBVERSION_H_
diff --git a/Sankore-3.1/src/frameworks/frameworks.pri b/Sankore-3.1/src/frameworks/frameworks.pri
index 74d6edb..6f19fd3 100644
--- a/Sankore-3.1/src/frameworks/frameworks.pri
+++ b/Sankore-3.1/src/frameworks/frameworks.pri
@@ -31,15 +31,6 @@ macx {
}
-linux-g++ {
-
- SOURCES += src/frameworks/UBPlatformUtils_linux.cpp
-}
-linux-g++-32 {
-
- SOURCES += src/frameworks/UBPlatformUtils_linux.cpp
-}
-linux-g++-64 {
-
- SOURCES += src/frameworks/UBPlatformUtils_linux.cpp
+linux-* {
+ SOURCES += src/frameworks/UBPlatformUtils_linux.cpp
}
diff --git a/Sankore-3.1/src/globals/UBGlobals.h b/Sankore-3.1/src/globals/UBGlobals.h
index fd77d80..9a50845 100644
--- a/Sankore-3.1/src/globals/UBGlobals.h
+++ b/Sankore-3.1/src/globals/UBGlobals.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/gui/UBActionPalette.cpp b/Sankore-3.1/src/gui/UBActionPalette.cpp
index 5bb90a2..1a00f01 100644
--- a/Sankore-3.1/src/gui/UBActionPalette.cpp
+++ b/Sankore-3.1/src/gui/UBActionPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBActionPalette.h"
#include "core/memcheck.h"
@@ -109,6 +110,7 @@ void UBActionPalette::addAction(QAction* action)
UBActionPaletteButton* button = createPaletteButton(action, this);
layout()->addWidget(button);
+ layout()->setAlignment(button,Qt::AlignHCenter | Qt::AlignVCenter);
mActions << action;
}
diff --git a/Sankore-3.1/src/gui/UBActionPalette.h b/Sankore-3.1/src/gui/UBActionPalette.h
index cf51704..ab53b57 100644
--- a/Sankore-3.1/src/gui/UBActionPalette.h
+++ b/Sankore-3.1/src/gui/UBActionPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBACTIONPALETTE_H_
#define UBACTIONPALETTE_H_
diff --git a/Sankore-3.1/src/gui/UBBlackoutWidget.cpp b/Sankore-3.1/src/gui/UBBlackoutWidget.cpp
index 2475c5e..da2aef3 100644
--- a/Sankore-3.1/src/gui/UBBlackoutWidget.cpp
+++ b/Sankore-3.1/src/gui/UBBlackoutWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include "UBBlackoutWidget.h"
diff --git a/Sankore-3.1/src/gui/UBBlackoutWidget.h b/Sankore-3.1/src/gui/UBBlackoutWidget.h
index ab62bb8..bb606fd 100644
--- a/Sankore-3.1/src/gui/UBBlackoutWidget.h
+++ b/Sankore-3.1/src/gui/UBBlackoutWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBBLACKOUTWIDGET_H_
#define UBBLACKOUTWIDGET_H_
diff --git a/Sankore-3.1/src/gui/UBCachePropertiesWidget.cpp b/Sankore-3.1/src/gui/UBCachePropertiesWidget.cpp
index ea7e2f9..26c2a5d 100644
--- a/Sankore-3.1/src/gui/UBCachePropertiesWidget.cpp
+++ b/Sankore-3.1/src/gui/UBCachePropertiesWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QColor>
#include <QPainter>
#include <QPixmap>
@@ -31,30 +32,99 @@
#include "core/UBApplicationController.h"
#include "globals/UBGlobals.h"
#include "board/UBBoardController.h"
+#include "board/UBBoardView.h"
#include "domain/UBGraphicsScene.h"
#include "core/memcheck.h"
static QVector<UBGraphicsCache*> mCaches;
+UBCachePreviewWidget::UBCachePreviewWidget(QWidget *parent)
+ : QWidget(parent)
+ , mHoleSize(QSize())
+ , mShape(eMaskShape_Circle)
+{
+}
+
+void UBCachePreviewWidget::setHoleSize(QSize size)
+{
+ mHoleSize = size;
+ update();
+}
+
+void UBCachePreviewWidget::setShape(eMaskShape shape)
+{
+ mShape = shape;
+}
+
+void UBCachePreviewWidget::setMaskColor(QColor color)
+{
+ mMaskColor = color;
+ update();
+}
+
+QSize UBCachePreviewWidget::sizeHint() const
+{
+ return size();
+}
+
+void UBCachePreviewWidget::paintEvent(QPaintEvent *event)
+{
+ QWidget::paintEvent(event);
+
+ QPainter painter(this);
+ painter.setPen(mMaskColor);
+ painter.setBrush(mMaskColor);
+ painter.drawRect(rect());
+ painter.setBrush(QColor(Qt::white));
+
+ UBBoardView *view = UBApplication::boardController->controlView();
+ qreal scaleRatio = static_cast<qreal>(rect().width())/static_cast<qreal>(view->width());
+ qreal holeWidth = mHoleSize.width()*scaleRatio;
+ qreal holeHeight = mHoleSize.height()*scaleRatio;
+
+ if (eMaskShape_Circle == mShape)
+ painter.drawEllipse(rect().center(), static_cast<int>(holeWidth/2), static_cast<int>(holeHeight/2));
+
+ if (eMaskShap_Rectangle == mShape)
+ painter.drawRect(rect().center().x() - holeWidth/2, rect().center().y() - holeHeight/2, holeWidth, holeHeight);
+}
+
+void UBCachePreviewWidget::resizeEvent(QResizeEvent *event)
+{
+ Q_UNUSED(event);
+ UBBoardView *view = UBApplication::boardController->controlView();
+ qreal aspectRatio = static_cast<qreal>(view->height())/static_cast<qreal>(view->width());
+
+ QSize newSize(width(),width()*aspectRatio);
+ updateGeometry();
+ resize(newSize);
+
+
+ QWidget::resizeEvent(event);
+}
+
UBCachePropertiesWidget::UBCachePropertiesWidget(QWidget *parent, const char *name):UBDockPaletteWidget(parent)
, mpLayout(NULL)
, mpCachePropertiesLabel(NULL)
, mpColorLabel(NULL)
, mpShapeLabel(NULL)
- , mpSizeLabel(NULL)
- , mpColor(NULL)
+ , mpWidthLabel(NULL)
+ , mpSelectColorButton(NULL)
, mpSquareButton(NULL)
, mpCircleButton(NULL)
, mpCloseButton(NULL)
- , mpSizeSlider(NULL)
+ , mpWidthSlider(NULL)
, mpColorLayout(NULL)
, mpShapeLayout(NULL)
- , mpSizeLayout(NULL)
, mpCloseLayout(NULL)
, mpProperties(NULL)
+ , mpSizeLayout(NULL)
, mpPropertiesLayout(NULL)
+ , mActualShape(eMaskShape_Circle)
, mpCurrentCache(NULL)
+ , mKeepAspectRatio(true)
+ , mOtherSliderUsed(false)
{
setObjectName(name);
@@ -62,12 +132,10 @@ UBCachePropertiesWidget::UBCachePropertiesWidget(QWidget *parent, const char *na
mName = "CachePropWidget";
mVisibleState = false;
- mIconToLeft = QPixmap(":images/cache_open.png");
- mIconToRight = QPixmap(":images/cache_close.png");
setContentsMargins(10, 10, 10, 10);
// Build the UI
- mpLayout = new QVBoxLayout();
+ mpLayout = new QVBoxLayout(0);
setLayout(mpLayout);
// Title
@@ -76,26 +144,31 @@ UBCachePropertiesWidget::UBCachePropertiesWidget(QWidget *parent, const char *na
mpLayout->addWidget(mpCachePropertiesLabel, 0);
// Properties Box
- mpProperties = new QWidget(this);
+ mpProperties = new QWidget(0);
mpProperties->setObjectName("DockPaletteWidgetBox");
mpLayout->addWidget(mpProperties, 1);
- mpPropertiesLayout = new QVBoxLayout();
+ mpPropertiesLayout = new QVBoxLayout(0);
mpProperties->setLayout(mpPropertiesLayout);
-
- // Color
- mpColorLayout = new QHBoxLayout();
+ // Color and Alpha
+ mpColorLayout = new QHBoxLayout(mpProperties);
mpColorLabel = new QLabel(tr("Color:"), mpProperties);
- mpColor = new QPushButton(mpProperties);
- mpColor->setObjectName("DockPaletteWidgetButton");
- updateCacheColor(Qt::black);
+ mpSelectColorButton = new QPushButton(mpProperties);
+ mpSelectColorButton->setObjectName("DockPaletteWidgetButton");
mpColorLayout->addWidget(mpColorLabel, 0);
- mpColorLayout->addWidget(mpColor, 0);
- mpColorLayout->addStretch(1);
+ mpColorLayout->addWidget(mpSelectColorButton, 0);
+ mpAlphaLabel = new QLabel(tr("Alpha:"), mpProperties);
+ mpAplhaSlider = new QSlider(Qt::Horizontal, mpProperties);
+ mpAplhaSlider->setMinimumHeight(20);
+ mpAplhaSlider->setMinimum(178);
+ mpAplhaSlider->setMaximum(255);
+ mpAplhaSlider->setValue(255);
+ mpColorLayout->addWidget(mpAlphaLabel, 0);
+ mpColorLayout->addWidget(mpAplhaSlider, 1);
mpPropertiesLayout->addLayout(mpColorLayout, 0);
// Shape
- mpShapeLayout = new QHBoxLayout();
+ mpShapeLayout = new QHBoxLayout(0);
mpShapeLabel = new QLabel(tr("Shape:"), mpProperties);
mpSquareButton = new QPushButton(mpProperties);
mpSquareButton->setIcon(QIcon(":images/cache_square.png"));
@@ -110,23 +183,68 @@ UBCachePropertiesWidget::UBCachePropertiesWidget(QWidget *parent, const char *na
mpShapeLayout->addWidget(mpCircleButton, 0);
mpShapeLayout->addStretch(1);
mpPropertiesLayout->addLayout(mpShapeLayout, 0);
-
mpCircleButton->setChecked(true);
// Shape Size
- mpSizeLayout = new QHBoxLayout();
- mpSizeLabel = new QLabel(tr("Size:"), mpProperties);
- mpSizeSlider = new QSlider(Qt::Horizontal, mpProperties);
- mpSizeSlider->setMinimumHeight(20);
- mpSizeSlider->setMinimum(50);
- mpSizeSlider->setMaximum(MAX_SHAPE_WIDTH);
- mpSizeLayout->addWidget(mpSizeLabel, 0);
- mpSizeLayout->addWidget(mpSizeSlider, 1);
+ connect(UBApplication::boardController->controlView(), SIGNAL(resized(QResizeEvent *)), this, SLOT(onControlViewResized(QResizeEvent *)));
+ connect(UBApplication::boardController, SIGNAL(zoomChanged(qreal)), this, SLOT(onZoomChanged(qreal)));
+ minimumShapeSize = QSize(100,100);
+
+ mpSizeLayout = new QVBoxLayout(0);
+ mpGeometryLabel = new QLabel(tr("Geometry:"), mpProperties);
+ mpSizeLayout->addWidget(mpGeometryLabel, 1);
+ mKeepAspectRatio = UBSettings::settings()->cacheKeepAspectRatio->get().toBool();
+
+ mpWidthLabel = new QLabel(tr("Width: "), mpProperties);
+ mpWidthSlider = new QSlider(Qt::Horizontal, mpProperties);
+ mpWidthSlider->setMinimumHeight(20);
+ mpWidthSlider->setMinimum(minimumShapeSize.width());
+ mpWidthSlider->setMaximum(maximumShapeSize.width());
+ mpWidthSlider->setValue(minimumShapeSize.width());
+ mpSizeLayout->addWidget(mpWidthLabel, 0);
+ mpSizeLayout->addWidget(mpWidthSlider, 1);
+
+ mpHeightLabel = new QLabel(tr("Height:"), mpProperties);
+ mpHeightSlider = new QSlider(Qt::Horizontal, mpProperties);
+ mpHeightSlider->setMinimumHeight(20);
+ mpHeightSlider->setMinimum(minimumShapeSize.height());
+ mpHeightSlider->setMaximum(maximumShapeSize.height());
+ mpHeightSlider->setValue(minimumShapeSize.height());
+ mpSizeLayout->addWidget(mpHeightLabel, 0);
+ mpSizeLayout->addWidget(mpHeightSlider, 1);
+
+ mpKeepAspectRatioCheckbox = new QCheckBox(tr("Keep proportions"), mpProperties);
+ mpKeepAspectRatioCheckbox->setTristate(false);
+ mpKeepAspectRatioCheckbox->setChecked(mKeepAspectRatio);
+ mpSizeLayout->addWidget(mpKeepAspectRatioCheckbox, 0);
mpPropertiesLayout->addLayout(mpSizeLayout, 0);
+ // Mode
+ mpModeLayout = new QVBoxLayout(0);
+ mpModeLabel = new QLabel(tr("Mode:"), mpProperties);
+ mpModeComboBox = new QComboBox(mpProperties);
+ mpModeComboBox->setObjectName("CacheModeSelectionComboBox");
+ mpModeComboBox->addItem(tr("On Click"), UBGraphicsCache::OnClick);
+ mpModeComboBox->addItem(tr("Persistent"), UBGraphicsCache::Persistent);
+ mpModeLayout->addWidget(mpModeLabel);
+ mpModeLayout->addWidget(mpModeComboBox);
+
+ mpPropertiesLayout->addLayout(mpModeLayout, 0);
+
+ // Preview
+ mpPreviewLayout = new QVBoxLayout(0);
+ mpPreviewLabel = new QLabel(tr("Preview:"), mpProperties);
+ mpPreviewWidget = new UBCachePreviewWidget(mpProperties);
+ QVBoxLayout *previewWidgetLayout = new QVBoxLayout(0);
+ previewWidgetLayout->addStretch(1);
+ mpPreviewWidget->setHoleSize(mOldHoleSize);
+ mpPreviewLayout->addWidget(mpPreviewLabel);
+ mpPreviewLayout->addWidget(mpPreviewWidget,0);
+ mpPropertiesLayout->addLayout(mpPreviewLayout,0);
+
// Close
- mpCloseLayout = new QHBoxLayout();
- mpCloseButton = new QPushButton(tr("Close"), mpProperties);
+ mpCloseLayout = new QHBoxLayout(0);
+ mpCloseButton = new QPushButton(tr("Close cache"), mpProperties);
mpCloseButton->setObjectName("DockPaletteWidgetButton");
mpCloseLayout->addWidget(mpCloseButton, 0);
mpCloseLayout->addStretch(1);
@@ -137,96 +255,23 @@ UBCachePropertiesWidget::UBCachePropertiesWidget(QWidget *parent, const char *na
// Connect signals / slots
connect(mpCloseButton, SIGNAL(clicked()), this, SLOT(onCloseClicked()));
- connect(mpColor, SIGNAL(clicked()), this, SLOT(onColorClicked()));
+ connect(mpSelectColorButton, SIGNAL(clicked()), this, SLOT(onColorClicked()));
connect(mpCircleButton, SIGNAL(clicked()), this, SLOT(updateShapeButtons()));
connect(mpSquareButton, SIGNAL(clicked()), this, SLOT(updateShapeButtons()));
- connect(mpSizeSlider, SIGNAL(valueChanged(int)), this, SLOT(onSizeChanged(int)));
+ connect(mpWidthSlider, SIGNAL(valueChanged(int)), this, SLOT(onWidthChanged(int)));
+ connect(mpHeightSlider, SIGNAL(valueChanged(int)), this, SLOT(onHeightChanged(int)));
+ connect(mpKeepAspectRatioCheckbox, SIGNAL(stateChanged(int)), this, SLOT(onKeepAspectRatioChanged(int)));
+ connect(mpModeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onModeChanged(int)));
+ connect(mpAplhaSlider, SIGNAL(valueChanged(int)), this, SLOT(onAlphaChanged(int)));
connect(UBApplication::boardController, SIGNAL(pageChanged()), this, SLOT(updateCurrentCache()));
connect(UBApplication::boardController, SIGNAL(cacheEnabled()), this, SLOT(onCacheEnabled()));
+
+ mOldHoleSize = QSize(mpWidthSlider->value(), mpHeightSlider->value());
}
UBCachePropertiesWidget::~UBCachePropertiesWidget()
{
- if(NULL != mpCachePropertiesLabel)
- {
- delete mpCachePropertiesLabel;
- mpCachePropertiesLabel = NULL;
- }
- if(NULL != mpColorLabel)
- {
- delete mpColorLabel;
- mpColorLabel = NULL;
- }
- if(NULL != mpShapeLabel)
- {
- delete mpShapeLabel;
- mpShapeLabel = NULL;
- }
- if(NULL != mpSizeLabel)
- {
- delete mpSizeLabel;
- mpSizeLabel = NULL;
- }
- if(NULL != mpColor)
- {
- delete mpColor;
- mpColor = NULL;
- }
- if(NULL != mpSquareButton)
- {
- delete mpSquareButton;
- mpSquareButton = NULL;
- }
- if(NULL != mpCircleButton)
- {
- delete mpCircleButton;
- mpCircleButton = NULL;
- }
- if(NULL != mpCloseButton)
- {
- delete mpCloseButton;
- mpCloseButton = NULL;
- }
- if(NULL != mpSizeSlider)
- {
- delete mpSizeSlider;
- mpSizeSlider = NULL;
- }
- if(NULL != mpColorLayout)
- {
- delete mpColorLayout;
- mpColorLayout = NULL;
- }
- if(NULL != mpShapeLayout)
- {
- delete mpShapeLayout;
- mpShapeLayout = NULL;
- }
- if(NULL != mpSizeLayout)
- {
- delete mpSizeLayout;
- mpSizeLayout = NULL;
- }
- if(NULL != mpCloseLayout)
- {
- delete mpCloseLayout;
- mpCloseLayout = NULL;
- }
- if(NULL != mpPropertiesLayout)
- {
- delete mpPropertiesLayout;
- mpPropertiesLayout = NULL;
- }
- if(NULL != mpProperties)
- {
- delete mpProperties;
- mpProperties = NULL;
- }
- if(NULL != mpLayout)
- {
- delete mpLayout;
- mpLayout = NULL;
- }
+
}
void UBCachePropertiesWidget::onCloseClicked()
@@ -249,9 +294,10 @@ void UBCachePropertiesWidget::onCloseClicked()
}
}
-void UBCachePropertiesWidget::updateCacheColor(QColor color)
+void UBCachePropertiesWidget::syncCacheColor(QColor color)
{
mActualColor = color;
+ mpAplhaSlider->setValue(color.alpha());
// Update the color on the color button
QPixmap pix(32, 32);
@@ -265,19 +311,23 @@ void UBCachePropertiesWidget::updateCacheColor(QColor color)
p.end();
- mpColor->setIcon(QIcon(pix));
+ mpSelectColorButton->setIcon(QIcon(pix));
if(NULL != mpCurrentCache)
{
mpCurrentCache->setMaskColor(mActualColor);
}
+
+ mpPreviewWidget->setMaskColor(mActualColor);
+ UBSettings::settings()->cacheColor->set(QString("%1 %2 %3 %4").arg(mActualColor.red()).arg(mActualColor.green()).arg(mActualColor.blue()).arg(mActualColor.alpha()));
}
void UBCachePropertiesWidget::onColorClicked()
{
// Show the color picker
QColor newColor = QColorDialog::getColor(mActualColor,this);
- updateCacheColor(newColor);
+ if (QColor::Invalid != newColor.spec())
+ syncCacheColor(newColor);
}
void UBCachePropertiesWidget::updateShapeButtons()
@@ -297,6 +347,11 @@ void UBCachePropertiesWidget::updateShapeButtons()
{
mpCurrentCache->setMaskShape(mActualShape);
}
+
+ if (NULL != mpPreviewWidget)
+ {
+ mpPreviewWidget->setShape(mActualShape);
+ }
}
void UBCachePropertiesWidget::updateCurrentCache()
@@ -326,14 +381,19 @@ void UBCachePropertiesWidget::updateCurrentCache()
emit showTab(this);
mpCurrentCache = dynamic_cast<UBGraphicsCache*>(it);
if((NULL != mpCurrentCache) && (!mCaches.contains(mpCurrentCache)))
- {
mCaches.append(mpCurrentCache);
- }
+ else
+ return
// Update the values of the cache properties
- mpSizeSlider->setValue(mpCurrentCache->shapeWidth());
- updateCacheColor(mpCurrentCache->maskColor());
- switch(mpCurrentCache->maskshape())
+ mpWidthSlider->setValue(mpCurrentCache->holeWidth());
+ mpHeightSlider->setValue(mpCurrentCache->holeHeight());
+ syncCacheColor(mpCurrentCache->maskColor());
+ mpPreviewWidget->setHoleSize(QSize(mpWidthSlider->value(), mpHeightSlider->value()));
+ mpCurrentCache->setMode(UBSettings::settings()->cacheMode->get().toInt());
+
+ mActualShape = mpCurrentCache->maskshape();
+ switch(mActualShape)
{
case eMaskShape_Circle:
mpCircleButton->setChecked(true);
@@ -345,7 +405,10 @@ void UBCachePropertiesWidget::updateCurrentCache()
break;
}
+
+ mpPreviewWidget->setShape(mActualShape);
return;
+
}
}
}
@@ -359,16 +422,102 @@ void UBCachePropertiesWidget::updateCurrentCache()
setDisabled(true);
}
-void UBCachePropertiesWidget::onSizeChanged(int newSize)
+void UBCachePropertiesWidget::onWidthChanged(int newSize)
{
if(NULL != mpCurrentCache)
{
- mpCurrentCache->setShapeWidth(newSize);
+ if(mKeepAspectRatio)
+ {
+ if(!mOtherSliderUsed)
+ {
+ mOtherSliderUsed = true;
+ mpHeightSlider->setValue(mpHeightSlider->value()*newSize/mOldHoleSize.width());
+ }
+ mOldHoleSize.setHeight(mpHeightSlider->value());
+ }
+ else
+ mpCurrentCache->setHoleWidth(newSize);
+
+ mOldHoleSize.setWidth(newSize);
+ mpPreviewWidget->setHoleSize(mOldHoleSize);
+ mpCurrentCache->setHoleSize(mOldHoleSize);
+ mOtherSliderUsed = false;
}
}
+void UBCachePropertiesWidget::onHeightChanged(int newSize)
+{
+ if(NULL != mpCurrentCache)
+ {
+ if (mKeepAspectRatio)
+ {
+ if(!mOtherSliderUsed)
+ {
+ mOtherSliderUsed = true;
+ mpWidthSlider->setValue(mpWidthSlider->value()*newSize/mOldHoleSize.height());
+ }
+ mOldHoleSize.setWidth(mpWidthSlider->value());
+ }
+ else
+ mpCurrentCache->setHoleHeight(newSize);
+
+ mOldHoleSize.setHeight(newSize);
+ mpPreviewWidget->setHoleSize(mOldHoleSize);
+ mpCurrentCache->setHoleSize(mOldHoleSize);
+ mOtherSliderUsed = false;
+ }
+}
+
+
+void UBCachePropertiesWidget::onKeepAspectRatioChanged(int state)
+{
+ Qt::CheckState cur_state = static_cast<Qt::CheckState>(state);
+ mKeepAspectRatio = Qt::Checked == cur_state;
+
+ UBSettings::settings()->cacheKeepAspectRatio->set(mKeepAspectRatio);
+
+}
+
void UBCachePropertiesWidget::onCacheEnabled()
{
emit showTab(this);
}
+void UBCachePropertiesWidget::onModeChanged(int mode)
+{
+ mpCurrentCache->setMode(mode);
+ UBSettings::settings()->cacheMode->set(mode);
+}
+
+void UBCachePropertiesWidget::onAlphaChanged(int alpha)
+{
+ mActualColor.setAlpha(alpha);
+ syncCacheColor(mActualColor);
+}
+
+void UBCachePropertiesWidget::onControlViewResized(QResizeEvent *event)
+{
+ Q_UNUSED(event);
+ maximumShapeSize = UBApplication::boardController->controlView()->size();
+ if (mKeepAspectRatio)
+ {
+ int maxSize = qMax(maximumShapeSize.width(), maximumShapeSize.height());
+ mpWidthSlider->setMaximum(maxSize);
+ mpHeightSlider->setMaximum(maxSize);
+ }
+ else
+ {
+ mpWidthSlider->setMaximum(maximumShapeSize.width());
+ mpHeightSlider->setMaximum(maximumShapeSize.height());
+ }
+}
+
+void UBCachePropertiesWidget::onZoomChanged(qreal newZoom)
+{
+ Q_UNUSED(newZoom)
+
+ mpWidthSlider->setMaximum(maximumShapeSize.width());
+ mpHeightSlider->setMaximum(maximumShapeSize.height());
+ if (mpCurrentCache)
+ mpCurrentCache->setHoleSize(QSize(mpWidthSlider->value(), mpHeightSlider->value()));
+}
diff --git a/Sankore-3.1/src/gui/UBCachePropertiesWidget.h b/Sankore-3.1/src/gui/UBCachePropertiesWidget.h
index edc8cbe..a564f93 100644
--- a/Sankore-3.1/src/gui/UBCachePropertiesWidget.h
+++ b/Sankore-3.1/src/gui/UBCachePropertiesWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBCACHEPROPERTIESWIDGET_H
#define UBCACHEPROPERTIESWIDGET_H
@@ -34,7 +35,25 @@
#include "UBDockPaletteWidget.h"
#include "tools/UBGraphicsCache.h"
-#define MAX_SHAPE_WIDTH 200
+class UBCachePreviewWidget : public QWidget
+{
+public:
+ UBCachePreviewWidget(QWidget *parent = NULL);
+
+ void setHoleSize(QSize size);
+ void setShape(eMaskShape shape);
+ void setMaskColor(QColor color);
+
+private:
+ QSize sizeHint() const;
+ void paintEvent(QPaintEvent *event);
+ void resizeEvent(QResizeEvent *event);
+
+private:
+ QSize mHoleSize;
+ eMaskShape mShape;
+ QColor mMaskColor;
+};
class UBCachePropertiesWidget : public UBDockPaletteWidget
{
@@ -48,6 +67,9 @@ public:
return mode == eUBDockPaletteWidget_BOARD;
}
+ QPixmap iconToLeft() const {return QPixmap(":images/cache_open.png");}
+ QPixmap iconToRight() const {return QPixmap(":images/cache_open.png");}
+
public slots:
void updateCurrentCache();
@@ -56,33 +78,55 @@ signals:
private slots:
void onCloseClicked();
- void updateCacheColor(QColor color);
+ void syncCacheColor(QColor color);
void onColorClicked();
void updateShapeButtons();
- void onSizeChanged(int newSize);
+ void onWidthChanged(int newSize);
+ void onHeightChanged(int newSize);
+ void onKeepAspectRatioChanged(int state);
void onCacheEnabled();
+ void onModeChanged(int mode);
+ void onAlphaChanged(int alpha);
+ void onControlViewResized(QResizeEvent *event);
+ void onZoomChanged(qreal newZoom);
private:
QVBoxLayout* mpLayout;
QLabel* mpCachePropertiesLabel;
QLabel* mpColorLabel;
+ QLabel* mpAlphaLabel;
QLabel* mpShapeLabel;
- QLabel* mpSizeLabel;
- QPushButton* mpColor;
+ QLabel *mpGeometryLabel;
+ QLabel *mpWidthLabel;
+ QLabel *mpHeightLabel;
+ QLabel *mpModeLabel;
+ QLabel *mpPreviewLabel;
+ QCheckBox *mpKeepAspectRatioCheckbox;
+ QPushButton* mpSelectColorButton;
QPushButton* mpSquareButton;
QPushButton* mpCircleButton;
QPushButton* mpCloseButton;
- QSlider* mpSizeSlider;
+ QSlider *mpAplhaSlider;
+ QSlider* mpWidthSlider;
+ QSlider* mpHeightSlider;
QHBoxLayout* mpColorLayout;
QHBoxLayout* mpShapeLayout;
- QHBoxLayout* mpSizeLayout;
QHBoxLayout* mpCloseLayout;
QWidget* mpProperties;
+ UBCachePreviewWidget *mpPreviewWidget;
+ QVBoxLayout* mpSizeLayout;
QVBoxLayout* mpPropertiesLayout;
+ QVBoxLayout *mpModeLayout;
+ QVBoxLayout *mpPreviewLayout;
+ QComboBox *mpModeComboBox;
QColor mActualColor;
eMaskShape mActualShape;
UBGraphicsCache* mpCurrentCache;
-
+ bool mKeepAspectRatio;
+ bool mOtherSliderUsed;
+ QSize mOldHoleSize;
+ QSize minimumShapeSize;
+ QSize maximumShapeSize;
};
#endif // UBCACHEPROPERTIESWIDGET_H
diff --git a/Sankore-3.1/src/gui/UBCircleFrame.cpp b/Sankore-3.1/src/gui/UBCircleFrame.cpp
index 02c14b6..e4cfe83 100644
--- a/Sankore-3.1/src/gui/UBCircleFrame.cpp
+++ b/Sankore-3.1/src/gui/UBCircleFrame.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBCircleFrame.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/gui/UBCircleFrame.h b/Sankore-3.1/src/gui/UBCircleFrame.h
index 1153c83..d7ee9b2 100644
--- a/Sankore-3.1/src/gui/UBCircleFrame.h
+++ b/Sankore-3.1/src/gui/UBCircleFrame.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBCIRCLEFRAME_H_
#define UBCIRCLEFRAME_H_
diff --git a/Sankore-3.1/src/gui/UBClockPalette.h b/Sankore-3.1/src/gui/UBClockPalette.h
index ddb46b0..648da3b 100644
--- a/Sankore-3.1/src/gui/UBClockPalette.h
+++ b/Sankore-3.1/src/gui/UBClockPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
diff --git a/Sankore-3.1/src/gui/UBColorPicker.cpp b/Sankore-3.1/src/gui/UBColorPicker.cpp
index 4ff6791..38f9fa9 100644
--- a/Sankore-3.1/src/gui/UBColorPicker.cpp
+++ b/Sankore-3.1/src/gui/UBColorPicker.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBColorPicker.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/gui/UBColorPicker.h b/Sankore-3.1/src/gui/UBColorPicker.h
index 6aa3616..008a0d0 100644
--- a/Sankore-3.1/src/gui/UBColorPicker.h
+++ b/Sankore-3.1/src/gui/UBColorPicker.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBCOLORPICKER_H_
#define UBCOLORPICKER_H_
diff --git a/Sankore-3.1/src/gui/UBCreateLinkPalette.cpp b/Sankore-3.1/src/gui/UBCreateLinkPalette.cpp
new file mode 100644
index 0000000..4cf30c3
--- /dev/null
+++ b/Sankore-3.1/src/gui/UBCreateLinkPalette.cpp
@@ -0,0 +1,360 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+#include "UBCreateLinkPalette.h"
+#include <QVBoxLayout>
+#include <QStackedWidget>
+#include <QToolButton>
+#include <QPushButton>
+#include <QLineEdit>
+#include <QPainter>
+#include <QMouseEvent>
+#include <QCheckBox>
+#include <QButtonGroup>
+#include <QComboBox>
+
+#include "core/UBApplication.h"
+#include "core/UBDownloadManager.h"
+
+#include "document/UBDocumentController.h"
+
+#include "board/UBBoardController.h"
+
+#include "customWidgets/UBGraphicsItemAction.h"
+
+#include "frameworks/UBFileSystemUtils.h"
+
+
+UBCreateLinkLabel::UBCreateLinkLabel(QString labelText, QWidget *parent) :
+ QLabel(parent)
+{
+ setAcceptDrops(true);
+ mInitialText = labelText;
+ setText(mInitialText);
+ setMinimumSize(200, 200);
+ setFrameStyle(QFrame::Sunken | QFrame::StyledPanel);
+ setAlignment(Qt::AlignCenter);
+ setStyleSheet("border-style: dashed; border-color:#999999;border-radius: 10px; border-width: 2px ");
+}
+
+void UBCreateLinkLabel::dragEnterEvent(QDragEnterEvent *event)
+{
+ setText(tr("<drop content>"));
+ setBackgroundRole(QPalette::Highlight);
+
+ event->acceptProposedAction();
+}
+
+void UBCreateLinkLabel::dropEvent(QDropEvent *event)
+{
+ setBackgroundRole(QPalette::NoRole);
+ const QMimeData *mimeData = event->mimeData();
+
+ QString path;
+
+ if (mimeData->hasImage())
+ setText(tr("Images are not accepted"));
+ else if (mimeData->hasHtml())
+ path = mimeData->html();
+ else if (mimeData->hasText())
+ path = mimeData->text();
+ else if (mimeData->hasUrls())
+ path = mimeData->urls().at(0).toLocalFile();
+ else
+ setText(tr("Cannot display data"));
+
+ if(UBFileSystemUtils::mimeTypeFromFileName(path).contains("audio")){
+ if(!path.startsWith("file:"))
+ setText(QFileInfo(path).completeBaseName());
+ else
+ setText(QFileInfo(QUrl(path).toLocalFile()).completeBaseName());
+ }
+ else
+ setText(tr("Dropped file isn't reconized to be an audio file"));
+
+ emit droppedFile(path);
+ event->acceptProposedAction();
+}
+
+void UBCreateLinkLabel::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ setText(mInitialText);
+ event->accept();
+}
+
+UBCreateLinkPalette::UBCreateLinkPalette(QWidget *parent) :
+ UBFloatingPalette(Qt::TopRightCorner, parent)
+ ,mButtonGroup(0)
+ ,mIsFirstTime(true)
+{
+ setObjectName("UBCreateLinkPalette");
+ mLayout = new QVBoxLayout(this);
+ mLayout->setContentsMargins(10,28,10,10);
+ setLayout(mLayout);
+ mStackedWidget = new QStackedWidget(this);
+ mStackedWidget->setObjectName("UBCreateLinkPaletteStackedWidget");
+ mStackedWidget->setStyleSheet("QWidget#UBCreateLinkPaletteStackedWidget{background-color:#eeeeee; border-width: 2px; border-style: solid; border-radius: 10px; border-color:#999999;}");
+ mLayout->addWidget(mStackedWidget);
+ init();
+ hide();
+}
+
+
+UBCreateLinkPalette::~UBCreateLinkPalette()
+{
+
+}
+
+QToolButton* UBCreateLinkPalette::addInitiaWidgetButton(QString textButton, QString iconPath)
+{
+ QToolButton* button = new QToolButton(mInitialWidget);
+ button->setIcon(QIcon(iconPath));
+ button->setIconSize(QSize(100,100));
+ button->setText(textButton);
+ button->setStyleSheet("background-color:transparent; board : none;");
+ button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ return button;
+}
+
+void UBCreateLinkPalette::init()
+{
+ mInitialWidget = new QWidget(this);
+ QHBoxLayout* initialWidgetLayout = new QHBoxLayout(mInitialWidget);
+ mInitialWidget->setLayout(initialWidgetLayout);
+
+ QToolButton* actionPlayAudio = addInitiaWidgetButton(tr("Play an audio file"),":images/createLinkPalette/PlayAudio.svg");
+ QToolButton* actionAddLinkToPage = addInitiaWidgetButton(tr("Add Link to Page"),":images/createLinkPalette/LinkPage.svg");
+ QToolButton* actionAddLinkToWeb = addInitiaWidgetButton(tr("Add Link to a Web page"),":images/createLinkPalette/LinkWeb.svg");
+
+ initialWidgetLayout->addWidget(actionPlayAudio);
+ initialWidgetLayout->addWidget(actionAddLinkToPage);
+ initialWidgetLayout->addWidget(actionAddLinkToWeb);
+ mStackedWidget->addWidget(mInitialWidget);
+
+
+ mAudioWidget = new QWidget(this);
+ QVBoxLayout* audioWidgetLayout = new QVBoxLayout(mAudioWidget);
+ mAudioWidget->setLayout(audioWidgetLayout);
+ QHBoxLayout* audioBackButtonLayout = new QHBoxLayout();
+ QPushButton* audioBackButton = new QPushButton(mAudioWidget);
+ audioBackButton->setIcon(QIcon(":images/toolbar/undoOn.png"));
+ audioBackButtonLayout->addWidget(audioBackButton);
+ audioBackButtonLayout->addStretch();
+ audioWidgetLayout->addLayout(audioBackButtonLayout);
+ connect(audioBackButton,SIGNAL(clicked()),this,SLOT(onBackButtonClicked()));
+ mpAudioLabel = new UBCreateLinkLabel(tr("Drag and drop the audio file from the library in this box"),mAudioWidget);
+ connect(mpAudioLabel,SIGNAL(droppedFile(QString&)),this,SLOT(onDroppedAudioFile(QString&)));
+ audioWidgetLayout->addWidget(mpAudioLabel);
+ QHBoxLayout* audioOkButtonLayout = new QHBoxLayout();
+ audioOkButtonLayout->addStretch();
+ QPushButton* audioOkButton = new QPushButton(tr("Ok"),mAudioWidget);
+ audioOkButtonLayout->addWidget(audioOkButton);
+ audioWidgetLayout->addLayout(audioOkButtonLayout);
+ connect(audioOkButton,SIGNAL(clicked()),this,SLOT(onOkAudioClicked()));
+ mStackedWidget->addWidget(mAudioWidget);
+ connect(actionPlayAudio,SIGNAL(clicked()),this,SLOT(onPlayAudioClicked()));
+
+
+ mPageLinkWidget = new QWidget(this);
+ QVBoxLayout* pageLinkWidgetLayout = new QVBoxLayout(mPageLinkWidget);
+ mPageLinkWidget->setLayout(pageLinkWidgetLayout);
+ QHBoxLayout* pageLinkBackButtonLayout = new QHBoxLayout();
+ QPushButton* pageLinkBackButton = new QPushButton(mPageLinkWidget);
+ pageLinkBackButton->setIcon(QIcon(":images/toolbar/undoOn.png"));
+ pageLinkBackButtonLayout->addWidget(pageLinkBackButton);
+ pageLinkBackButtonLayout->addStretch();
+ pageLinkWidgetLayout->addLayout(pageLinkBackButtonLayout);
+
+ int activeIndex = UBApplication::boardController->activeSceneIndex();
+ int lastSceneIndex = UBApplication::boardController->selectedDocument()->pageCount() - 1;
+ mButtonGroup = new QButtonGroup();
+ mButtonGroup->setExclusive(true);
+ QCheckBox* nextPageCheckBox = new QCheckBox(tr("Next Page"),this);
+ mButtonGroup->addButton(nextPageCheckBox,eMoveToNextPage);
+ pageLinkWidgetLayout->addWidget(nextPageCheckBox);
+ if(activeIndex >= lastSceneIndex)
+ nextPageCheckBox->setEnabled(false);
+ QCheckBox* previousPageCheckBox = new QCheckBox(tr("Previous Page"),this);
+ mButtonGroup->addButton(previousPageCheckBox,eMoveToPreviousPage);
+ if(activeIndex == 0)
+ previousPageCheckBox->setEnabled(false);
+ pageLinkWidgetLayout->addWidget(previousPageCheckBox);
+ QCheckBox* firstPageCheckBox = new QCheckBox(tr("Title Page"),this);
+ mButtonGroup->addButton(firstPageCheckBox,eMoveToFirstPage);
+ pageLinkWidgetLayout->addWidget(firstPageCheckBox);
+ QCheckBox* lastPageCheckBox = new QCheckBox(tr("Last Page"),this);
+ mButtonGroup->addButton(lastPageCheckBox,eMoveToLastPage);
+ pageLinkWidgetLayout->addWidget(lastPageCheckBox);
+
+ QHBoxLayout* toPageNumberLayout = new QHBoxLayout();
+ QCheckBox* pageNumberCheckBox = new QCheckBox(tr("Page Number"),this);
+ mButtonGroup->addButton(pageNumberCheckBox,eMoveToPage);
+ toPageNumberLayout->addWidget(pageNumberCheckBox);
+ mPageComboBox = new QComboBox(this);
+ toPageNumberLayout->addWidget(mPageComboBox);
+ for(int sceneIndex = 0; sceneIndex <= lastSceneIndex;sceneIndex+=1)
+ if(sceneIndex != activeIndex)
+ mPageComboBox->insertItem(sceneIndex,QString("%1").arg(sceneIndex));
+ if(!mPageComboBox->count())
+ pageNumberCheckBox->setEnabled(false);
+ mPageComboBox->setEnabled(false);
+ connect(pageNumberCheckBox,SIGNAL(clicked(bool)),this,SLOT(onPageNumberCheckBoxClicked(bool)));
+ pageLinkWidgetLayout->addLayout(toPageNumberLayout);
+
+
+ connect(pageLinkBackButton,SIGNAL(clicked()),this,SLOT(onBackButtonClicked()));
+ QHBoxLayout* pageLinkOkButtonLayout = new QHBoxLayout();
+ pageLinkOkButtonLayout->addStretch();
+ QPushButton* pageLinkOkButton = new QPushButton(tr("Ok"), mPageLinkWidget);
+ pageLinkOkButtonLayout->addWidget(pageLinkOkButton);
+ pageLinkWidgetLayout->addLayout(pageLinkOkButtonLayout);
+ connect(pageLinkOkButton,SIGNAL(clicked()),this,SLOT(onOkLinkToPageClicked()));
+ mStackedWidget->addWidget(mPageLinkWidget);
+ connect(actionAddLinkToPage,SIGNAL(clicked()),this,SLOT(onAddLinkToPageClicked()));
+
+
+ mUrlLinkWidget = new QWidget(this);
+ QVBoxLayout* urlLinkWidgetLayout = new QVBoxLayout(mUrlLinkWidget);
+ mUrlLinkWidget->setLayout(urlLinkWidgetLayout);
+ QHBoxLayout* urlLinkBackButtonLayout = new QHBoxLayout();
+ QPushButton* urlLinkBackButton = new QPushButton(mUrlLinkWidget);
+ urlLinkBackButton->setIcon(QIcon(":images/toolbar/undoOn.png"));
+ urlLinkBackButtonLayout->addWidget(urlLinkBackButton);
+ urlLinkBackButtonLayout->addStretch();
+ urlLinkWidgetLayout->addLayout(urlLinkBackButtonLayout);
+ connect(urlLinkBackButton,SIGNAL(clicked()),this,SLOT(onBackButtonClicked()));
+ mUrlLineEdit = new QLineEdit(mUrlLinkWidget);
+ mUrlLineEdit->setPlaceholderText(tr("Insert url text here"));
+ mUrlLineEdit->setAcceptDrops(true);
+ urlLinkWidgetLayout->addWidget(mUrlLineEdit);
+ QHBoxLayout* urlLinkOkButtonLayout = new QHBoxLayout();
+ urlLinkOkButtonLayout->addStretch();
+ QPushButton* urlLinkOkButton = new QPushButton(tr("Ok"), mUrlLinkWidget);
+ urlLinkOkButtonLayout->addWidget(urlLinkOkButton);
+ urlLinkWidgetLayout->addLayout(urlLinkOkButtonLayout);
+ connect(urlLinkOkButton,SIGNAL(clicked()),this,SLOT(onOkLinkToWebClicked()));
+ mStackedWidget->addWidget(mUrlLinkWidget);
+ connect(actionAddLinkToWeb,SIGNAL(clicked()),this,SLOT(onAddLinkToWebClicked()));
+
+}
+
+
+void UBCreateLinkPalette::onDroppedAudioFile(QString &path)
+{
+ Q_ASSERT(path.length());
+
+ mAudioFilePath = path;
+}
+
+void UBCreateLinkPalette::onPageNumberCheckBoxClicked(bool checked)
+{
+ mPageComboBox->setEnabled(checked);
+}
+
+void UBCreateLinkPalette::onBackButtonClicked()
+{
+ mStackedWidget->setCurrentIndex(0);
+ adjustGeometry();
+}
+
+void UBCreateLinkPalette::onPlayAudioClicked()
+{
+ mStackedWidget->setCurrentIndex(1);
+}
+
+void UBCreateLinkPalette::onAddLinkToPageClicked()
+{
+ mStackedWidget->setCurrentIndex(2);
+}
+
+void UBCreateLinkPalette::onAddLinkToWebClicked()
+{
+ mStackedWidget->setCurrentIndex(3);
+}
+
+void UBCreateLinkPalette::onOkAudioClicked()
+{
+ emit definedAction(new UBGraphicsItemPlayAudioAction(mAudioFilePath));
+ close();
+}
+
+void UBCreateLinkPalette::onOkLinkToPageClicked()
+{
+ eUBGraphicsItemMovePageAction id = (eUBGraphicsItemMovePageAction)mButtonGroup->checkedId();
+ UBGraphicsItemMoveToPageAction* action = 0;
+ if(id!= eMoveToPage)
+ action = new UBGraphicsItemMoveToPageAction(id);
+ else
+ action = new UBGraphicsItemMoveToPageAction(id,mPageComboBox->currentText().toInt());
+ emit definedAction(action);
+ close();
+}
+
+void UBCreateLinkPalette::onOkLinkToWebClicked()
+{
+ emit definedAction(new UBGraphicsItemLinkToWebPageAction (mUrlLineEdit->text()));
+ close();
+}
+
+void UBCreateLinkPalette::paintEvent(QPaintEvent *event)
+{
+ UBFloatingPalette::paintEvent(event);
+
+ QPainter painter(this);
+ painter.drawPixmap(0, 0, QPixmap(":/images/close.svg"));
+}
+
+
+void UBCreateLinkPalette::close()
+{
+ hide();
+}
+
+
+void UBCreateLinkPalette::mouseReleaseEvent(QMouseEvent * event)
+{
+ if (event->pos().x() >= 0 && event->pos().x() < QPixmap(":/images/close.svg").width()
+ && event->pos().y() >= 0 && event->pos().y() < QPixmap(":/images/close.svg").height())
+ {
+ event->accept();
+ close();
+ }
+
+ UBFloatingPalette::mouseReleaseEvent(event);
+}
+
+
+void UBCreateLinkPalette::showEvent(QShowEvent *event)
+{
+ Q_UNUSED(event);
+ adjustGeometry();
+}
+
+void UBCreateLinkPalette::adjustGeometry()
+{
+ if(mIsFirstTime){
+ adjustSizeAndPosition();
+ move((parentWidget()->width() - width()) / 2, (parentWidget()->height() - height()) / 5);
+ mIsFirstTime = false;
+ }
+}
diff --git a/Sankore-3.1/src/gui/UBCreateLinkPalette.h b/Sankore-3.1/src/gui/UBCreateLinkPalette.h
new file mode 100644
index 0000000..8838ac7
--- /dev/null
+++ b/Sankore-3.1/src/gui/UBCreateLinkPalette.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+#ifndef UBCREATELINKPALETTE_H
+#define UBCREATELINKPALETTE_H
+
+class QVBoxLayout;
+class QStackedWidget;
+class QToolButton;
+class QWidget;
+class UBGraphicsItemAction;
+class QLineEdit;
+class QButtonGroup;
+class QComboBox;
+class QDropEvent;
+
+#include <QMap>
+#include <QLabel>
+
+#include "UBFloatingPalette.h"
+
+class UBCreateLinkLabel : public QLabel
+{
+ Q_OBJECT
+
+public:
+ explicit UBCreateLinkLabel(QString labelText, QWidget* parent = 0);
+
+signals:
+ void droppedFile(QString& path);
+
+protected:
+ void dropEvent(QDropEvent* event);
+ void dragEnterEvent(QDragEnterEvent *event);
+ void dragLeaveEvent(QDragLeaveEvent *event);
+private:
+ QString mInitialText;
+
+};
+
+
+class UBCreateLinkPalette : public UBFloatingPalette
+{
+ Q_OBJECT
+public:
+ explicit UBCreateLinkPalette(QWidget *parent = 0);
+ ~UBCreateLinkPalette();
+signals:
+ void definedAction(UBGraphicsItemAction* action);
+
+public slots:
+
+protected:
+ virtual void paintEvent(QPaintEvent *event);
+ virtual void mouseReleaseEvent(QMouseEvent * event);
+ virtual void showEvent(QShowEvent *event);
+
+private:
+ void close();
+ void adjustGeometry();
+ void init();
+ QToolButton* addInitiaWidgetButton(QString textButton, QString iconPath);
+ QWidget* addBasicFunctionaliltiesToWidget(QWidget* centralWidget);
+
+ QVBoxLayout* mLayout;
+ QStackedWidget* mStackedWidget;
+ QWidget* mInitialWidget;
+ QWidget* mAudioWidget;
+ QWidget* mPageLinkWidget;
+ QWidget* mUrlLinkWidget;
+
+ QLineEdit* mUrlLineEdit;
+ QButtonGroup* mButtonGroup;
+ QComboBox* mPageComboBox;
+ UBCreateLinkLabel* mpAudioLabel;
+ QString mAudioFilePath;
+ bool mIsFirstTime;
+
+private slots:
+ void onBackButtonClicked();
+ void onPlayAudioClicked();
+ void onAddLinkToPageClicked();
+ void onAddLinkToWebClicked();
+
+ void onOkAudioClicked();
+ void onOkLinkToPageClicked();
+ void onOkLinkToWebClicked();
+
+ void onPageNumberCheckBoxClicked(bool checked);
+
+ void onDroppedAudioFile(QString& path);
+};
+
+#endif // UBCREATELINKPALETTE_H
diff --git a/Sankore-3.1/src/gui/UBDockDownloadWidget.cpp b/Sankore-3.1/src/gui/UBDockDownloadWidget.cpp
index 505bd2c..b310338 100644
--- a/Sankore-3.1/src/gui/UBDockDownloadWidget.cpp
+++ b/Sankore-3.1/src/gui/UBDockDownloadWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBDockDownloadWidget.h"
#include "core/UBApplication.h"
@@ -36,9 +37,6 @@ UBDockDownloadWidget::UBDockDownloadWidget(QWidget *parent, const char *name):UB
SET_STYLE_SHEET();
- mIconToLeft = QPixmap(":images/download_open.png");
- mIconToRight = QPixmap(":images/download_close.png");
-
mpLayout = new QVBoxLayout(this);
setLayout(mpLayout);
diff --git a/Sankore-3.1/src/gui/UBDockDownloadWidget.h b/Sankore-3.1/src/gui/UBDockDownloadWidget.h
index c887192..4b6d362 100644
--- a/Sankore-3.1/src/gui/UBDockDownloadWidget.h
+++ b/Sankore-3.1/src/gui/UBDockDownloadWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOCKDOWNLOADWIDGET_H
#define UBDOCKDOWNLOADWIDGET_H
@@ -41,6 +42,8 @@ public:
return mode == eUBDockPaletteWidget_BOARD;
}
+ QPixmap iconToLeft() const {return QPixmap(":images/download_open.png");}
+ QPixmap iconToRight() const {return QPixmap(":images/download_close.png");}
private:
QVBoxLayout* mpLayout;
diff --git a/Sankore-3.1/src/gui/UBDockPalette.cpp b/Sankore-3.1/src/gui/UBDockPalette.cpp
index 479b658..aea2177 100644
--- a/Sankore-3.1/src/gui/UBDockPalette.cpp
+++ b/Sankore-3.1/src/gui/UBDockPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QPoint>
#include <QPointF>
#include <QPainterPath>
@@ -57,42 +58,42 @@ UBDockPalette::UBDockPalette(eUBDockPaletteType paletteType, QWidget *parent, co
, mPaletteType(paletteType)
, mTabPalette(new UBTabDockPalette(this, parent))
{
- setObjectName(name);
+ setObjectName(name);
- mpLayout = new QVBoxLayout();
- setLayout(mpLayout);
+ mpLayout = new QVBoxLayout();
+ setLayout(mpLayout);
- mpStackWidget = new QStackedWidget(this);
- mpLayout->addWidget(mpStackWidget);
+ mpStackWidget = new QStackedWidget(this);
+ mpLayout->addWidget(mpStackWidget);
- // clear the tab widgets
- mTabWidgets.clear();
+ // clear the tab widgets
+ mTabWidgets.clear();
- // We let 2 pixels in order to keep a small border for the resizing
- setMinimumWidth(0);
+ // We let 2 pixels in order to keep a small border for the resizing
+ setMinimumWidth(0);
- if (parent)
- {
- setAttribute(Qt::WA_NoMousePropagation);
- setAttribute(Qt::WA_TranslucentBackground);
- }
- else
- {
- // standalone window
- setAttribute(Qt::WA_TranslucentBackground);
- }
+ if (parent)
+ {
+ setAttribute(Qt::WA_NoMousePropagation);
+ setAttribute(Qt::WA_TranslucentBackground);
+ }
+ else
+ {
+ // standalone window
+ setAttribute(Qt::WA_TranslucentBackground);
+ }
- mBackgroundBrush = QBrush(UBSettings::paletteColor);
+ mBackgroundBrush = QBrush(UBSettings::paletteColor);
- // This is the only way to set the background as transparent!
- setStyleSheet("QWidget {background-color: transparent}");
+ // This is the only way to set the background as transparent!
+ setStyleSheet("QWidget {background-color: transparent}");
- // Set the position of the tab
- onToolbarPosUpdated();
- connect(UBSettings::settings()->appToolBarPositionedAtTop, SIGNAL(changed(QVariant)), this, SLOT(onToolbarPosUpdated()));
- connect(UBDownloadManager::downloadManager(), SIGNAL(allDownloadsFinished()), this, SLOT(onAllDownloadsFinished()));
+ // Set the position of the tab
+ onToolbarPosUpdated();
+ connect(UBSettings::settings()->appToolBarPositionedAtTop, SIGNAL(changed(QVariant)), this, SLOT(onToolbarPosUpdated()));
+ connect(UBDownloadManager::downloadManager(), SIGNAL(allDownloadsFinished()), this, SLOT(onAllDownloadsFinished()));
- connect(UBApplication::boardController,SIGNAL(documentSet(UBDocumentProxy*)),this,SLOT(onDocumentSet(UBDocumentProxy*)));
+ connect(UBApplication::boardController,SIGNAL(documentSet(UBDocumentProxy*)),this,SLOT(onDocumentSet(UBDocumentProxy*)));
}
/**
@@ -100,21 +101,21 @@ UBDockPalette::UBDockPalette(eUBDockPaletteType paletteType, QWidget *parent, co
*/
UBDockPalette::~UBDockPalette()
{
- if(NULL != mpStackWidget)
- {
- delete mpStackWidget;
- mpStackWidget = NULL;
- }
- if(NULL != mpLayout)
- {
- delete mpLayout;
- mpLayout = NULL;
- }
+ if(NULL != mpStackWidget)
+ {
+ delete mpStackWidget;
+ mpStackWidget = NULL;
+ }
+ if(NULL != mpLayout)
+ {
+ delete mpLayout;
+ mpLayout = NULL;
+ }
}
void UBDockPalette::onDocumentSet(UBDocumentProxy* documentProxy)
{
- Q_UNUSED(documentProxy);
+ Q_UNUSED(documentProxy);
}
/**
@@ -123,7 +124,7 @@ void UBDockPalette::onDocumentSet(UBDocumentProxy* documentProxy)
*/
eUBDockOrientation UBDockPalette::orientation()
{
- return mOrientation;
+ return mOrientation;
}
/**
@@ -132,19 +133,19 @@ eUBDockOrientation UBDockPalette::orientation()
*/
void UBDockPalette::setOrientation(eUBDockOrientation orientation)
{
- // Set the size
- mOrientation = orientation;
+ // Set the size
+ mOrientation = orientation;
- if(orientation == eUBDockOrientation_Left || orientation == eUBDockOrientation_Right)
- {
- setMaximumHeight(parentWidget()->height());
- setMinimumHeight(maximumHeight());
- }
- else if(orientation == eUBDockOrientation_Top || orientation == eUBDockOrientation_Bottom)
- {
- setMaximumWidth(parentWidget()->width());
- setMinimumWidth(maximumWidth());
- }
+ if(orientation == eUBDockOrientation_Left || orientation == eUBDockOrientation_Right)
+ {
+ setMaximumHeight(parentWidget()->height());
+ setMinimumHeight(maximumHeight());
+ }
+ else if(orientation == eUBDockOrientation_Top || orientation == eUBDockOrientation_Bottom)
+ {
+ setMaximumWidth(parentWidget()->width());
+ setMinimumWidth(maximumWidth());
+ }
}
/**
@@ -153,32 +154,32 @@ void UBDockPalette::setOrientation(eUBDockOrientation orientation)
*/
void UBDockPalette::resizeEvent(QResizeEvent *event)
{
- Q_UNUSED(event);
- updateMaxWidth();
- if(parentWidget())
- {
- setMinimumHeight(parentWidget()->height());
- }
- // Set the position
- QPoint origin;
- switch(mOrientation)
- {
- case eUBDockOrientation_Right:
- origin.setX(parentWidget()->width() - this->width());
- origin.setY(0);
- break;
- case eUBDockOrientation_Bottom:
- // Not supported yet
- case eUBDockOrientation_Top:
- // Not supported yet
- case eUBDockOrientation_Left:
- default:
- origin.setX(0);
- origin.setY(0);
- break;
- }
- move(origin.x(), origin.y());
- moveTabs();
+ Q_UNUSED(event);
+ updateMaxWidth();
+ if(parentWidget())
+ {
+ setMinimumHeight(parentWidget()->height());
+ }
+ // Set the position
+ QPoint origin;
+ switch(mOrientation)
+ {
+ case eUBDockOrientation_Right:
+ origin.setX(parentWidget()->width() - this->width());
+ origin.setY(0);
+ break;
+ case eUBDockOrientation_Bottom:
+ // Not supported yet
+ case eUBDockOrientation_Top:
+ // Not supported yet
+ case eUBDockOrientation_Left:
+ default:
+ origin.setX(0);
+ origin.setY(0);
+ break;
+ }
+ move(origin.x(), origin.y());
+ moveTabs();
}
/**
@@ -187,9 +188,9 @@ void UBDockPalette::resizeEvent(QResizeEvent *event)
*/
void UBDockPalette::enterEvent(QEvent *event)
{
- Q_UNUSED(event);
- // We want to set the cursor as an arrow everytime it enters the palette
- setCursor(Qt::ArrowCursor);
+ Q_UNUSED(event);
+ // We want to set the cursor as an arrow everytime it enters the palette
+ setCursor(Qt::ArrowCursor);
}
/**
@@ -198,9 +199,9 @@ void UBDockPalette::enterEvent(QEvent *event)
*/
void UBDockPalette::leaveEvent(QEvent *event)
{
- Q_UNUSED(event);
- // Restore the cursor to its previous shape
- unsetCursor();
+ Q_UNUSED(event);
+ // Restore the cursor to its previous shape
+ unsetCursor();
}
/**
@@ -209,38 +210,29 @@ void UBDockPalette::leaveEvent(QEvent *event)
*/
void UBDockPalette::paintEvent(QPaintEvent *event)
{
- Q_UNUSED(event);
- QPainter painter(this);
- painter.setRenderHint(QPainter::Antialiasing);
- painter.setPen(Qt::NoPen);
- painter.setBrush(mBackgroundBrush);
- QPainterPath path;
- path.setFillRule(Qt::WindingFill);
-
- int nbTabs = mTabWidgets.size();
- if(0 < nbTabs)
- {
- // First draw the BIG RECTANGLE (I write it big because the rectangle is big...)
- if(mOrientation == eUBDockOrientation_Left)
- {
- path.addRect(0.0, 0.0, width(), height());
- }
- else if(mOrientation == eUBDockOrientation_Right)
- {
- path.addRect(0.0, 0.0, width(), height());
- }
-
- // THEN DRAW THE small tabs (yes, the tabs are small...)
- if(eUBDockTabOrientation_Up == mTabsOrientation)
- {
- mHTab = border();
- }
- else
- {
- mHTab = height() - border() - nbTabs*TABSIZE - (nbTabs-1)*tabSpacing();
- }
- painter.drawPath(path);
- }
+ Q_UNUSED(event);
+ QPainter painter(this);
+ painter.setRenderHint(QPainter::Antialiasing);
+ painter.setPen(Qt::NoPen);
+ painter.setBrush(mBackgroundBrush);
+ QPainterPath path;
+ path.setFillRule(Qt::WindingFill);
+
+ int nbTabs = mTabWidgets.size();
+ if(0 < nbTabs)
+ {
+ // First draw the BIG RECTANGLE (I write it big because the rectangle is big...)
+ if(mOrientation == eUBDockOrientation_Left)
+ {
+ path.addRect(0.0, 0.0, width(), height());
+ }
+ else if(mOrientation == eUBDockOrientation_Right)
+ {
+ path.addRect(0.0, 0.0, width(), height());
+ }
+
+ painter.drawPath(path);
+ }
}
/**
@@ -249,11 +241,11 @@ void UBDockPalette::paintEvent(QPaintEvent *event)
*/
void UBDockPalette::setBackgroundBrush(const QBrush &brush)
{
- if (mBackgroundBrush != brush)
- {
- mBackgroundBrush = brush;
- update();
- }
+ if (mBackgroundBrush != brush)
+ {
+ mBackgroundBrush = brush;
+ update();
+ }
}
/**
@@ -262,7 +254,7 @@ void UBDockPalette::setBackgroundBrush(const QBrush &brush)
*/
int UBDockPalette::border()
{
- return 15;
+ return 15;
}
/**
@@ -271,7 +263,7 @@ int UBDockPalette::border()
*/
int UBDockPalette::radius()
{
- return 5;
+ return 5;
}
/**
@@ -279,7 +271,7 @@ int UBDockPalette::radius()
*/
void UBDockPalette::updateMaxWidth()
{
- // Only the inherited class will overload this method
+ // Only the inherited class will overload this method
}
/**
@@ -288,7 +280,7 @@ void UBDockPalette::updateMaxWidth()
*/
int UBDockPalette::collapseWidth()
{
- return mCollapseWidth;
+ return mCollapseWidth;
}
/**
@@ -296,17 +288,17 @@ int UBDockPalette::collapseWidth()
*/
void UBDockPalette::tabClicked(int tabIndex)
{
- // If the current tab is not the clicked one, show its content
- if(mCurrentTab != tabIndex)
- {
- showTabWidget(tabIndex);
- }
- // else collapse the palette
- else
- {
- toggleCollapseExpand();
- }
- mTabPalette->update();
+ // If the current tab is not the clicked one, show its content
+ if(mCurrentTab != tabIndex)
+ {
+ showTabWidget(tabIndex);
+ }
+ // else collapse the palette
+ else
+ {
+ toggleCollapseExpand();
+ }
+ mTabPalette->update();
}
/**
@@ -315,13 +307,13 @@ void UBDockPalette::tabClicked(int tabIndex)
*/
void UBDockPalette::showTabWidget(int tabIndex)
{
- mpStackWidget->setCurrentIndex(tabIndex);
- mCurrentTab = tabIndex;
+ mpStackWidget->setCurrentIndex(tabIndex);
+ mCurrentTab = tabIndex;
- // Update the current tab index
- if(NULL != (dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex)))){
- mCrntTabWidget = dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex))->name();
- }
+ // Update the current tab index
+ if(NULL != (dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex)))){
+ mCrntTabWidget = dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex))->name();
+ }
}
@@ -330,13 +322,13 @@ void UBDockPalette::showTabWidget(int tabIndex)
*/
void UBDockPalette::toggleCollapseExpand()
{
- if(width() < mCollapseWidth)
- resize(mLastWidth,height());
- else{
- mLastWidth = width();
+ if(width() < mCollapseWidth)
+ resize(mLastWidth,height());
+ else{
+ mLastWidth = width();
update();
- resize(0,height());
- }
+ resize(0,height());
+ }
}
/**
@@ -345,7 +337,7 @@ void UBDockPalette::toggleCollapseExpand()
*/
void UBDockPalette::setTabsOrientation(eUBDockTabOrientation orientation)
{
- mTabsOrientation = orientation;
+ mTabsOrientation = orientation;
}
/**
@@ -353,17 +345,17 @@ void UBDockPalette::setTabsOrientation(eUBDockTabOrientation orientation)
*/
void UBDockPalette::onToolbarPosUpdated()
{
- // Get the position of the tab
- if(UBSettings::settings()->appToolBarPositionedAtTop->get().toBool())
- {
- setTabsOrientation(eUBDockTabOrientation_Up);
- }
- else
- {
- setTabsOrientation(eUBDockTabOrientation_Down);
- }
- moveTabs();
- update();
+ // Get the position of the tab
+ if(UBSettings::settings()->appToolBarPositionedAtTop->get().toBool())
+ {
+ setTabsOrientation(eUBDockTabOrientation_Up);
+ }
+ else
+ {
+ setTabsOrientation(eUBDockTabOrientation_Down);
+ }
+ moveTabs();
+ update();
}
/**
@@ -372,7 +364,7 @@ void UBDockPalette::onToolbarPosUpdated()
*/
int UBDockPalette::customMargin()
{
- return 5;
+ return 5;
}
/**
@@ -381,15 +373,16 @@ int UBDockPalette::customMargin()
*/
void UBDockPalette::addTab(UBDockPaletteWidget *widget)
{
- if(!mTabWidgets.contains(widget) && widget->visibleState())
- {
- widget->setVisible(true);
- mTabWidgets.append(widget);
- mpStackWidget->addWidget(widget);
- mpStackWidget->setCurrentWidget(widget);
- resizeTabs();
- update();
- }
+ if(!mTabWidgets.contains(widget) && widget->visibleState())
+ {
+ widget->setVisible(true);
+ mTabWidgets.append(widget);
+ mpStackWidget->addWidget(widget);
+ mpStackWidget->setCurrentWidget(widget);
+ showTabWidget(mTabWidgets.indexOf(widget));
+ resizeTabs();
+ update();
+ }
}
/**
* \brief Remove the given tab
@@ -397,16 +390,16 @@ void UBDockPalette::addTab(UBDockPaletteWidget *widget)
*/
void UBDockPalette::removeTab(UBDockPaletteWidget* widget)
{
- int nWidget = mTabWidgets.indexOf(widget);
- if( nWidget >= 0 )
- {
- mpStackWidget->removeWidget(widget);
- mTabWidgets.remove(nWidget);
- widget->hide();
- update();
- }
- resizeTabs();
- mCurrentTab = qMax(mCurrentTab - 1, 0);
+ int nWidget = mTabWidgets.indexOf(widget);
+ if( nWidget >= 0 )
+ {
+ mpStackWidget->removeWidget(widget);
+ mTabWidgets.remove(nWidget);
+ widget->hide();
+ update();
+ }
+ resizeTabs();
+ mCurrentTab = qMax(mCurrentTab - 1, 0);
}
/**
@@ -415,7 +408,7 @@ void UBDockPalette::removeTab(UBDockPaletteWidget* widget)
*/
void UBDockPalette::onResizeRequest(QResizeEvent *event)
{
- resizeEvent(event);
+ resizeEvent(event);
}
/**
@@ -424,7 +417,7 @@ void UBDockPalette::onResizeRequest(QResizeEvent *event)
*/
int UBDockPalette::tabSpacing()
{
- return 2;
+ return 2;
}
/**
@@ -433,11 +426,12 @@ int UBDockPalette::tabSpacing()
*/
void UBDockPalette::onShowTabWidget(UBDockPaletteWidget* widget)
{
- if (mRegisteredWidgets.contains(widget))
- {
- widget->setVisibleState(true);
- addTab(widget);
- }
+ if (mRegisteredWidgets.contains(widget))
+ {
+ widget->setVisibleState(true);
+ addTab(widget);
+ moveTabs();
+ }
}
/**
@@ -446,11 +440,11 @@ void UBDockPalette::onShowTabWidget(UBDockPaletteWidget* widget)
*/
void UBDockPalette::onHideTabWidget(UBDockPaletteWidget* widget)
{
- if (mRegisteredWidgets.contains(widget))
- {
- widget->setVisibleState(false);
- removeTab(widget);
- }
+ if (mRegisteredWidgets.contains(widget))
+ {
+ widget->setVisibleState(false);
+ removeTab(widget);
+ }
}
/**
@@ -458,11 +452,11 @@ void UBDockPalette::onHideTabWidget(UBDockPaletteWidget* widget)
*/
void UBDockPalette::connectSignals()
{
- for(int i=0; i < mRegisteredWidgets.size(); i++)
- {
- connect(mRegisteredWidgets.at(i), SIGNAL(showTab(UBDockPaletteWidget*)), this, SLOT(onShowTabWidget(UBDockPaletteWidget*)));
- connect(mRegisteredWidgets.at(i), SIGNAL(hideTab(UBDockPaletteWidget*)), this, SLOT(onHideTabWidget(UBDockPaletteWidget*)));
- }
+ for(int i=0; i < mRegisteredWidgets.size(); i++)
+ {
+ connect(mRegisteredWidgets.at(i), SIGNAL(showTab(UBDockPaletteWidget*)), this, SLOT(onShowTabWidget(UBDockPaletteWidget*)));
+ connect(mRegisteredWidgets.at(i), SIGNAL(hideTab(UBDockPaletteWidget*)), this, SLOT(onHideTabWidget(UBDockPaletteWidget*)));
+ }
}
/**
@@ -471,15 +465,15 @@ void UBDockPalette::connectSignals()
*/
void UBDockPalette::registerWidget(UBDockPaletteWidget *widget)
{
- if(!mRegisteredWidgets.contains(widget))
- {
- // Update the parent of this widget
- widget->setParent(this);
- mRegisteredWidgets.append(widget);
+ if(!mRegisteredWidgets.contains(widget))
+ {
+ // Update the parent of this widget
+ widget->setParent(this);
+ mRegisteredWidgets.append(widget);
- // By default, the widget is hidden
- widget->hide();
- }
+ // By default, the widget is hidden
+ widget->hide();
+ }
}
/**
@@ -487,180 +481,181 @@ void UBDockPalette::registerWidget(UBDockPaletteWidget *widget)
*/
void UBDockPalette::onAllDownloadsFinished()
{
- for(int i=0; i<mTabWidgets.size(); i++){
- UBDockPaletteWidget* pW = mTabWidgets.at(i);
- if(NULL != pW && mCrntTabWidget == pW->name()){
- mpStackWidget->setCurrentWidget(pW);
- }
- }
+ for(int i=0; i<mTabWidgets.size(); i++){
+ UBDockPaletteWidget* pW = mTabWidgets.at(i);
+ if(NULL != pW && mCrntTabWidget == pW->name()){
+ mpStackWidget->setCurrentWidget(pW);
+ }
+ }
}
void UBDockPalette::moveTabs()
{
- // if (!mHTab) {
- if(eUBDockTabOrientation_Up == mTabsOrientation) {
- mHTab = border();
- } else {
- mHTab = height() - border() - mTabWidgets.size() * TABSIZE - (mTabWidgets.size() - 1) * tabSpacing();
- }
- // }
-
- QPoint origin(width(), mHTab + mTabPalette->mVerticalOffset);
-
- switch (mOrientation) {
- case eUBDockOrientation_Left:
- origin.setX(width());
- break;
- case eUBDockOrientation_Right:
- if (parentWidget()) {
- origin.setX(parentWidget()->width() - width() - border() * 2);
- }
- break;
- case eUBDockOrientation_Top: ;
- case eUBDockOrientation_Bottom: ;
- }
-
- mTabPalette->move(origin.x(), origin.y());
+ // if (!mHTab) {
+ if(eUBDockTabOrientation_Up == mTabsOrientation) {
+ mHTab = border();
+ } else {
+ mHTab = height() - border() - mTabWidgets.size() * TABSIZE - (mTabWidgets.size() - 1) * tabSpacing();
+ }
+ // }
+
+ QPoint origin(width(), mHTab + mTabPalette->mVerticalOffset);
+
+ switch (mOrientation) {
+ case eUBDockOrientation_Left:
+ origin.setX(width());
+ break;
+ case eUBDockOrientation_Right:
+ if (parentWidget()) {
+ origin.setX(parentWidget()->width() - width() - border() * 2);
+ }
+ break;
+ case eUBDockOrientation_Top: ;
+ case eUBDockOrientation_Bottom: ;
+ }
+
+ mTabPalette->move(origin.x(), origin.y());
}
void UBDockPalette::resizeTabs()
{
- int numTabs = mTabWidgets.size();
- mTabPalette->setFixedSize(2 * border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * tabSpacing());
+ int numTabs = mTabWidgets.size();
+ mTabPalette->setFixedSize(2 * border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * tabSpacing());
}
+
QRect UBDockPalette::getTabPaletteRect()
{
- QRect tabsRect = mTabPalette->rect();
- QPoint topLeft = mTabPalette->mapToParent(tabsRect.topLeft());
- QPoint bottomRight = mTabPalette->mapToParent(tabsRect.bottomRight());
+ QRect tabsRect = mTabPalette->rect();
+ QPoint topLeft = mTabPalette->mapToParent(tabsRect.topLeft());
+ QPoint bottomRight = mTabPalette->mapToParent(tabsRect.bottomRight());
- return QRect(topLeft, bottomRight);
+ return QRect(topLeft, bottomRight);
}
void UBDockPalette::assignParent(QWidget *widget)
{
- setParent(widget);
- mTabPalette->setParent(widget);
+ setParent(widget);
+ mTabPalette->setParent(widget);
}
void UBDockPalette::setVisible(bool visible)
{
- QWidget::setVisible(visible);
- mTabPalette->setVisible(visible);
+ QWidget::setVisible(visible);
+ mTabPalette->setVisible(visible);
}
bool UBDockPalette::switchMode(eUBDockPaletteWidgetMode mode)
{
- mLastOpenedTabForMode.insert(mCurrentMode, mpStackWidget->currentIndex());
- mCurrentMode = mode;
- bool hasVisibleElements = false;
- //-------------------------------//
- // get full palette widgets list, parse it, show all widgets for BOARD mode, and hide all other
- for(int i = 0; i < mRegisteredWidgets.size(); i++)
- {
- UBDockPaletteWidget* pNextWidget = mRegisteredWidgets.at(i);
- if( pNextWidget != NULL )
- {
- if( pNextWidget->visibleInMode(mode) )
- {
- addTab(pNextWidget);
- hasVisibleElements = true;
- }
- else
- {
- removeTab(pNextWidget);
- }
- }
- }
- //-------------------------------//
-
- if(mRegisteredWidgets.size() > 0)
- showTabWidget(mLastOpenedTabForMode.value(mCurrentMode));
-
- update();
-
- return hasVisibleElements;
+ mLastOpenedTabForMode.insert(mCurrentMode, mpStackWidget->currentIndex());
+ mCurrentMode = mode;
+ bool hasVisibleElements = false;
+ //-------------------------------//
+ // get full palette widgets list, parse it, show all widgets for BOARD mode, and hide all other
+ for(int i = 0; i < mRegisteredWidgets.size(); i++)
+ {
+ UBDockPaletteWidget* pNextWidget = mRegisteredWidgets.at(i);
+ if( pNextWidget != NULL )
+ {
+ if( pNextWidget->visibleInMode(mode) )
+ {
+ addTab(pNextWidget);
+ hasVisibleElements = true;
+ }
+ else
+ {
+ removeTab(pNextWidget);
+ }
+ }
+ }
+ //-------------------------------//
+
+ if(mRegisteredWidgets.size() > 0)
+ showTabWidget(mLastOpenedTabForMode.value(mCurrentMode));
+
+ update();
+
+ return hasVisibleElements;
}
UBTabDockPalette::UBTabDockPalette(UBDockPalette *dockPalette, QWidget *parent) :
- QWidget(parent)
+ QWidget(parent)
, dock(dockPalette)
, mVerticalOffset(0)
, mFlotable(false)
{
- int numTabs = dock->mTabWidgets.size();
- resize(2 * dock->border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * dock->tabSpacing());
+ int numTabs = dock->mTabWidgets.size();
+ resize(2 * dock->border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * dock->tabSpacing());
- setAttribute(Qt::WA_TranslucentBackground);
+ setAttribute(Qt::WA_TranslucentBackground);
}
void UBTabDockPalette::paintEvent(QPaintEvent *)
{
- int nTabs = dock->mTabWidgets.size();
- if (nTabs <= 0) {
- qDebug() << "not enough tabs";
- return;
- }
-
- QPainter painter(this);
- painter.setRenderHint(QPainter::Antialiasing);
- painter.setPen(Qt::NoPen);
- painter.setBrush(dock->mBackgroundBrush);
-
- int yFrom = 0;
- for (int i = 0; i < nTabs; i++) {
- UBDockPaletteWidget* pCrntWidget = dock->mTabWidgets.at(i);
- QPainterPath path;
- path.setFillRule(Qt::WindingFill);
- QPixmap iconPixmap;
-
- switch (dock->mOrientation) {
- case eUBDockOrientation_Left:
- path.addRect(0, yFrom, width() / 2, TABSIZE);
- path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius());
- if (pCrntWidget) {
- if(dock->mCollapseWidth >= dock->width()) {
- // Get the collapsed icon
- iconPixmap = pCrntWidget->iconToRight();
- } else {
- // Get the expanded icon
- iconPixmap = pCrntWidget->iconToLeft();
- }
-
- }
- break;
-
- case eUBDockOrientation_Right:
- path.addRect(width() /2, yFrom, width() / 2, TABSIZE);
- path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius());
- if (pCrntWidget) {
- if(dock->mCollapseWidth >= dock->width()) {
- // Get the collapsed icon
- iconPixmap = pCrntWidget->iconToLeft();
- } else {
- // Get the expanded icon
- iconPixmap = pCrntWidget->iconToRight();
- }
- }
- break;
-
- case eUBDockOrientation_Top: ;
- case eUBDockOrientation_Bottom: ;
- default:
- break;
- }
-
- painter.save();
- QPixmap transparencyPix(":/images/tab_mask.png");
- if (dock->mCurrentTab != i) {
- iconPixmap.setAlphaChannel(transparencyPix);
- QColor color(0x7F, 0x7F, 0x7F, 0x3F);
- painter.setBrush(QBrush(color));
- }
-
- painter.drawPath(path);
- painter.drawPixmap(2, yFrom + 2, width() - 4, TABSIZE - 4, iconPixmap);
- yFrom += (TABSIZE + dock->tabSpacing());
- painter.restore();
- }
+ int nTabs = dock->mTabWidgets.size();
+ if (nTabs <= 0) {
+ qDebug() << "not enough tabs";
+ return;
+ }
+
+ QPainter painter(this);
+ painter.setRenderHint(QPainter::Antialiasing);
+ painter.setPen(Qt::NoPen);
+ painter.setBrush(dock->mBackgroundBrush);
+
+ int yFrom = 0;
+ for (int i = 0; i < nTabs; i++) {
+ UBDockPaletteWidget* pCrntWidget = dock->mTabWidgets.at(i);
+ QPainterPath path;
+ path.setFillRule(Qt::WindingFill);
+ QPixmap iconPixmap;
+
+ switch (dock->mOrientation) {
+ case eUBDockOrientation_Left:
+ path.addRect(0, yFrom, width() / 2, TABSIZE);
+ path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius());
+ if (pCrntWidget) {
+ if(dock->mCollapseWidth >= dock->width()) {
+ // Get the collapsed icon
+ iconPixmap = pCrntWidget->iconToRight();
+ } else {
+ // Get the expanded icon
+ iconPixmap = pCrntWidget->iconToLeft();
+ }
+
+ }
+ break;
+
+ case eUBDockOrientation_Right:
+ path.addRect(width() /2, yFrom, width() / 2, TABSIZE);
+ path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius());
+ if (pCrntWidget) {
+ if(dock->mCollapseWidth >= dock->width()) {
+ // Get the collapsed icon
+ iconPixmap = pCrntWidget->iconToLeft();
+ } else {
+ // Get the expanded icon
+ iconPixmap = pCrntWidget->iconToRight();
+ }
+ }
+ break;
+
+ case eUBDockOrientation_Top: ;
+ case eUBDockOrientation_Bottom: ;
+ default:
+ break;
+ }
+
+ painter.save();
+ QPixmap transparencyPix(":/images/tab_mask.png");
+ if (dock->mCurrentTab != i) {
+ iconPixmap.setAlphaChannel(transparencyPix);
+ QColor color(0x7F, 0x7F, 0x7F, 0x3F);
+ painter.setBrush(QBrush(color));
+ }
+
+ painter.drawPath(path);
+ painter.drawPixmap(2, yFrom + 2, width() - 4, TABSIZE - 4, iconPixmap);
+ yFrom += (TABSIZE + dock->tabSpacing());
+ painter.restore();
+ }
}
UBTabDockPalette::~UBTabDockPalette()
{
@@ -668,100 +663,100 @@ UBTabDockPalette::~UBTabDockPalette()
void UBTabDockPalette::mousePressEvent(QMouseEvent *event)
{
- dock->mClickTime = QTime::currentTime();
- // The goal here is to verify if the user can resize the widget.
- // It is only possible to resize it if the border is selected
- QPoint p = event->pos();
- dock->mMousePressPos = p;
- dock->mResized = false;
-
- switch(dock->mOrientation) {
- case eUBDockOrientation_Left:
- dock->mCanResize = true;
- break;
- case eUBDockOrientation_Right:
- dock->mCanResize = true;
- break;
- case eUBDockOrientation_Top:
- // Not supported yet
- break;
- case eUBDockOrientation_Bottom:
- // Not supported yet
- break;
- default:
- break;
- }
+ dock->mClickTime = QTime::currentTime();
+ // The goal here is to verify if the user can resize the widget.
+ // It is only possible to resize it if the border is selected
+ QPoint p = event->pos();
+ dock->mMousePressPos = p;
+ dock->mResized = false;
+
+ switch(dock->mOrientation) {
+ case eUBDockOrientation_Left:
+ dock->mCanResize = true;
+ break;
+ case eUBDockOrientation_Right:
+ dock->mCanResize = true;
+ break;
+ case eUBDockOrientation_Top:
+ // Not supported yet
+ break;
+ case eUBDockOrientation_Bottom:
+ // Not supported yet
+ break;
+ default:
+ break;
+ }
}
void UBTabDockPalette::mouseMoveEvent(QMouseEvent *event)
{
- QPoint p = event->pos();
+ QPoint p = event->pos();
- if(dock->mCanResize && ((dock->mMousePressPos - p).manhattanLength() > QApplication::startDragDistance()))
- {
- if (qAbs(dock->mMousePressPos.y() - p.y()) > 10 && mFlotable) {
- qDebug() << "y differences" << dock->mMousePressPos.y() << p.y();
- mVerticalOffset += p.y() - dock->mMousePressPos.y();
- move(this->pos().x(), p.y());
- }
+ if(dock->mCanResize && ((dock->mMousePressPos - p).manhattanLength() > QApplication::startDragDistance()))
+ {
+ if (qAbs(dock->mMousePressPos.y() - p.y()) > 10 && mFlotable) {
+ qDebug() << "y differences" << dock->mMousePressPos.y() << p.y();
+ mVerticalOffset += p.y() - dock->mMousePressPos.y();
+ move(this->pos().x(), p.y());
+ }
- switch(dock->mOrientation) {
+ switch(dock->mOrientation) {
- case eUBDockOrientation_Left:
- p.setX(p.x() + dock->width());
- if(p.x() < dock->collapseWidth() && p.x() >= dock->minimumWidth()) {
+ case eUBDockOrientation_Left:
+ p.setX(p.x() + dock->width());
+ if(p.x() < dock->collapseWidth() && p.x() >= dock->minimumWidth()) {
dock->update();
- dock->resize(0, dock->height());
- //dock->mLastWidth = dock->collapseWidth() + 1;
- dock->mResized = true;
- } else if (p.x() <= dock->maximumWidth() && p.x() >= dock->minimumWidth()) {
- dock->resize(p.x(), dock->height());
- dock->mResized = true;
- }
- break;
-
- case eUBDockOrientation_Right:
- p.setX(p.x() - 2 * dock->border());
- if((dock->x() + p.x() > dock->parentWidget()->width() - dock->collapseWidth()) && (dock->x() + p.x() < dock->parentWidget()->width())) {
+ dock->resize(0, dock->height());
+ //dock->mLastWidth = dock->collapseWidth() + 1;
+ dock->mResized = true;
+ } else if (p.x() <= dock->maximumWidth() && p.x() >= dock->minimumWidth()) {
+ dock->resize(p.x(), dock->height());
+ dock->mResized = true;
+ }
+ break;
+
+ case eUBDockOrientation_Right:
+ p.setX(p.x() - 2 * dock->border());
+ if((dock->x() + p.x() > dock->parentWidget()->width() - dock->collapseWidth()) && (dock->x() + p.x() < dock->parentWidget()->width())) {
dock->update();
- dock->resize(0, dock->height());
- //dock->mLastWidth = dock->collapseWidth() + 1;
- dock->mResized = true;
- } else if((dock->x() + p.x() >= dock->parentWidget()->width() - dock->maximumWidth()) && (dock->x() + p.x() <= dock->parentWidget()->width() - dock->minimumWidth())) {
- dock->resize(dock->parentWidget()->width() - (dock->x() + p.x()), dock->height());
- dock->mResized = true;
- }
- break;
-
- case eUBDockOrientation_Top:
- case eUBDockOrientation_Bottom:
- if(p.y() <= dock->maximumHeight()) {
- dock->resize(width(), p.y());
- dock->mResized = true;
- }
- break;
-
- default:
- break;
- }
- }
+ dock->resize(0, dock->height());
+ //dock->mLastWidth = dock->collapseWidth() + 1;
+ dock->mResized = true;
+ } else if((dock->x() + p.x() >= dock->parentWidget()->width() - dock->maximumWidth()) && (dock->x() + p.x() <= dock->parentWidget()->width() - dock->minimumWidth())) {
+ dock->resize(dock->parentWidget()->width() - (dock->x() + p.x()), dock->height());
+ dock->mResized = true;
+ }
+ break;
+
+ case eUBDockOrientation_Top:
+ case eUBDockOrientation_Bottom:
+ if(p.y() <= dock->maximumHeight()) {
+ dock->resize(width(), p.y());
+ dock->mResized = true;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
}
void UBTabDockPalette::mouseReleaseEvent(QMouseEvent *event)
{
- Q_UNUSED(event);
- if(!dock->mResized && dock->mClickTime.elapsed() < CLICKTIME) {
- int nbTabs = dock->mTabWidgets.size();
- int clickedTab = 0;
- // If the clicked position is in the tab, perform the related action
-
- if(dock->mMousePressPos.x() >= 0 &&
- dock->mMousePressPos.x() <= width() &&
- dock->mMousePressPos.y() >= 0 &&
- dock->mMousePressPos.y() <= nbTabs * TABSIZE + (nbTabs -1)*dock->tabSpacing()) {
-
- clickedTab = (dock->mMousePressPos.y()) / (TABSIZE + dock->tabSpacing());
- dock->tabClicked(clickedTab);
- }
- }
- dock->mCanResize = false;
+ Q_UNUSED(event);
+ if(!dock->mResized && dock->mClickTime.elapsed() < CLICKTIME) {
+ int nbTabs = dock->mTabWidgets.size();
+ int clickedTab = 0;
+ // If the clicked position is in the tab, perform the related action
+
+ if(dock->mMousePressPos.x() >= 0 &&
+ dock->mMousePressPos.x() <= width() &&
+ dock->mMousePressPos.y() >= 0 &&
+ dock->mMousePressPos.y() <= nbTabs * TABSIZE + (nbTabs -1)*dock->tabSpacing()) {
+
+ clickedTab = (dock->mMousePressPos.y()) / (TABSIZE + dock->tabSpacing());
+ dock->tabClicked(clickedTab);
+ }
+ }
+ dock->mCanResize = false;
}
diff --git a/Sankore-3.1/src/gui/UBDockPalette.h b/Sankore-3.1/src/gui/UBDockPalette.h
index c6ee4e4..fd67891 100644
--- a/Sankore-3.1/src/gui/UBDockPalette.h
+++ b/Sankore-3.1/src/gui/UBDockPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOCKPALETTE_H
#define UBDOCKPALETTE_H
diff --git a/Sankore-3.1/src/gui/UBDockPaletteWidget.cpp b/Sankore-3.1/src/gui/UBDockPaletteWidget.cpp
index ec03be9..d798c9d 100644
--- a/Sankore-3.1/src/gui/UBDockPaletteWidget.cpp
+++ b/Sankore-3.1/src/gui/UBDockPaletteWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,9 +20,11 @@
*/
+
#include "UBDockPaletteWidget.h"
#include "core/memcheck.h"
+#include <QIcon>
UBDockPaletteWidget::UBDockPaletteWidget(QWidget *parent, const char *name):QWidget(parent)
{
@@ -34,14 +36,14 @@ UBDockPaletteWidget::~UBDockPaletteWidget()
}
-QPixmap UBDockPaletteWidget::iconToRight()
+QPixmap UBDockPaletteWidget::iconToRight() const
{
- return mIconToRight;
+ return QPixmap();
}
-QPixmap UBDockPaletteWidget::iconToLeft()
+QPixmap UBDockPaletteWidget::iconToLeft() const
{
- return mIconToLeft;
+ return QPixmap();
}
QString UBDockPaletteWidget::name()
diff --git a/Sankore-3.1/src/gui/UBDockPaletteWidget.h b/Sankore-3.1/src/gui/UBDockPaletteWidget.h
index 63a0468..278ad61 100644
--- a/Sankore-3.1/src/gui/UBDockPaletteWidget.h
+++ b/Sankore-3.1/src/gui/UBDockPaletteWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOCKPALETTEWIDGET_H
#define UBDOCKPALETTEWIDGET_H
@@ -36,7 +37,7 @@ typedef enum
eUBDockPaletteWidget_BOARD,
eUBDockPaletteWidget_WEB,
eUBDockPaletteWidget_DOCUMENT,
- eUBDockPaletteWidget_DESKTOP,
+ eUBDockPaletteWidget_DESKTOP
} eUBDockPaletteWidgetMode;
class UBDockPaletteWidget : public QWidget
@@ -47,8 +48,8 @@ public:
UBDockPaletteWidget(QWidget* parent=0, const char* name="UBDockPaletteWidget");
~UBDockPaletteWidget();
- QPixmap iconToRight();
- QPixmap iconToLeft();
+ virtual QPixmap iconToRight() const;
+ virtual QPixmap iconToLeft() const;
QString name();
virtual bool visibleInMode(eUBDockPaletteWidgetMode mode) = 0;
@@ -67,8 +68,8 @@ public slots:
protected:
- QPixmap mIconToRight; // arrow like this: >
- QPixmap mIconToLeft; // arrow like this: <
+// QPixmap mIconToRight; // arrow like this: >
+// QPixmap mIconToLeft; // arrow like this: <
QString mName;
/* The current widget available mode list */
diff --git a/Sankore-3.1/src/gui/UBDockTeacherGuideWidget.cpp b/Sankore-3.1/src/gui/UBDockTeacherGuideWidget.cpp
index 368a2a7..d292588 100644
--- a/Sankore-3.1/src/gui/UBDockTeacherGuideWidget.cpp
+++ b/Sankore-3.1/src/gui/UBDockTeacherGuideWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "core/UBApplication.h"
#include "globals/UBGlobals.h"
@@ -37,9 +38,6 @@ UBDockTeacherGuideWidget::UBDockTeacherGuideWidget(QWidget* parent, const char*
mVisibleState = true;
SET_STYLE_SHEET();
- mIconToLeft = QPixmap(":images/teacher_open.png");
- mIconToRight = QPixmap(":images/teacher_close.png");
-
mpLayout = new QVBoxLayout(this);
setLayout(mpLayout);
mpTeacherGuideWidget = new UBTeacherGuideWidget(this);
diff --git a/Sankore-3.1/src/gui/UBDockTeacherGuideWidget.h b/Sankore-3.1/src/gui/UBDockTeacherGuideWidget.h
index 38a15a7..cd43d22 100644
--- a/Sankore-3.1/src/gui/UBDockTeacherGuideWidget.h
+++ b/Sankore-3.1/src/gui/UBDockTeacherGuideWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOCKTEACHERGUIDEWIDGET_H
#define UBDOCKTEACHERGUIDEWIDGET_H
@@ -38,6 +39,9 @@ public:
bool visibleInMode(eUBDockPaletteWidgetMode mode){ return mode == eUBDockPaletteWidget_BOARD; }
+ QPixmap iconToLeft() const {return QPixmap(":images/teacher_close.png");}
+ QPixmap iconToRight() const {return QPixmap(":images/teacher_open");}
+
UBTeacherGuideWidget* teacherGuideWidget();
private:
diff --git a/Sankore-3.1/src/gui/UBDocumentNavigator.cpp b/Sankore-3.1/src/gui/UBDocumentNavigator.cpp
index 11cd0b2..d0347fa 100644
--- a/Sankore-3.1/src/gui/UBDocumentNavigator.cpp
+++ b/Sankore-3.1/src/gui/UBDocumentNavigator.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,271 +18,281 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include <QList>
-#include <QPointF>
-#include <QPixmap>
-#include <QTransform>
-#include <QScrollBar>
-#include <QFontMetrics>
-#include <QGraphicsItem>
-#include <QGraphicsPixmapItem>
-
-#include "core/UBApplication.h"
-#include "UBDocumentNavigator.h"
-#include "board/UBBoardController.h"
-#include "adaptors/UBThumbnailAdaptor.h"
-#include "adaptors/UBSvgSubsetAdaptor.h"
-#include "document/UBDocumentController.h"
-#include "domain/UBGraphicsScene.h"
-#include "board/UBBoardPaletteManager.h"
-#include "core/UBApplicationController.h"
-
-#include "core/memcheck.h"
-
-/**
- * \brief Constructor
- * @param parent as the parent widget
- * @param name as the object name
- */
-UBDocumentNavigator::UBDocumentNavigator(QWidget *parent, const char *name):QGraphicsView(parent)
- , mScene(NULL)
- , mNbColumns(1)
- , mThumbnailWidth(0)
- , mThumbnailMinWidth(100)
-{
- setObjectName(name);
- mScene = new QGraphicsScene(this);
- setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- setScene(mScene);
- mThumbnailWidth = width() - 2*border();
-
- setFrameShadow(QFrame::Plain);
-
- connect(UBApplication::boardController, SIGNAL(documentThumbnailsUpdated(UBDocumentContainer*)), this, SLOT(generateThumbnails(UBDocumentContainer*)));
- connect(UBApplication::boardController, SIGNAL(documentPageUpdated(int)), this, SLOT(updateSpecificThumbnail(int)));
- connect(UBApplication::boardController, SIGNAL(pageSelectionChanged(int)), this, SLOT(onScrollToSelectedPage(int)));
-}
-
-/**
- * \brief Destructor
- */
-UBDocumentNavigator::~UBDocumentNavigator()
-{
- if(NULL != mScene)
- {
- delete mScene;
- mScene = NULL;
- }
-}
-
-#include "gui/UBDockTeacherGuideWidget.h"
-#include "gui/UBTeacherGuideWidget.h"
-
-/**
- * \brief Generate the thumbnails
- */
-void UBDocumentNavigator::generateThumbnails(UBDocumentContainer* source)
-{
-
- mThumbsWithLabels.clear();
- foreach(QGraphicsItem* it, mScene->items())
- {
- mScene->removeItem(it);
- delete it;
- it = NULL;
- }
-
- for(int i = 0; i < source->selectedDocument()->pageCount(); i++)
- {
- const QPixmap* pix = source->pageAt(i);
- Q_ASSERT(!pix->isNull());
- int pageIndex = UBDocumentContainer::pageFromSceneIndex(i);
-
- UBSceneThumbnailNavigPixmap* pixmapItem = new UBSceneThumbnailNavigPixmap(*pix, source->selectedDocument(), i);
-
- QString label = pageIndex == 0 ? tr("Title page") : tr("Page %0").arg(pageIndex);
- UBThumbnailTextItem *labelItem = new UBThumbnailTextItem(label);
-
- UBImgTextThumbnailElement thumbWithText(pixmapItem, labelItem);
- thumbWithText.setBorder(border());
- mThumbsWithLabels.append(thumbWithText);
-
- mScene->addItem(pixmapItem);
- mScene->addItem(labelItem);
- }
-
- // Draw the items
- refreshScene();
-}
-
-void UBDocumentNavigator::onScrollToSelectedPage(int index)
-{
- int c = 0;
- foreach(UBImgTextThumbnailElement el, mThumbsWithLabels)
- {
- if (c==index)
- {
- el.getThumbnail()->setSelected(true);
- }
- else
- {
- el.getThumbnail()->setSelected(false);
- }
- c++;
- }
-}
-
-/**
- * \brief Refresh the given thumbnail
- * @param iPage as the given page related thumbnail
- */
-void UBDocumentNavigator::updateSpecificThumbnail(int iPage)
-{
- // Generate the new thumbnail
- //UBGraphicsScene* pScene = UBApplication::boardController->activeScene();
-
- const QPixmap* pix = UBApplication::boardController->pageAt(iPage);
- UBSceneThumbnailNavigPixmap* newItem = new UBSceneThumbnailNavigPixmap(*pix, UBApplication::boardController->selectedDocument(), iPage);
-
- // Get the old thumbnail
- UBSceneThumbnailNavigPixmap* oldItem = mThumbsWithLabels.at(iPage).getThumbnail();
- if(NULL != oldItem)
- {
- mScene->removeItem(oldItem);
- mScene->addItem(newItem);
- mThumbsWithLabels[iPage].setThumbnail(newItem);
- delete oldItem;
- oldItem = NULL;
- }
-
-}
-
-/**
- * \brief Put the element in the right place in the scene.
- */
-void UBDocumentNavigator::refreshScene()
-{
- qreal thumbnailHeight = mThumbnailWidth / UBSettings::minScreenRatio;
-
- for(int i = 0; i < mThumbsWithLabels.size(); i++)
- {
- // Get the item
- UBImgTextThumbnailElement& item = mThumbsWithLabels[i];
- int columnIndex = i % mNbColumns;
- int rowIndex = i / mNbColumns;
- item.Place(rowIndex, columnIndex, mThumbnailWidth, thumbnailHeight);
- }
- scene()->setSceneRect(scene()->itemsBoundingRect());
-}
-
-/**
- * \brief Set the number of thumbnails columns
- * @param nbColumns as the number of columns
- */
-void UBDocumentNavigator::setNbColumns(int nbColumns)
-{
- mNbColumns = nbColumns;
-}
-
-/**
- * \brief Get the number of columns
- * @return the number of thumbnails columns
- */
-int UBDocumentNavigator::nbColumns()
-{
- return mNbColumns;
-}
-
-/**
- * \brief Set the thumbnails minimum width
- * @param width as the minimum width
- */
-void UBDocumentNavigator::setThumbnailMinWidth(int width)
-{
- mThumbnailMinWidth = width;
-}
-
-/**
- * \brief Get the thumbnails minimum width
- * @return the minimum thumbnails width
- */
-int UBDocumentNavigator::thumbnailMinWidth()
-{
- return mThumbnailMinWidth;
-}
-
-/**
- * \brief Get the border size
- * @return the border size in pixels
- */
-int UBDocumentNavigator::border()
-{
- return 20;
-}
-
-/**
- * \brief Handle the resize event
- * @param event as the resize event
- */
-void UBDocumentNavigator::resizeEvent(QResizeEvent *event)
-{
- Q_UNUSED(event);
-
- // Update the thumbnails width
- mThumbnailWidth = (width() > mThumbnailMinWidth) ? width() - 2*border() : mThumbnailMinWidth;
-
- // Refresh the scene
- refreshScene();
-}
-
-/**
- * \brief Handle the mouse press event
- * @param event as the mouse event
- */
-void UBDocumentNavigator::mousePressEvent(QMouseEvent *event)
-{
- QGraphicsItem* pClickedItem = itemAt(event->pos());
- if(NULL != pClickedItem)
- {
-
- // First, select the clicked item
- UBSceneThumbnailNavigPixmap* pCrntItem = dynamic_cast<UBSceneThumbnailNavigPixmap*>(pClickedItem);
-
- if(NULL == pCrntItem)
- {
- // If we fall here we may have clicked on the label instead of the thumbnail
- UBThumbnailTextItem* pTextItem = dynamic_cast<UBThumbnailTextItem*>(pClickedItem);
- if(NULL != pTextItem)
- {
- for(int i = 0; i < mThumbsWithLabels.size(); i++)
- {
- const UBImgTextThumbnailElement& el = mThumbsWithLabels.at(i);
- if(el.getCaption() == pTextItem)
- {
- pCrntItem = el.getThumbnail();
- break;
- }
- }
- }
- }
-
- int index = 0;
- for(int i = 0; i < mThumbsWithLabels.size(); i++)
- {
- if (mThumbsWithLabels.at(i).getThumbnail() == pCrntItem)
- {
- index = i;
- break;
- }
- }
- UBApplication::boardController->setActiveDocumentScene(index);
- }
- QGraphicsView::mousePressEvent(event);
-}
-
-void UBDocumentNavigator::mouseReleaseEvent(QMouseEvent *event)
-{
- event->accept();
-}
+
+
+
+#include <QList>
+#include <QPointF>
+#include <QPixmap>
+#include <QTransform>
+#include <QScrollBar>
+#include <QFontMetrics>
+#include <QGraphicsItem>
+#include <QGraphicsPixmapItem>
+
+#include "core/UBApplication.h"
+#include "UBDocumentNavigator.h"
+#include "board/UBBoardController.h"
+#include "adaptors/UBThumbnailAdaptor.h"
+#include "adaptors/UBSvgSubsetAdaptor.h"
+#include "document/UBDocumentController.h"
+#include "domain/UBGraphicsScene.h"
+#include "board/UBBoardPaletteManager.h"
+#include "core/UBApplicationController.h"
+
+#include "core/memcheck.h"
+
+/**
+ * \brief Constructor
+ * @param parent as the parent widget
+ * @param name as the object name
+ */
+UBDocumentNavigator::UBDocumentNavigator(QWidget *parent, const char *name):QGraphicsView(parent)
+ , mScene(NULL)
+ , mNbColumns(1)
+ , mThumbnailWidth(0)
+ , mThumbnailMinWidth(100)
+{
+ setObjectName(name);
+ mScene = new QGraphicsScene(this);
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setScene(mScene);
+ mThumbnailWidth = width() - 2*border();
+
+ setFrameShadow(QFrame::Plain);
+
+ UBApplication::boardController->setDocumentNavigator(this);
+ connect(UBApplication::boardController, SIGNAL(documentThumbnailsUpdated(UBDocumentContainer*)), this, SLOT(generateThumbnails(UBDocumentContainer*)));
+ connect(UBApplication::boardController, SIGNAL(documentPageUpdated(int)), this, SLOT(updateSpecificThumbnail(int)));
+ connect(UBApplication::boardController, SIGNAL(pageSelectionChanged(int)), this, SLOT(onScrollToSelectedPage(int)));
+}
+
+/**
+ * \brief Destructor
+ */
+UBDocumentNavigator::~UBDocumentNavigator()
+{
+ if(NULL != mScene)
+ {
+ delete mScene;
+ mScene = NULL;
+ }
+}
+
+#include "gui/UBDockTeacherGuideWidget.h"
+#include "gui/UBTeacherGuideWidget.h"
+
+/**
+ * \brief Generate the thumbnails
+ */
+void UBDocumentNavigator::generateThumbnails(UBDocumentContainer* source)
+{
+ mThumbsWithLabels.clear();
+ foreach(QGraphicsItem* it, mScene->items())
+ {
+ mScene->removeItem(it);
+ delete it;
+ it = NULL;
+ }
+
+ for(int i = 0; i < source->pageCount(); i++)
+ {
+ const QPixmap* pix = source->pageAt(i);
+ Q_ASSERT(!pix->isNull());
+ int pageIndex = UBDocumentContainer::pageFromSceneIndex(i);
+
+ UBSceneThumbnailNavigPixmap* pixmapItem = new UBSceneThumbnailNavigPixmap(*pix, source->selectedDocument(), i);
+
+ QString label = pageIndex == 0 ? tr("Title page") : tr("Page %0").arg(pageIndex);
+ UBThumbnailTextItem *labelItem = new UBThumbnailTextItem(label);
+
+ pixmapItem->setLabel(labelItem);
+
+ UBImgTextThumbnailElement thumbWithText(pixmapItem, labelItem);
+ thumbWithText.setBorder(border());
+ mThumbsWithLabels.append(thumbWithText);
+
+ mScene->addItem(pixmapItem);
+ mScene->addItem(labelItem);
+ }
+
+ // Draw the items
+ refreshScene();
+}
+
+void UBDocumentNavigator::onScrollToSelectedPage(int index)
+{
+ int c = 0;
+ foreach(UBImgTextThumbnailElement el, mThumbsWithLabels)
+ {
+ if (c==index)
+ {
+ el.getThumbnail()->setSelected(true);
+ }
+ else
+ {
+ el.getThumbnail()->setSelected(false);
+ }
+ c++;
+ }
+}
+
+/**
+ * \brief Refresh the given thumbnail
+ * @param iPage as the given page related thumbnail
+ */
+void UBDocumentNavigator::updateSpecificThumbnail(int iPage)
+{
+ // Generate the new thumbnail
+ //UBGraphicsScene* pScene = UBApplication::boardController->activeScene();
+
+ const QPixmap* pix = UBApplication::boardController->pageAt(iPage);
+ UBSceneThumbnailNavigPixmap* newItem = new UBSceneThumbnailNavigPixmap(*pix, UBApplication::boardController->selectedDocument(), iPage);
+
+ // Get the old thumbnail
+ UBSceneThumbnailNavigPixmap* oldItem = mThumbsWithLabels.at(iPage).getThumbnail();
+ if(NULL != oldItem)
+ {
+ mScene->removeItem(oldItem);
+ mScene->addItem(newItem);
+ mThumbsWithLabels[iPage].setThumbnail(newItem);
+ delete oldItem;
+ oldItem = NULL;
+ }
+
+}
+
+/**
+ * \brief Put the element in the right place in the scene.
+ */
+void UBDocumentNavigator::refreshScene()
+{
+ qreal thumbnailHeight = mThumbnailWidth / UBSettings::minScreenRatio;
+
+ for(int i = 0; i < mThumbsWithLabels.size(); i++)
+ {
+ // Get the item
+ UBImgTextThumbnailElement& item = mThumbsWithLabels[i];
+ int columnIndex = i % mNbColumns;
+ int rowIndex = i / mNbColumns;
+ item.Place(rowIndex, columnIndex, mThumbnailWidth, thumbnailHeight);
+ item.getCaption()->highlight(false);
+ }
+ scene()->setSceneRect(scene()->itemsBoundingRect());
+
+ if (mThumbsWithLabels.count() > UBApplication::boardController->activeSceneIndex())
+ {
+ mThumbsWithLabels.at(UBApplication::boardController->activeSceneIndex()).getThumbnail()->setSelected(true);
+ mThumbsWithLabels.at(UBApplication::boardController->activeSceneIndex()).getCaption()->highlight(true);
+ }
+}
+
+/**
+ * \brief Set the number of thumbnails columns
+ * @param nbColumns as the number of columns
+ */
+void UBDocumentNavigator::setNbColumns(int nbColumns)
+{
+ mNbColumns = nbColumns;
+}
+
+/**
+ * \brief Get the number of columns
+ * @return the number of thumbnails columns
+ */
+int UBDocumentNavigator::nbColumns()
+{
+ return mNbColumns;
+}
+
+/**
+ * \brief Set the thumbnails minimum width
+ * @param width as the minimum width
+ */
+void UBDocumentNavigator::setThumbnailMinWidth(int width)
+{
+ mThumbnailMinWidth = width;
+}
+
+/**
+ * \brief Get the thumbnails minimum width
+ * @return the minimum thumbnails width
+ */
+int UBDocumentNavigator::thumbnailMinWidth()
+{
+ return mThumbnailMinWidth;
+}
+
+/**
+ * \brief Get the border size
+ * @return the border size in pixels
+ */
+int UBDocumentNavigator::border()
+{
+ return 20;
+}
+
+/**
+ * \brief Handle the resize event
+ * @param event as the resize event
+ */
+void UBDocumentNavigator::resizeEvent(QResizeEvent *event)
+{
+ Q_UNUSED(event);
+
+ // Update the thumbnails width
+ mThumbnailWidth = (width() > mThumbnailMinWidth) ? width() - 2*border() : mThumbnailMinWidth;
+
+ // Refresh the scene
+ refreshScene();
+}
+
+/**
+ * \brief Handle the mouse press event
+ * @param event as the mouse event
+ */
+void UBDocumentNavigator::mousePressEvent(QMouseEvent *event)
+{
+ QGraphicsItem* pClickedItem = itemAt(event->pos());
+ if(NULL != pClickedItem)
+ {
+
+ // First, select the clicked item
+ UBSceneThumbnailNavigPixmap* pCrntItem = dynamic_cast<UBSceneThumbnailNavigPixmap*>(pClickedItem);
+
+ if(NULL == pCrntItem)
+ {
+ // If we fall here we may have clicked on the label instead of the thumbnail
+ UBThumbnailTextItem* pTextItem = dynamic_cast<UBThumbnailTextItem*>(pClickedItem);
+ if(NULL != pTextItem)
+ {
+ for(int i = 0; i < mThumbsWithLabels.size(); i++)
+ {
+ const UBImgTextThumbnailElement& el = mThumbsWithLabels.at(i);
+ if(el.getCaption() == pTextItem)
+ {
+ pCrntItem = el.getThumbnail();
+ break;
+ }
+ }
+ }
+ }
+
+ int index = 0;
+ for(int i = 0; i < mThumbsWithLabels.size(); i++)
+ {
+ if (mThumbsWithLabels.at(i).getThumbnail() == pCrntItem)
+ {
+ index = i;
+ break;
+ }
+ }
+ UBApplication::boardController->setActiveDocumentScene(index);
+ }
+ QGraphicsView::mousePressEvent(event);
+}
+
+void UBDocumentNavigator::mouseReleaseEvent(QMouseEvent *event)
+{
+ event->accept();
+}
diff --git a/Sankore-3.1/src/gui/UBDocumentNavigator.h b/Sankore-3.1/src/gui/UBDocumentNavigator.h
index f96bae2..3bddeaa 100644
--- a/Sankore-3.1/src/gui/UBDocumentNavigator.h
+++ b/Sankore-3.1/src/gui/UBDocumentNavigator.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,63 +18,64 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBDOCUMENTNAVIGATOR_H
-#define UBDOCUMENTNAVIGATOR_H
-
-#include <QResizeEvent>
-#include <QGraphicsView>
-#include <QGraphicsScene>
-#include <QMouseEvent>
-#include <QThread>
-
-#include "document/UBDocumentProxy.h"
-#include "document/UBDocumentContainer.h"
-#include "UBThumbnailWidget.h"
-
-#define NO_PAGESELECTED -1
-
-class UBDocumentNavigator : public QGraphicsView
-{
- Q_OBJECT
-public:
- UBDocumentNavigator(QWidget* parent=0, const char* name="documentNavigator");
- ~UBDocumentNavigator();
-
- void setNbColumns(int nbColumns);
- int nbColumns();
- void setThumbnailMinWidth(int width);
- int thumbnailMinWidth();
-
-public slots:
- void onScrollToSelectedPage(int index);// { if (mCrntItem) centerOn(mCrntItem); }
- void generateThumbnails(UBDocumentContainer* source);
- void updateSpecificThumbnail(int iPage);
-
-protected:
- virtual void resizeEvent(QResizeEvent *event);
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
-
-private:
-
- void refreshScene();
- int border();
-
-
- /** The scene */
- QGraphicsScene* mScene;
- /** The current selected item */
- //UBSceneThumbnailNavigPixmap* mCrntItem;
- /** The list of current thumbnails with labels*/
- QList<UBImgTextThumbnailElement> mThumbsWithLabels;
- /** The current number of columns */
- int mNbColumns;
- /** The current thumbnails width */
- int mThumbnailWidth;
- /** The current thumbnails minimum width */
- int mThumbnailMinWidth;
-};
-
-#endif // UBDOCUMENTNAVIGATOR_H
+
+
+
+#ifndef UBDOCUMENTNAVIGATOR_H
+#define UBDOCUMENTNAVIGATOR_H
+
+#include <QResizeEvent>
+#include <QGraphicsView>
+#include <QGraphicsScene>
+#include <QMouseEvent>
+#include <QThread>
+
+#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentContainer.h"
+#include "UBThumbnailWidget.h"
+
+#define NO_PAGESELECTED -1
+
+class UBDocumentNavigator : public QGraphicsView
+{
+ Q_OBJECT
+public:
+ UBDocumentNavigator(QWidget* parent=0, const char* name="documentNavigator");
+ ~UBDocumentNavigator();
+
+ void setNbColumns(int nbColumns);
+ int nbColumns();
+ void setThumbnailMinWidth(int width);
+ int thumbnailMinWidth();
+
+public slots:
+ void onScrollToSelectedPage(int index);// { if (mCrntItem) centerOn(mCrntItem); }
+ void generateThumbnails(UBDocumentContainer* source);
+ void updateSpecificThumbnail(int iPage);
+
+protected:
+ virtual void resizeEvent(QResizeEvent *event);
+ virtual void mousePressEvent(QMouseEvent *event);
+ virtual void mouseReleaseEvent(QMouseEvent *event);
+
+private:
+
+ void refreshScene();
+ int border();
+
+
+ /** The scene */
+ QGraphicsScene* mScene;
+ /** The current selected item */
+ //UBSceneThumbnailNavigPixmap* mCrntItem;
+ /** The list of current thumbnails with labels*/
+ QList<UBImgTextThumbnailElement> mThumbsWithLabels;
+ /** The current number of columns */
+ int mNbColumns;
+ /** The current thumbnails width */
+ int mThumbnailWidth;
+ /** The current thumbnails minimum width */
+ int mThumbnailMinWidth;
+};
+
+#endif // UBDOCUMENTNAVIGATOR_H
diff --git a/Sankore-3.1/src/gui/UBDocumentThumbnailWidget.cpp b/Sankore-3.1/src/gui/UBDocumentThumbnailWidget.cpp
index d384aab..10ee578 100644
--- a/Sankore-3.1/src/gui/UBDocumentThumbnailWidget.cpp
+++ b/Sankore-3.1/src/gui/UBDocumentThumbnailWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,305 +18,295 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBDocumentThumbnailWidget.h"
-
-#include "core/UBApplication.h"
-#include "core/UBMimeData.h"
-#include "core/UBSettings.h"
-
-#include "board/UBBoardController.h"
-
-#include "document/UBDocumentController.h"
-
-#include "core/memcheck.h"
-
-
-UBDocumentThumbnailWidget::UBDocumentThumbnailWidget(QWidget* parent)
- : UBThumbnailWidget(parent)
- , mDropCaretRectItem(0)
- , mClosestDropItem(0)
- , mDragEnabled(true)
- , mScrollMagnitude(0)
-{
- bCanDrag = false;
- mScrollTimer = new QTimer(this);
- connect(mScrollTimer, SIGNAL(timeout()), this, SLOT(autoScroll()));
-}
-
-
-UBDocumentThumbnailWidget::~UBDocumentThumbnailWidget()
-{
- // NOOP
-}
-
-
-void UBDocumentThumbnailWidget::mouseMoveEvent(QMouseEvent *event)
-{
- if (!dragEnabled())
- {
- event->ignore();
- return;
- }
-
- if (!(event->buttons() & Qt::LeftButton))
- return;
-
- if ((event->pos() - mMousePressPos).manhattanLength() < QApplication::startDragDistance())
- return;
-
- QList<QGraphicsItem*> graphicsItems = items(mMousePressPos);
-
- UBSceneThumbnailPixmap* sceneItem = 0;
-
- while (!graphicsItems.isEmpty() && !sceneItem)
- sceneItem = dynamic_cast<UBSceneThumbnailPixmap*>(graphicsItems.takeFirst());
-
- if (sceneItem)
- {
- int pageIndex = UBDocumentContainer::pageFromSceneIndex(sceneItem->sceneIndex());
- if(pageIndex != 0){
- QDrag *drag = new QDrag(this);
- QList<UBMimeDataItem> mimeDataItems;
- foreach (QGraphicsItem *item, selectedItems())
- mimeDataItems.append(UBMimeDataItem(sceneItem->proxy(), mGraphicItems.indexOf(item)));
-
- UBMimeData *mime = new UBMimeData(mimeDataItems);
- drag->setMimeData(mime);
-
- drag->setPixmap(sceneItem->pixmap().scaledToWidth(100));
- drag->setHotSpot(QPoint(drag->pixmap().width()/2, drag->pixmap().height() / 2));
-
- drag->exec(Qt::MoveAction);
- }
- }
-
- UBThumbnailWidget::mouseMoveEvent(event);
-}
-
-void UBDocumentThumbnailWidget::dragEnterEvent(QDragEnterEvent *event)
-{
- if (!event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage))
- {
- event->setDropAction(Qt::IgnoreAction);
- event->ignore();
- return;
- }
-
- UBThumbnailWidget::dragEnterEvent(event);
-}
-
-void UBDocumentThumbnailWidget::dragLeaveEvent(QDragLeaveEvent *event)
-{
- Q_UNUSED(event);
- if (mScrollTimer->isActive())
- {
- mScrollMagnitude = 0;
- mScrollTimer->stop();
- }
- deleteDropCaret();
- UBThumbnailWidget::dragLeaveEvent(event);
-}
-
-void UBDocumentThumbnailWidget::autoScroll()
-{
- this->verticalScrollBar()->setValue(this->verticalScrollBar()->value() + mScrollMagnitude);
-}
-
-void UBDocumentThumbnailWidget::dragMoveEvent(QDragMoveEvent *event)
-{
- QRect boundingFrame = frameRect();
- //setting up automatic scrolling
- const int SCROLL_DISTANCE = 16;
- int bottomDist = boundingFrame.bottom() - event->pos().y(), topDist = boundingFrame.top() - event->pos().y();
- if(qAbs(bottomDist) <= SCROLL_DISTANCE)
- {
- mScrollMagnitude = (SCROLL_DISTANCE - bottomDist)*4;
- if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100);
- }
- else if(qAbs(topDist) <= SCROLL_DISTANCE)
- {
- mScrollMagnitude = (- SCROLL_DISTANCE - topDist)*4;
- if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100);
- }
- else
- {
- mScrollMagnitude = 0;
- mScrollTimer->stop();
- }
-
- QList<UBSceneThumbnailPixmap*> pixmapItems;
- foreach (QGraphicsItem *item, scene()->items(mapToScene(boundingFrame)))
- {
- UBSceneThumbnailPixmap* sceneItem = dynamic_cast<UBSceneThumbnailPixmap*>(item);
- if (sceneItem)
- pixmapItems.append(sceneItem);
- }
-
- int minDistance = 0;
- QGraphicsItem *underlyingItem = itemAt(event->pos());
- mClosestDropItem = dynamic_cast<UBSceneThumbnailPixmap*>(underlyingItem);
-
- int pageIndex = -1;
- if(mClosestDropItem){
- pageIndex = UBDocumentContainer::pageFromSceneIndex(mClosestDropItem->sceneIndex());
- if(pageIndex == 0){
- event->acceptProposedAction();
- return;
- }
- }
- if (!mClosestDropItem)
- {
- foreach (UBSceneThumbnailPixmap *item, pixmapItems)
- {
- qreal scale = item->transform().m11();
- QPointF itemCenter(
- item->pos().x() + item->boundingRect().width() * scale / 2,
- item->pos().y() + item->boundingRect().height() * scale / 2);
-
- int distance = (itemCenter.toPoint() - mapToScene(event->pos()).toPoint()).manhattanLength();
- if (!mClosestDropItem || distance < minDistance)
- {
- mClosestDropItem = item;
- minDistance = distance;
- pageIndex = UBDocumentContainer::pageFromSceneIndex(mClosestDropItem->sceneIndex());
- }
- }
- }
-
- if (mClosestDropItem && pageIndex != 0)
- {
- qreal scale = mClosestDropItem->transform().m11();
-
- QPointF itemCenter(
- mClosestDropItem->pos().x() + mClosestDropItem->boundingRect().width() * scale / 2,
- mClosestDropItem->pos().y() + mClosestDropItem->boundingRect().height() * scale / 2);
-
- mDropIsRight = mapToScene(event->pos()).x() > itemCenter.x();
-
- if (!mDropCaretRectItem && selectedItems().count() < mGraphicItems.count())
- {
- mDropCaretRectItem = new QGraphicsRectItem(0, scene());
- mDropCaretRectItem->setPen(QPen(Qt::darkGray));
- mDropCaretRectItem->setBrush(QBrush(Qt::lightGray));
- }
-
- QRectF dropCaretRect(
- mDropIsRight ? mClosestDropItem->pos().x() + mClosestDropItem->boundingRect().width() * scale + spacing() / 2 - 1 : mClosestDropItem->pos().x() - spacing() / 2 - 1,
- mClosestDropItem->pos().y(),
- 3,
- mClosestDropItem->boundingRect().height() * scale);
-
- if (mDropCaretRectItem)
- mDropCaretRectItem->setRect(dropCaretRect);
- }
-
- event->acceptProposedAction();
-}
-
-
-void UBDocumentThumbnailWidget::dropEvent(QDropEvent *event)
-{
- if (mScrollTimer->isActive())
- {
- mScrollMagnitude = 0;
- mScrollTimer->stop();
- }
- deleteDropCaret();
-
- if (mClosestDropItem)
- {
- int targetIndex = mDropIsRight ? mGraphicItems.indexOf(mClosestDropItem) + 1 : mGraphicItems.indexOf(mClosestDropItem);
- if(UBDocumentContainer::pageFromSceneIndex(targetIndex) == 0){
- event->ignore();
- return;
- }
-
- QList<UBMimeDataItem> mimeDataItems;
- if (event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage))
- {
- const UBMimeData* mimeData = qobject_cast<const UBMimeData*>(event->mimeData());
- if (mimeData)
- mimeDataItems = mimeData->items();
- }
-
- if (1 == mimeDataItems.count() &&
- (mimeDataItems.at(0).sceneIndex() == mGraphicItems.indexOf(mClosestDropItem) ||
- targetIndex == mimeDataItems.at(0).sceneIndex() ||
- targetIndex == mimeDataItems.at(0).sceneIndex() + 1))
- {
- return;
- }
-
- int sourceIndexOffset = 0;
- int actualTargetIndex = targetIndex;
- for (int i = mimeDataItems.count() - 1; i >= 0; i--)
- {
- UBMimeDataItem sourceItem = mimeDataItems.at(i);
- int actualSourceIndex = sourceItem.sceneIndex();
- if (sourceItem.sceneIndex() >= targetIndex)
- actualSourceIndex += sourceIndexOffset;
-
- //event->acceptProposedAction();
- if (sourceItem.sceneIndex() < targetIndex)
- {
- if (actualSourceIndex != actualTargetIndex - 1)
- emit sceneDropped(sourceItem.documentProxy(), actualSourceIndex, actualTargetIndex - 1);
- actualTargetIndex -= 1;
- }
- else
- {
- if (actualSourceIndex != actualTargetIndex)
- emit sceneDropped(sourceItem.documentProxy(), actualSourceIndex, actualTargetIndex);
- sourceIndexOffset += 1;
- }
- }
- }
- UBThumbnailWidget::dropEvent(event);
-}
-
-void UBDocumentThumbnailWidget::deleteDropCaret()
-{
- if (mDropCaretRectItem && scene())
- {
- scene()->removeItem(mDropCaretRectItem);
- delete mDropCaretRectItem;
- mDropCaretRectItem = 0;
- }
-}
-
-void UBDocumentThumbnailWidget::setGraphicsItems(const QList<QGraphicsItem*>& pGraphicsItems,
- const QList<QUrl>& pItemPaths, const QStringList pLabels,
- const QString& pMimeType)
-{
- deleteDropCaret();
-
- UBThumbnailWidget::setGraphicsItems(pGraphicsItems, pItemPaths, pLabels, pMimeType);
-}
-
-void UBDocumentThumbnailWidget::setDragEnabled(bool enabled)
-{
- mDragEnabled = enabled;
-}
-
-bool UBDocumentThumbnailWidget::dragEnabled() const
-{
- return mDragEnabled;
-}
-
-void UBDocumentThumbnailWidget::hightlightItem(int index)
-{
- if (0 <= index && index < mLabelsItems.length())
- {
- mLabelsItems.at(index)->highlight();
- }
- if (0 <= index && index < mGraphicItems.length())
- {
- UBSceneThumbnailPixmap *thumbnail = dynamic_cast<UBSceneThumbnailPixmap*>(mGraphicItems.at(index));
- if (thumbnail)
- thumbnail->highlight();
- }
-
- selectItemAt(index);
-}
+
+
+
+#include "UBDocumentThumbnailWidget.h"
+
+#include "core/UBApplication.h"
+#include "core/UBMimeData.h"
+#include "core/UBSettings.h"
+
+#include "board/UBBoardController.h"
+
+#include "document/UBDocumentController.h"
+
+#include "core/memcheck.h"
+
+
+UBDocumentThumbnailWidget::UBDocumentThumbnailWidget(QWidget* parent)
+ : UBThumbnailWidget(parent)
+ , mDropCaretRectItem(0)
+ , mClosestDropItem(0)
+ , mDragEnabled(true)
+ , mScrollMagnitude(0)
+{
+ bCanDrag = false;
+ mScrollTimer = new QTimer(this);
+ connect(mScrollTimer, SIGNAL(timeout()), this, SLOT(autoScroll()));
+}
+
+
+UBDocumentThumbnailWidget::~UBDocumentThumbnailWidget()
+{
+ // NOOP
+}
+
+
+void UBDocumentThumbnailWidget::mouseMoveEvent(QMouseEvent *event)
+{
+ if (!dragEnabled())
+ {
+ event->ignore();
+ return;
+ }
+
+ if (!(event->buttons() & Qt::LeftButton))
+ return;
+
+ if ((event->pos() - mMousePressPos).manhattanLength() < QApplication::startDragDistance())
+ return;
+
+ QList<QGraphicsItem*> graphicsItems = items(mMousePressPos);
+
+ UBSceneThumbnailPixmap* sceneItem = 0;
+
+ while (!graphicsItems.isEmpty() && !sceneItem)
+ sceneItem = dynamic_cast<UBSceneThumbnailPixmap*>(graphicsItems.takeFirst());
+
+ if (sceneItem)
+ {
+ int pageIndex = UBDocumentContainer::pageFromSceneIndex(sceneItem->sceneIndex());
+ if(pageIndex != 0){
+ QDrag *drag = new QDrag(this);
+ QList<UBMimeDataItem> mimeDataItems;
+ foreach (QGraphicsItem *item, selectedItems())
+ mimeDataItems.append(UBMimeDataItem(sceneItem->proxy(), mGraphicItems.indexOf(item)));
+
+ UBMimeData *mime = new UBMimeData(mimeDataItems);
+ drag->setMimeData(mime);
+
+ drag->setPixmap(sceneItem->pixmap().scaledToWidth(100));
+ drag->setHotSpot(QPoint(drag->pixmap().width()/2, drag->pixmap().height() / 2));
+
+ drag->exec(Qt::MoveAction);
+ }
+ }
+
+ UBThumbnailWidget::mouseMoveEvent(event);
+}
+
+void UBDocumentThumbnailWidget::dragEnterEvent(QDragEnterEvent *event)
+{
+ if (!event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage))
+ {
+ event->setDropAction(Qt::IgnoreAction);
+ event->ignore();
+ return;
+ }
+
+ UBThumbnailWidget::dragEnterEvent(event);
+}
+
+void UBDocumentThumbnailWidget::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ Q_UNUSED(event);
+ if (mScrollTimer->isActive())
+ {
+ mScrollMagnitude = 0;
+ mScrollTimer->stop();
+ }
+ deleteDropCaret();
+ UBThumbnailWidget::dragLeaveEvent(event);
+}
+
+void UBDocumentThumbnailWidget::autoScroll()
+{
+ this->verticalScrollBar()->setValue(this->verticalScrollBar()->value() + mScrollMagnitude);
+}
+
+void UBDocumentThumbnailWidget::dragMoveEvent(QDragMoveEvent *event)
+{
+ QRect boundingFrame = frameRect();
+ //setting up automatic scrolling
+ const int SCROLL_DISTANCE = 16;
+ int bottomDist = boundingFrame.bottom() - event->pos().y(), topDist = boundingFrame.top() - event->pos().y();
+ if(qAbs(bottomDist) <= SCROLL_DISTANCE)
+ {
+ mScrollMagnitude = (SCROLL_DISTANCE - bottomDist)*4;
+ if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100);
+ }
+ else if(qAbs(topDist) <= SCROLL_DISTANCE)
+ {
+ mScrollMagnitude = (- SCROLL_DISTANCE - topDist)*4;
+ if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100);
+ }
+ else
+ {
+ mScrollMagnitude = 0;
+ mScrollTimer->stop();
+ }
+
+ QList<UBSceneThumbnailPixmap*> pixmapItems;
+ foreach (QGraphicsItem *item, scene()->items(mapToScene(boundingFrame)))
+ {
+ UBSceneThumbnailPixmap* sceneItem = dynamic_cast<UBSceneThumbnailPixmap*>(item);
+ if (sceneItem)
+ pixmapItems.append(sceneItem);
+ }
+
+ int minDistance = 0;
+ QGraphicsItem *underlyingItem = itemAt(event->pos());
+ mClosestDropItem = dynamic_cast<UBSceneThumbnailPixmap*>(underlyingItem);
+
+ int pageIndex = -1;
+ if(mClosestDropItem){
+ pageIndex = UBDocumentContainer::pageFromSceneIndex(mClosestDropItem->sceneIndex());
+ if(pageIndex == 0){
+ event->acceptProposedAction();
+ return;
+ }
+ }
+ if (!mClosestDropItem)
+ {
+ foreach (UBSceneThumbnailPixmap *item, pixmapItems)
+ {
+ qreal scale = item->transform().m11();
+ QPointF itemCenter(
+ item->pos().x() + item->boundingRect().width() * scale / 2,
+ item->pos().y() + item->boundingRect().height() * scale / 2);
+
+ int distance = (itemCenter.toPoint() - mapToScene(event->pos()).toPoint()).manhattanLength();
+ if (!mClosestDropItem || distance < minDistance)
+ {
+ mClosestDropItem = item;
+ minDistance = distance;
+ pageIndex = UBDocumentContainer::pageFromSceneIndex(mClosestDropItem->sceneIndex());
+ }
+ }
+ }
+
+ if (mClosestDropItem && pageIndex != 0)
+ {
+ qreal scale = mClosestDropItem->transform().m11();
+
+ QPointF itemCenter(
+ mClosestDropItem->pos().x() + mClosestDropItem->boundingRect().width() * scale / 2,
+ mClosestDropItem->pos().y() + mClosestDropItem->boundingRect().height() * scale / 2);
+
+ mDropIsRight = mapToScene(event->pos()).x() > itemCenter.x();
+
+ if (!mDropCaretRectItem && selectedItems().count() < mGraphicItems.count())
+ {
+ mDropCaretRectItem = new QGraphicsRectItem(0, scene());
+ mDropCaretRectItem->setPen(QPen(Qt::darkGray));
+ mDropCaretRectItem->setBrush(QBrush(Qt::lightGray));
+ }
+
+ QRectF dropCaretRect(
+ mDropIsRight ? mClosestDropItem->pos().x() + mClosestDropItem->boundingRect().width() * scale + spacing() / 2 - 1 : mClosestDropItem->pos().x() - spacing() / 2 - 1,
+ mClosestDropItem->pos().y(),
+ 3,
+ mClosestDropItem->boundingRect().height() * scale);
+
+ if (mDropCaretRectItem)
+ mDropCaretRectItem->setRect(dropCaretRect);
+ }
+
+ event->acceptProposedAction();
+}
+
+
+void UBDocumentThumbnailWidget::dropEvent(QDropEvent *event)
+{
+ if (mScrollTimer->isActive())
+ {
+ mScrollMagnitude = 0;
+ mScrollTimer->stop();
+ }
+ deleteDropCaret();
+
+ if (mClosestDropItem)
+ {
+ int targetIndex = mDropIsRight ? mGraphicItems.indexOf(mClosestDropItem) + 1 : mGraphicItems.indexOf(mClosestDropItem);
+ if(UBDocumentContainer::pageFromSceneIndex(targetIndex) == 0){
+ event->ignore();
+ return;
+ }
+
+ QList<UBMimeDataItem> mimeDataItems;
+ if (event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage))
+ {
+ const UBMimeData* mimeData = qobject_cast<const UBMimeData*>(event->mimeData());
+ if (mimeData)
+ mimeDataItems = mimeData->items();
+ }
+
+ if (1 == mimeDataItems.count() &&
+ (mimeDataItems.at(0).sceneIndex() == mGraphicItems.indexOf(mClosestDropItem) ||
+ targetIndex == mimeDataItems.at(0).sceneIndex() ||
+ targetIndex == mimeDataItems.at(0).sceneIndex() + 1))
+ {
+ return;
+ }
+
+ int sourceIndexOffset = 0;
+ int actualTargetIndex = targetIndex;
+ for (int i = mimeDataItems.count() - 1; i >= 0; i--)
+ {
+ UBMimeDataItem sourceItem = mimeDataItems.at(i);
+ int actualSourceIndex = sourceItem.sceneIndex();
+ if (sourceItem.sceneIndex() >= targetIndex)
+ actualSourceIndex += sourceIndexOffset;
+
+ //event->acceptProposedAction();
+ if (sourceItem.sceneIndex() < targetIndex)
+ {
+ if (actualSourceIndex != actualTargetIndex - 1)
+ emit sceneDropped(sourceItem.documentProxy(), actualSourceIndex, actualTargetIndex - 1);
+ actualTargetIndex -= 1;
+ }
+ else
+ {
+ if (actualSourceIndex != actualTargetIndex)
+ emit sceneDropped(sourceItem.documentProxy(), actualSourceIndex, actualTargetIndex);
+ sourceIndexOffset += 1;
+ }
+ }
+ }
+ UBThumbnailWidget::dropEvent(event);
+}
+
+void UBDocumentThumbnailWidget::deleteDropCaret()
+{
+ if (mDropCaretRectItem && scene())
+ {
+ scene()->removeItem(mDropCaretRectItem);
+ delete mDropCaretRectItem;
+ mDropCaretRectItem = 0;
+ }
+}
+
+void UBDocumentThumbnailWidget::setGraphicsItems(const QList<QGraphicsItem*>& pGraphicsItems,
+ const QList<QUrl>& pItemPaths, const QStringList pLabels,
+ const QString& pMimeType)
+{
+ deleteDropCaret();
+
+ UBThumbnailWidget::setGraphicsItems(pGraphicsItems, pItemPaths, pLabels, pMimeType);
+}
+
+void UBDocumentThumbnailWidget::setDragEnabled(bool enabled)
+{
+ mDragEnabled = enabled;
+}
+
+bool UBDocumentThumbnailWidget::dragEnabled() const
+{
+ return mDragEnabled;
+}
+
+void UBDocumentThumbnailWidget::hightlightItem(int index)
+{
+ selectItemAt(index);
+}
diff --git a/Sankore-3.1/src/gui/UBDocumentThumbnailWidget.h b/Sankore-3.1/src/gui/UBDocumentThumbnailWidget.h
index 4156ef6..7dd3a9a 100644
--- a/Sankore-3.1/src/gui/UBDocumentThumbnailWidget.h
+++ b/Sankore-3.1/src/gui/UBDocumentThumbnailWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOCUMENTTHUMBNAILWIDGET_H_
#define UBDOCUMENTTHUMBNAILWIDGET_H_
diff --git a/Sankore-3.1/src/gui/UBDocumentToolsPalette.cpp b/Sankore-3.1/src/gui/UBDocumentToolsPalette.cpp
index 00d4fd5..18f2738 100644
--- a/Sankore-3.1/src/gui/UBDocumentToolsPalette.cpp
+++ b/Sankore-3.1/src/gui/UBDocumentToolsPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBDocumentToolsPalette.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/gui/UBDocumentToolsPalette.h b/Sankore-3.1/src/gui/UBDocumentToolsPalette.h
index 5e26621..8796f10 100644
--- a/Sankore-3.1/src/gui/UBDocumentToolsPalette.h
+++ b/Sankore-3.1/src/gui/UBDocumentToolsPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOCUMENTTOOLSPALLETTE_H_
#define UBDOCUMENTTOOLSPALLETTE_H_
diff --git a/Sankore-3.1/src/gui/UBDocumentTreeWidget.cpp b/Sankore-3.1/src/gui/UBDocumentTreeWidget.cpp
index 19b45fe..aba7a52 100644
--- a/Sankore-3.1/src/gui/UBDocumentTreeWidget.cpp
+++ b/Sankore-3.1/src/gui/UBDocumentTreeWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,447 +18,447 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBDocumentTreeWidget.h"
-
-#include "document/UBDocumentProxy.h"
-
-#include "core/UBSettings.h"
-#include "core/UBApplication.h"
-#include "core/UBPersistenceManager.h"
-#include "core/UBMimeData.h"
-#include "core/UBApplicationController.h"
-#include "core/UBDocumentManager.h"
-#include "document/UBDocumentController.h"
-
-#include "adaptors/UBThumbnailAdaptor.h"
-#include "adaptors/UBSvgSubsetAdaptor.h"
-#include "frameworks/UBFileSystemUtils.h"
-
-#include "core/memcheck.h"
-
-UBDocumentTreeWidget::UBDocumentTreeWidget(QWidget * parent)
- : QTreeWidget(parent)
- , mSelectedProxyTi(0)
- , mDropTargetProxyTi(0)
-{
- setDragDropMode(QAbstractItemView::InternalMove);
- setAutoScroll(true);
-
- mScrollTimer = new QTimer(this);
- connect(UBDocumentManager::documentManager(), SIGNAL(documentUpdated(UBDocumentProxy*))
- , this, SLOT(documentUpdated(UBDocumentProxy*)));
-
- connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int))
- , this, SLOT(itemChangedValidation(QTreeWidgetItem *, int)));
- connect(mScrollTimer, SIGNAL(timeout())
- , this, SLOT(autoScroll()));
-}
-
-
-UBDocumentTreeWidget::~UBDocumentTreeWidget()
-{
- // NOOP
-}
-
-
-void UBDocumentTreeWidget::itemChangedValidation(QTreeWidgetItem * item, int column)
-{
- if (column == 0)
- {
- UBDocumentGroupTreeItem *group = dynamic_cast< UBDocumentGroupTreeItem *>(item);
-
- if (group)
- {
- QString name = group->text(0);
-
- for(int i = 0; i < topLevelItemCount (); i++)
- {
- QTreeWidgetItem *someTopLevelItem = topLevelItem(i);
-
- if (someTopLevelItem != group &&
- someTopLevelItem->text(0) == name)
- {
- group->setText(0, tr("%1 (copy)").arg(name));
- }
- }
- }
- }
-}
-
-
-Qt::DropActions UBDocumentTreeWidget::supportedDropActions() const
-{
- return Qt::MoveAction | Qt::CopyAction;
-}
-
-
-void UBDocumentTreeWidget::mousePressEvent(QMouseEvent *event)
-{
- QTreeWidgetItem* twItem = this->itemAt(event->pos());
-
- mSelectedProxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(twItem);
-
- QTreeWidget::mousePressEvent(event);
-}
-
-
-void UBDocumentTreeWidget::dragEnterEvent(QDragEnterEvent *event)
-{
- event->acceptProposedAction();
-}
-
-
-void UBDocumentTreeWidget::dragLeaveEvent(QDragLeaveEvent *event)
-{
- Q_UNUSED(event);
-
- if (mScrollTimer->isActive())
- {
- mScrollMagnitude = 0;
- mScrollTimer->stop();
- }
-
- if (mDropTargetProxyTi)
- {
- mDropTargetProxyTi->setBackground(0, mBackground);
- mDropTargetProxyTi = 0;
- }
-}
-
-
-void UBDocumentTreeWidget::dragMoveEvent(QDragMoveEvent *event)
-{
- QRect boundingFrame = frameRect();
- //setting up automatic scrolling
- const int SCROLL_DISTANCE = 4;
- int bottomDist = boundingFrame.bottom() - event->pos().y(), topDist = boundingFrame.top() - event->pos().y();
- if(qAbs(bottomDist) <= SCROLL_DISTANCE)
- {
- mScrollMagnitude = (SCROLL_DISTANCE - bottomDist)*4;
- if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100);
- }
- else if(qAbs(topDist) <= SCROLL_DISTANCE)
- {
- mScrollMagnitude = (- SCROLL_DISTANCE - topDist)*4;
- if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100);
- }
- else
- {
- mScrollMagnitude = 0;
- mScrollTimer->stop();
- }
-
-
- QTreeWidgetItem* underlyingItem = this->itemAt(event->pos());
-
- if (event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage))
- {
- UBDocumentProxyTreeItem *targetProxyTreeItem = dynamic_cast<UBDocumentProxyTreeItem*>(underlyingItem);
- if (targetProxyTreeItem && targetProxyTreeItem != mSelectedProxyTi)
- {
- event->setDropAction(Qt::CopyAction);
- event->accept();
- }
- else
- {
- event->ignore();
- }
- }
- else
- {
- UBDocumentGroupTreeItem *groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(underlyingItem);
-
- if (groupItem && mSelectedProxyTi && groupItem != mSelectedProxyTi->parent())
- event->acceptProposedAction();
- else
- event->ignore();
- }
-
- if (event->isAccepted())
- {
- if (mDropTargetProxyTi)
- {
- if (underlyingItem != mDropTargetProxyTi)
- {
- mBackground = underlyingItem->background(0);
- mDropTargetProxyTi->setBackground(0, mBackground);
- mDropTargetProxyTi = underlyingItem;
- mDropTargetProxyTi->setBackground(0, QBrush(QColor("#6682b5")));
- }
- }
- else
- {
- mBackground = underlyingItem->background(0);
- mDropTargetProxyTi = underlyingItem;
- mDropTargetProxyTi->setBackground(0, QBrush(QColor("#6682b5")));
- }
- }
- else if (mDropTargetProxyTi)
- {
- mDropTargetProxyTi->setBackground(0, mBackground);
- mDropTargetProxyTi = 0;
- }
-}
-
-
-void UBDocumentTreeWidget::focusInEvent(QFocusEvent *event)
-{
- Q_UNUSED(event);
-
- // Tolik
- //itemSelectionChanged();
-
- QTreeWidget::focusInEvent(event);
-}
-
-
-void UBDocumentTreeWidget::dropEvent(QDropEvent *event)
-{
- if (mDropTargetProxyTi)
- {
- mDropTargetProxyTi->setBackground(0, mBackground);
- mDropTargetProxyTi = 0;
- }
-
- QTreeWidgetItem* underlyingItem = this->itemAt(event->pos());
-
- UBDocumentGroupTreeItem *groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(underlyingItem);
-
- if (groupItem && mSelectedProxyTi && mSelectedProxyTi->proxy())
- {
- UBDocumentGroupTreeItem *sourceGroupItem = dynamic_cast<UBDocumentGroupTreeItem*>(mSelectedProxyTi->parent());
- bool isTrashItem = sourceGroupItem && sourceGroupItem->isTrashFolder();
- if ((isTrashItem && !groupItem->isTrashFolder()) ||
- (!isTrashItem && mSelectedProxyTi->proxy()->groupName() != groupItem->groupName()))
- {
- QString groupName;
- if (groupItem->isTrashFolder())
- {
- QString oldGroupName = mSelectedProxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
- groupName = UBSettings::trashedDocumentGroupNamePrefix + oldGroupName;
- }
- else
- {
- if (groupItem->groupName() == UBApplication::app()->documentController->defaultDocumentGroupName())
- groupName = "";
- else
- groupName = groupItem->groupName();
- }
- mSelectedProxyTi->proxy()->setMetaData(UBSettings::documentGroupName, groupName);
- UBPersistenceManager::persistenceManager()->persistDocumentMetadata(mSelectedProxyTi->proxy());
-
- mSelectedProxyTi->parent()->removeChild(mSelectedProxyTi);
-
- int i = 0;
- for (i = 0; i < groupItem->childCount(); i++)
- {
- QTreeWidgetItem *ti = groupItem->child(i);
- UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>(ti);
- if (pi)
- {
- if (mSelectedProxyTi->proxy()->metaData(UBSettings::documentUpdatedAt).toString() >= pi->proxy()->metaData(UBSettings::documentUpdatedAt).toString())
- {
- break;
- }
- }
- }
- groupItem->insertChild(i, mSelectedProxyTi);
-
- if (isTrashItem)
- mSelectedProxyTi->setFlags(mSelectedProxyTi->flags() | Qt::ItemIsEditable);
-
- if (groupItem->isTrashFolder())
- mSelectedProxyTi->setFlags(mSelectedProxyTi->flags() ^ Qt::ItemIsEditable);
-
- //clearSelection();
- expandItem(groupItem);
- scrollToItem(mSelectedProxyTi);
-
- // disabled, as those 2 calls are buggy on windows, the item disappears if we selected them
- //
- setCurrentItem(mSelectedProxyTi);
- mSelectedProxyTi->setSelected(true);
-
- event->setDropAction(Qt::IgnoreAction);
- event->accept();
- }
- }
- else
- {
- QTreeWidgetItem* underlyingTreeItem = this->itemAt(event->pos());
-
- UBDocumentProxyTreeItem *targetProxyTreeItem = dynamic_cast<UBDocumentProxyTreeItem*>(underlyingTreeItem);
- if (targetProxyTreeItem && targetProxyTreeItem != mSelectedProxyTi)
- {
- if (event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage))
- {
- event->setDropAction(Qt::CopyAction);
- event->accept();
-
- const UBMimeData *mimeData = qobject_cast <const UBMimeData*>(event->mimeData());
-
- if (mimeData && mimeData->items().size() > 0)
- {
- int count = 0;
- int total = mimeData->items().size();
-
- QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
- foreach (UBMimeDataItem sourceItem, mimeData->items())
- {
- count++;
-
- UBApplication::applicationController->showMessage(tr("Copying page %1/%2").arg(count).arg(total), true);
-
- // TODO UB 4.x Move following code to some controller class
- UBGraphicsScene *scene = UBPersistenceManager::persistenceManager()->loadDocumentScene(sourceItem.documentProxy(), sourceItem.sceneIndex());
- if (scene)
- {
- UBGraphicsScene* sceneClone = scene->sceneDeepCopy();
-
- UBDocumentProxy *targetDocProxy = targetProxyTreeItem->proxy();
-
- foreach (QUrl relativeFile, scene->relativeDependencies())
- {
- QString source = scene->document()->persistencePath() + "/" + relativeFile.toString();
- QString target = targetDocProxy->persistencePath() + "/" + relativeFile.toString();
-
- QFileInfo fi(target);
- QDir d = fi.dir();
-
- d.mkpath(d.absolutePath());
- QFile::copy(source, target);
- }
-
- UBPersistenceManager::persistenceManager()->insertDocumentSceneAt(targetDocProxy, sceneClone, targetDocProxy->pageCount());
-
- //due to incorrect generation of thumbnails of invisible scene I've used direct copying of thumbnail files
- //it's not universal and good way but it's faster
- QString from = sourceItem.documentProxy()->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", sourceItem.sceneIndex());
- QString to = targetDocProxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", targetDocProxy->pageCount());
- QFile::remove(to);
- QFile::copy(from, to);
- }
- }
-
- QApplication::restoreOverrideCursor();
-
- UBApplication::applicationController->showMessage(tr("%1 pages copied", "", total).arg(total), false);
- }
- }
- else
- {
- event->setDropAction(Qt::IgnoreAction);
- event->ignore();
- }
- }
- }
-}
-
-
-void UBDocumentTreeWidget::documentUpdated(UBDocumentProxy *pDocument)
-{
- UBDocumentProxyTreeItem *treeItem = UBApplication::documentController->findDocument(pDocument);
- if (treeItem)
- {
- QTreeWidgetItem * parent = treeItem->parent();
-
- if (parent)
- {
- for (int i = 0; i < parent->indexOfChild(treeItem); i++)
- {
- QTreeWidgetItem *ti = parent->child(i);
- UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>(ti);
- if (pi)
- {
- if (pDocument->metaData(UBSettings::documentUpdatedAt).toString() >= pi->proxy()->metaData(UBSettings::documentUpdatedAt).toString())
- {
- bool selected = treeItem->isSelected();
- parent->removeChild(treeItem);
- parent->insertChild(i, treeItem);
- for (int j = 0; j < selectedItems().count(); j++)
- selectedItems().at(j)->setSelected(false);
- if (selected)
- treeItem->setSelected(true);
- break;
- }
- }
- }
- }
- }
-}
-
-
-UBDocumentProxyTreeItem::UBDocumentProxyTreeItem(QTreeWidgetItem * parent, UBDocumentProxy* proxy, bool isEditable)
- : QTreeWidgetItem()
- , mProxy(proxy)
-{
- Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled;
-
- if (isEditable)
- flags |= Qt::ItemIsEditable;
-
- setFlags(flags);
-
- int i = 0;
- for (i = 0; i < parent->childCount(); i++)
- {
- QTreeWidgetItem *ti = parent->child(i);
- UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>(ti);
- if (pi)
- {
- if (proxy->metaData(UBSettings::documentUpdatedAt).toString() >= pi->proxy()->metaData(UBSettings::documentUpdatedAt).toString())
- {
- break;
- }
- }
- }
- parent->insertChild(i, this);
-}
-
-
-UBDocumentGroupTreeItem::UBDocumentGroupTreeItem(QTreeWidgetItem *parent, bool isEditable)
- : QTreeWidgetItem(parent)
-{
- Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled;
- if (isEditable)
- flags |= Qt::ItemIsEditable;
- setFlags(flags);
-}
-
-
-UBDocumentGroupTreeItem::~UBDocumentGroupTreeItem()
-{
- // NOOP
-}
-
-
-void UBDocumentGroupTreeItem::setGroupName(const QString& groupName)
-{
- setText(0, groupName);
-}
-
-
-QString UBDocumentGroupTreeItem::groupName() const
-{
- return text(0);
-}
-
-
-bool UBDocumentGroupTreeItem::isTrashFolder() const
-{
- return (0 == (flags() & Qt::ItemIsEditable)) && UBApplication::app()->documentController && (groupName() == UBApplication::app()->documentController->documentTrashGroupName());
-}
-
-bool UBDocumentGroupTreeItem::isDefaultFolder() const
-{
- return (0 == (flags() & Qt::ItemIsEditable)) && UBApplication::app()->documentController && (groupName() == UBApplication::app()->documentController->defaultDocumentGroupName());
-}
-
-
-void UBDocumentTreeWidget::autoScroll()
-{
- this->verticalScrollBar()->setValue(this->verticalScrollBar()->value() + mScrollMagnitude);
-}
+
+
+
+#include "UBDocumentTreeWidget.h"
+
+#include "document/UBDocumentProxy.h"
+
+#include "core/UBSettings.h"
+#include "core/UBApplication.h"
+#include "core/UBPersistenceManager.h"
+#include "core/UBMimeData.h"
+#include "core/UBApplicationController.h"
+#include "core/UBDocumentManager.h"
+#include "document/UBDocumentController.h"
+
+#include "adaptors/UBThumbnailAdaptor.h"
+#include "adaptors/UBSvgSubsetAdaptor.h"
+#include "frameworks/UBFileSystemUtils.h"
+
+#include "core/memcheck.h"
+
+UBDocumentTreeWidget::UBDocumentTreeWidget(QWidget * parent)
+ : QTreeWidget(parent)
+ , mSelectedProxyTi(0)
+ , mDropTargetProxyTi(0)
+{
+ setDragDropMode(QAbstractItemView::InternalMove);
+ setAutoScroll(true);
+
+ mScrollTimer = new QTimer(this);
+ connect(UBDocumentManager::documentManager(), SIGNAL(documentUpdated(UBDocumentProxy*))
+ , this, SLOT(documentUpdated(UBDocumentProxy*)));
+
+ connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int))
+ , this, SLOT(itemChangedValidation(QTreeWidgetItem *, int)));
+ connect(mScrollTimer, SIGNAL(timeout())
+ , this, SLOT(autoScroll()));
+}
+
+
+UBDocumentTreeWidget::~UBDocumentTreeWidget()
+{
+ // NOOP
+}
+
+
+void UBDocumentTreeWidget::itemChangedValidation(QTreeWidgetItem * item, int column)
+{
+ if (column == 0)
+ {
+ UBDocumentGroupTreeItem *group = dynamic_cast< UBDocumentGroupTreeItem *>(item);
+
+ if (group)
+ {
+ QString name = group->text(0);
+
+ for(int i = 0; i < topLevelItemCount (); i++)
+ {
+ QTreeWidgetItem *someTopLevelItem = topLevelItem(i);
+
+ if (someTopLevelItem != group &&
+ someTopLevelItem->text(0) == name)
+ {
+ group->setText(0, tr("%1 (copy)").arg(name));
+ }
+ }
+ }
+ }
+}
+
+
+Qt::DropActions UBDocumentTreeWidget::supportedDropActions() const
+{
+ return Qt::MoveAction | Qt::CopyAction;
+}
+
+
+void UBDocumentTreeWidget::mousePressEvent(QMouseEvent *event)
+{
+ QTreeWidgetItem* twItem = this->itemAt(event->pos());
+
+ mSelectedProxyTi = dynamic_cast<UBDocumentProxyTreeItem*>(twItem);
+
+ QTreeWidget::mousePressEvent(event);
+}
+
+
+void UBDocumentTreeWidget::dragEnterEvent(QDragEnterEvent *event)
+{
+ event->acceptProposedAction();
+}
+
+
+void UBDocumentTreeWidget::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ Q_UNUSED(event);
+
+ if (mScrollTimer->isActive())
+ {
+ mScrollMagnitude = 0;
+ mScrollTimer->stop();
+ }
+
+ if (mDropTargetProxyTi)
+ {
+ mDropTargetProxyTi->setBackground(0, mBackground);
+ mDropTargetProxyTi = 0;
+ }
+}
+
+
+void UBDocumentTreeWidget::dragMoveEvent(QDragMoveEvent *event)
+{
+ QRect boundingFrame = frameRect();
+ //setting up automatic scrolling
+ const int SCROLL_DISTANCE = 4;
+ int bottomDist = boundingFrame.bottom() - event->pos().y(), topDist = boundingFrame.top() - event->pos().y();
+ if(qAbs(bottomDist) <= SCROLL_DISTANCE)
+ {
+ mScrollMagnitude = (SCROLL_DISTANCE - bottomDist)*4;
+ if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100);
+ }
+ else if(qAbs(topDist) <= SCROLL_DISTANCE)
+ {
+ mScrollMagnitude = (- SCROLL_DISTANCE - topDist)*4;
+ if(verticalScrollBar()->isVisible() && !mScrollTimer->isActive()) mScrollTimer->start(100);
+ }
+ else
+ {
+ mScrollMagnitude = 0;
+ mScrollTimer->stop();
+ }
+
+
+ QTreeWidgetItem* underlyingItem = this->itemAt(event->pos());
+
+ if (event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage))
+ {
+ UBDocumentProxyTreeItem *targetProxyTreeItem = dynamic_cast<UBDocumentProxyTreeItem*>(underlyingItem);
+ if (targetProxyTreeItem && targetProxyTreeItem != mSelectedProxyTi)
+ {
+ event->setDropAction(Qt::CopyAction);
+ event->accept();
+ }
+ else
+ {
+ event->ignore();
+ }
+ }
+ else
+ {
+ UBDocumentGroupTreeItem *groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(underlyingItem);
+
+ if (groupItem && mSelectedProxyTi && groupItem != mSelectedProxyTi->parent())
+ event->acceptProposedAction();
+ else
+ event->ignore();
+ }
+
+ if (event->isAccepted())
+ {
+ if (mDropTargetProxyTi)
+ {
+ if (underlyingItem != mDropTargetProxyTi)
+ {
+ mBackground = underlyingItem->background(0);
+ mDropTargetProxyTi->setBackground(0, mBackground);
+ mDropTargetProxyTi = underlyingItem;
+ mDropTargetProxyTi->setBackground(0, QBrush(QColor("#6682b5")));
+ }
+ }
+ else
+ {
+ mBackground = underlyingItem->background(0);
+ mDropTargetProxyTi = underlyingItem;
+ mDropTargetProxyTi->setBackground(0, QBrush(QColor("#6682b5")));
+ }
+ }
+ else if (mDropTargetProxyTi)
+ {
+ mDropTargetProxyTi->setBackground(0, mBackground);
+ mDropTargetProxyTi = 0;
+ }
+}
+
+
+void UBDocumentTreeWidget::focusInEvent(QFocusEvent *event)
+{
+ Q_UNUSED(event);
+
+ // Tolik
+ //itemSelectionChanged();
+
+ QTreeWidget::focusInEvent(event);
+}
+
+
+void UBDocumentTreeWidget::dropEvent(QDropEvent *event)
+{
+ if (mDropTargetProxyTi)
+ {
+ mDropTargetProxyTi->setBackground(0, mBackground);
+ mDropTargetProxyTi = 0;
+ }
+
+ QTreeWidgetItem* underlyingItem = this->itemAt(event->pos());
+
+ UBDocumentGroupTreeItem *groupItem = dynamic_cast<UBDocumentGroupTreeItem*>(underlyingItem);
+
+ if (groupItem && mSelectedProxyTi && mSelectedProxyTi->proxy())
+ {
+ UBDocumentGroupTreeItem *sourceGroupItem = dynamic_cast<UBDocumentGroupTreeItem*>(mSelectedProxyTi->parent());
+ bool isTrashItem = sourceGroupItem && sourceGroupItem->isTrashFolder();
+ if ((isTrashItem && !groupItem->isTrashFolder()) ||
+ (!isTrashItem && mSelectedProxyTi->proxy()->groupName() != groupItem->groupName()))
+ {
+ QString groupName;
+ if (groupItem->isTrashFolder())
+ {
+ QString oldGroupName = mSelectedProxyTi->proxy()->metaData(UBSettings::documentGroupName).toString();
+ groupName = UBSettings::trashedDocumentGroupNamePrefix + oldGroupName;
+ }
+ else
+ {
+ if (groupItem->groupName() == UBApplication::app()->documentController->defaultDocumentGroupName())
+ groupName = "";
+ else
+ groupName = groupItem->groupName();
+ }
+ mSelectedProxyTi->proxy()->setMetaData(UBSettings::documentGroupName, groupName);
+ UBPersistenceManager::persistenceManager()->persistDocumentMetadata(mSelectedProxyTi->proxy());
+
+ mSelectedProxyTi->parent()->removeChild(mSelectedProxyTi);
+
+ int i = 0;
+ for (i = 0; i < groupItem->childCount(); i++)
+ {
+ QTreeWidgetItem *ti = groupItem->child(i);
+ UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>(ti);
+ if (pi)
+ {
+ if (mSelectedProxyTi->proxy()->metaData(UBSettings::documentUpdatedAt).toString() >= pi->proxy()->metaData(UBSettings::documentUpdatedAt).toString())
+ {
+ break;
+ }
+ }
+ }
+ groupItem->insertChild(i, mSelectedProxyTi);
+
+ if (isTrashItem)
+ mSelectedProxyTi->setFlags(mSelectedProxyTi->flags() | Qt::ItemIsEditable);
+
+ if (groupItem->isTrashFolder())
+ mSelectedProxyTi->setFlags(mSelectedProxyTi->flags() ^ Qt::ItemIsEditable);
+
+ //clearSelection();
+ expandItem(groupItem);
+ scrollToItem(mSelectedProxyTi);
+
+ // disabled, as those 2 calls are buggy on windows, the item disappears if we selected them
+ //
+ setCurrentItem(mSelectedProxyTi);
+ mSelectedProxyTi->setSelected(true);
+
+ event->setDropAction(Qt::IgnoreAction);
+ event->accept();
+ }
+ }
+ else
+ {
+ QTreeWidgetItem* underlyingTreeItem = this->itemAt(event->pos());
+
+ UBDocumentProxyTreeItem *targetProxyTreeItem = dynamic_cast<UBDocumentProxyTreeItem*>(underlyingTreeItem);
+ if (targetProxyTreeItem && targetProxyTreeItem != mSelectedProxyTi)
+ {
+ if (event->mimeData()->hasFormat(UBApplication::mimeTypeUniboardPage))
+ {
+ event->setDropAction(Qt::CopyAction);
+ event->accept();
+
+ const UBMimeData *mimeData = qobject_cast <const UBMimeData*>(event->mimeData());
+
+ if (mimeData && mimeData->items().size() > 0)
+ {
+ int count = 0;
+ int total = mimeData->items().size();
+
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+
+ foreach (UBMimeDataItem sourceItem, mimeData->items())
+ {
+ count++;
+
+ UBApplication::applicationController->showMessage(tr("Copying page %1/%2").arg(count).arg(total), true);
+
+ // TODO UB 4.x Move following code to some controller class
+ UBGraphicsScene *scene = UBPersistenceManager::persistenceManager()->loadDocumentScene(sourceItem.documentProxy(), sourceItem.sceneIndex());
+ if (scene)
+ {
+ UBGraphicsScene* sceneClone = scene->sceneDeepCopy();
+
+ UBDocumentProxy *targetDocProxy = targetProxyTreeItem->proxy();
+
+ foreach (QUrl relativeFile, scene->relativeDependencies())
+ {
+ QString source = scene->document()->persistencePath() + "/" + relativeFile.toString();
+ QString target = targetDocProxy->persistencePath() + "/" + relativeFile.toString();
+
+ QFileInfo fi(target);
+ QDir d = fi.dir();
+
+ d.mkpath(d.absolutePath());
+ QFile::copy(source, target);
+ }
+
+ UBPersistenceManager::persistenceManager()->insertDocumentSceneAt(targetDocProxy, sceneClone, targetDocProxy->pageCount());
+
+ //due to incorrect generation of thumbnails of invisible scene I've used direct copying of thumbnail files
+ //it's not universal and good way but it's faster
+ QString from = sourceItem.documentProxy()->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", sourceItem.sceneIndex());
+ QString to = targetDocProxy->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", targetDocProxy->pageCount());
+ QFile::remove(to);
+ QFile::copy(from, to);
+ }
+ }
+
+ QApplication::restoreOverrideCursor();
+
+ UBApplication::applicationController->showMessage(tr("%1 pages copied", "", total).arg(total), false);
+ }
+ }
+ else
+ {
+ event->setDropAction(Qt::IgnoreAction);
+ event->ignore();
+ }
+ }
+ }
+}
+
+
+void UBDocumentTreeWidget::documentUpdated(UBDocumentProxy */*pDocument*/)
+{
+// UBDocumentProxyTreeItem *treeItem = UBApplication::documentController->findDocument(pDocument);
+// if (treeItem)
+// {
+// QTreeWidgetItem * parent = treeItem->parent();
+
+// if (parent)
+// {
+// for (int i = 0; i < parent->indexOfChild(treeItem); i++)
+// {
+// QTreeWidgetItem *ti = parent->child(i);
+// UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>(ti);
+// if (pi)
+// {
+// if (pDocument->metaData(UBSettings::documentUpdatedAt).toString() >= pi->proxy()->metaData(UBSettings::documentUpdatedAt).toString())
+// {
+// bool selected = treeItem->isSelected();
+// parent->removeChild(treeItem);
+// parent->insertChild(i, treeItem);
+// for (int j = 0; j < selectedItems().count(); j++)
+// selectedItems().at(j)->setSelected(false);
+// if (selected)
+// treeItem->setSelected(true);
+// break;
+// }
+// }
+// }
+// }
+// }
+}
+
+UBDocumentProxyTreeItem::UBDocumentProxyTreeItem(QTreeWidgetItem * parent, UBDocumentProxy* proxy, bool isEditable)
+ : QTreeWidgetItem()
+ , mProxy(proxy)
+{
+ Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled;
+
+ if (isEditable)
+ flags |= Qt::ItemIsEditable;
+
+ setFlags(flags);
+
+ int i = 0;
+ for (i = 0; i < parent->childCount(); i++)
+ {
+ QTreeWidgetItem *ti = parent->child(i);
+ UBDocumentProxyTreeItem* pi = dynamic_cast<UBDocumentProxyTreeItem*>(ti);
+ if (pi)
+ {
+ if (proxy->metaData(UBSettings::documentUpdatedAt).toString() >= pi->proxy()->metaData(UBSettings::documentUpdatedAt).toString())
+ {
+ break;
+ }
+ }
+ }
+ parent->insertChild(i, this);
+}
+
+
+UBDocumentGroupTreeItem::UBDocumentGroupTreeItem(QTreeWidgetItem *parent, bool isEditable)
+ : QTreeWidgetItem(parent)
+{
+ Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled;
+ if (isEditable)
+ flags |= Qt::ItemIsEditable;
+ setFlags(flags);
+}
+
+
+UBDocumentGroupTreeItem::~UBDocumentGroupTreeItem()
+{
+ // NOOP
+}
+
+
+void UBDocumentGroupTreeItem::setGroupName(const QString& groupName)
+{
+ setText(0, groupName);
+}
+
+
+QString UBDocumentGroupTreeItem::groupName() const
+{
+ return text(0);
+}
+
+
+bool UBDocumentGroupTreeItem::isTrashFolder() const
+{
+ return (0 == (flags() & Qt::ItemIsEditable)) && UBApplication::app()->documentController && (groupName() == UBApplication::app()->documentController->documentTrashGroupName());
+}
+
+bool UBDocumentGroupTreeItem::isDefaultFolder() const
+{
+ return (0 == (flags() & Qt::ItemIsEditable)) && UBApplication::app()->documentController && (groupName() == UBApplication::app()->documentController->defaultDocumentGroupName());
+}
+
+
+void UBDocumentTreeWidget::autoScroll()
+{
+ this->verticalScrollBar()->setValue(this->verticalScrollBar()->value() + mScrollMagnitude);
+}
diff --git a/Sankore-3.1/src/gui/UBDocumentTreeWidget.h b/Sankore-3.1/src/gui/UBDocumentTreeWidget.h
index 5d977ac..43df862 100644
--- a/Sankore-3.1/src/gui/UBDocumentTreeWidget.h
+++ b/Sankore-3.1/src/gui/UBDocumentTreeWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOCUMENTTREEWIDGET_H_
#define UBDOCUMENTTREEWIDGET_H_
diff --git a/Sankore-3.1/src/gui/UBDownloadWidget.cpp b/Sankore-3.1/src/gui/UBDownloadWidget.cpp
index 5e9333d..d097c48 100644
--- a/Sankore-3.1/src/gui/UBDownloadWidget.cpp
+++ b/Sankore-3.1/src/gui/UBDownloadWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QDebug>
#include <QHeaderView>
#include <QStyleOptionProgressBarV2>
diff --git a/Sankore-3.1/src/gui/UBDownloadWidget.h b/Sankore-3.1/src/gui/UBDownloadWidget.h
index 063d59d..6f9a53f 100644
--- a/Sankore-3.1/src/gui/UBDownloadWidget.h
+++ b/Sankore-3.1/src/gui/UBDownloadWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBDOWNLOADWIDGET_H
#define UBDOWNLOADWIDGET_H
diff --git a/Sankore-3.1/src/gui/UBFavoriteToolPalette.cpp b/Sankore-3.1/src/gui/UBFavoriteToolPalette.cpp
index 98d1581..114fba3 100644
--- a/Sankore-3.1/src/gui/UBFavoriteToolPalette.cpp
+++ b/Sankore-3.1/src/gui/UBFavoriteToolPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBFavoriteToolPalette.h"
#include "core/UBSettings.h"
diff --git a/Sankore-3.1/src/gui/UBFavoriteToolPalette.h b/Sankore-3.1/src/gui/UBFavoriteToolPalette.h
index 177590d..8c6341a 100644
--- a/Sankore-3.1/src/gui/UBFavoriteToolPalette.h
+++ b/Sankore-3.1/src/gui/UBFavoriteToolPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBFAVORITETOOLPALETTE_H_
#define UBFAVORITETOOLPALETTE_H_
diff --git a/Sankore-3.1/src/gui/UBFeaturesActionBar.cpp b/Sankore-3.1/src/gui/UBFeaturesActionBar.cpp
index 2d4a850..20cd601 100644
--- a/Sankore-3.1/src/gui/UBFeaturesActionBar.cpp
+++ b/Sankore-3.1/src/gui/UBFeaturesActionBar.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBFeaturesActionBar.h"
#include "core/memcheck.h"
#include "gui/UBFeaturesWidget.h"
@@ -124,7 +125,13 @@ UBFeaturesActionBar::UBFeaturesActionBar( UBFeaturesController *controller, QWid
mLayout->addWidget(mpRemoveFavoriteBtn);
setCurrentState( IN_ROOT );
mpDeleteBtn->setAcceptDrops(true);
- setAcceptDrops( true );
+ mpFavoriteBtn->setAcceptDrops(true);
+ mpRemoveFavoriteBtn->setAcceptDrops(true);
+ setAcceptDrops( false );
+
+ mpDeleteBtn->installEventFilter(this);
+ mpFavoriteBtn->installEventFilter(this);
+ mpRemoveFavoriteBtn->installEventFilter(this);
}
void UBFeaturesActionBar::setCurrentState( UBFeaturesActionBarState state )
@@ -145,9 +152,6 @@ void UBFeaturesActionBar::setButtons()
mpCloseBtn->hide();
mpRemoveFavoriteBtn->hide();
mpNewFolderBtn->show();
- mpNewFolderBtn->setEnabled(true);
- mpDeleteBtn->setEnabled(true);
-// mpRescanModelBtn->show();
break;
case IN_ROOT:
mpFavoriteBtn->show();
@@ -241,14 +245,9 @@ void UBFeaturesActionBar::unlockIt()
setEnabled(true);
}
-void UBFeaturesActionBar::dragEnterEvent( QDragEnterEvent *event )
+void UBFeaturesActionBar::allowDeleteButton(bool pAllow)
{
- const UBFeaturesMimeData *fMimeData = qobject_cast<const UBFeaturesMimeData*>(event->mimeData());
- if (fMimeData) {
- event->acceptProposedAction();
- } else {
- event->ignore();
- }
+ mpDeleteBtn->setEnabled(pAllow);
}
void UBFeaturesActionBar::dropEvent(QDropEvent *event)
@@ -271,10 +270,6 @@ void UBFeaturesActionBar::dropEvent(QDropEvent *event)
return;
}
}
- event->setDropAction(Qt::MoveAction);
- event->accept();
-
- emit deleteElements(fMimeData);
} else if (dest == mpFavoriteBtn) {
event->setDropAction( Qt::CopyAction);
@@ -283,13 +278,69 @@ void UBFeaturesActionBar::dropEvent(QDropEvent *event)
emit addToFavorite(fMimeData);
} else if (dest == mpRemoveFavoriteBtn) {
- event->setDropAction( Qt::MoveAction );
+ event->setDropAction(Qt::MoveAction);
event->accept();
emit removeFromFavorite(fMimeData);
}
}
+bool UBFeaturesActionBar::eventFilter(QObject *obj, QEvent *event)
+{
+ if (event->type() == QEvent::DragEnter) {
+ QDragEnterEvent *enterEvent = static_cast<QDragEnterEvent*>(event);
+ const UBFeaturesMimeData *fMimeData = qobject_cast<const UBFeaturesMimeData*>(enterEvent->mimeData());
+ if (fMimeData) {
+
+ if (obj == mpDeleteBtn) {
+ foreach (UBFeature curFeature, fMimeData->features()) {
+ if (!curFeature.isDeletable()) {
+ event->ignore();
+ return true;
+ }
+ }
+ event->accept();
+
+ } else if (obj == mpFavoriteBtn) {
+ foreach (UBFeature curFeature, fMimeData->features()) {
+ if (curFeature.getType() == FEATURE_FOLDER) {
+ event->ignore();
+ return true;
+ }
+ }
+ event->accept();
+
+ } else if (obj == mpRemoveFavoriteBtn) {
+ event->accept();
+ return true;
+ }
+ }
+ } else if (event->type() == QEvent::Drop) {
+ QDropEvent *dropEvent = static_cast<QDropEvent*>(event);
+ const UBFeaturesMimeData *fMimeData = qobject_cast<const UBFeaturesMimeData*>(dropEvent->mimeData());
+ if (fMimeData) {
+
+ if (obj == mpDeleteBtn) {
+ dropEvent->setDropAction(Qt::MoveAction);
+ event->accept();
+ emit deleteElements(fMimeData);
+
+ } else if (obj == mpFavoriteBtn) {
+ dropEvent->setDropAction(Qt::CopyAction);
+ event->accept();
+ emit addToFavorite(fMimeData);
+
+ } else if (obj == mpRemoveFavoriteBtn) {
+ dropEvent->setDropAction(Qt::MoveAction);
+ event->accept();
+
+ emit removeFromFavorite(fMimeData);
+ }
+ }
+ }
+ return QWidget::eventFilter(obj, event);
+}
+
UBFeaturesActionBar::~UBFeaturesActionBar()
{
}
diff --git a/Sankore-3.1/src/gui/UBFeaturesActionBar.h b/Sankore-3.1/src/gui/UBFeaturesActionBar.h
index 9166726..68f3c5d 100644
--- a/Sankore-3.1/src/gui/UBFeaturesActionBar.h
+++ b/Sankore-3.1/src/gui/UBFeaturesActionBar.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBFEATURESACTIONBAR_H
#define UBFEATURESACTIONBAR_H
@@ -59,6 +60,7 @@ enum UBFeaturesActionBarState
class UBFeaturesActionBar : public QWidget
{
Q_OBJECT
+
public:
UBFeaturesActionBar(UBFeaturesController *controller, QWidget* parent=0, const char* name="UBFeaturesActionBar");
~UBFeaturesActionBar();
@@ -86,10 +88,12 @@ private slots:
void onActionRescanModel();
void lockIt();
void unlockIt();
+ void allowNewFolderBtn(bool pAllow) {mpNewFolderBtn->setEnabled(pAllow);}
+ void allowDeleteButton(bool pAllow);
protected:
- void dragEnterEvent( QDragEnterEvent *event );
void dropEvent( QDropEvent *event );
+ bool eventFilter(QObject *, QEvent *);
private:
void setButtons();
diff --git a/Sankore-3.1/src/gui/UBFeaturesWidget.cpp b/Sankore-3.1/src/gui/UBFeaturesWidget.cpp
index 1e5e51e..437453b 100644
--- a/Sankore-3.1/src/gui/UBFeaturesWidget.cpp
+++ b/Sankore-3.1/src/gui/UBFeaturesWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QDomDocument>
#include <QWebView>
@@ -30,6 +31,7 @@
#include "core/UBDownloadManager.h"
#include "globals/UBGlobals.h"
#include "board/UBBoardController.h"
+#include "web/UBWebController.h"
const char *UBFeaturesWidget::objNamePathList = "PathList";
const char *UBFeaturesWidget::objNameFeatureList = "FeatureList";
@@ -49,8 +51,6 @@ UBFeaturesWidget::UBFeaturesWidget(QWidget *parent, const char *name)
SET_STYLE_SHEET();
- mIconToLeft = QPixmap(":images/library_open.png");
- mIconToRight = QPixmap(":images/library_close.png");
setAcceptDrops(true);
//Main UBFeature functionality
@@ -75,8 +75,12 @@ UBFeaturesWidget::UBFeaturesWidget(QWidget *parent, const char *name)
layout->addWidget(centralWidget);
layout->addWidget(mActionBar);
- connect(centralWidget->listView(), SIGNAL(clicked(const QModelIndex &)), this, SLOT(currentSelected(const QModelIndex &)));
+ connect(centralWidget->listView(), SIGNAL(clicked(QModelIndex)), this, SLOT(currentSelected(QModelIndex)));
+ connect(centralWidget->listView()->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection))
+ , this, SLOT(processViewSelectionChanged(QItemSelection,QItemSelection)));
connect(this, SIGNAL(sendFileNameList(QStringList)), centralWidget, SIGNAL(sendFileNameList(QStringList)));
+ connect(this, SIGNAL(allowNewFolderButton(bool)), mActionBar, SLOT(allowNewFolderBtn(bool)));
+ connect(this, SIGNAL(allowDeleteButton(bool)), mActionBar, SLOT(allowDeleteButton(bool)));
connect(mActionBar, SIGNAL(searchElement(const QString &)), this, SLOT( searchStarted(const QString &)));
connect(mActionBar, SIGNAL(newFolderToCreate()), this, SLOT(createNewFolder()));
connect(mActionBar, SIGNAL(deleteElements(const UBFeaturesMimeData *)), this, SLOT(deleteElements(const UBFeaturesMimeData *)));
@@ -162,20 +166,35 @@ void UBFeaturesWidget::currentSelected(const QModelIndex ¤t)
mActionBar->setCurrentState(IN_FOLDER);
}
-// } else if (feature.getType() == FEATURE_SEARCH) {
-// centralWidget->showElement(feature, UBFeaturesCentralWidget::FeaturesWebView);
-
} else {
- centralWidget->showElement(feature, UBFeaturesCentralWidget::FeaturePropertiesList);
- mActionBar->setCurrentState( IN_PROPERTIES );
+ if(feature.getType() == FEATURE_BOOKMARK){
+ QString url;
+ QFile bookmarkFile(feature.getFullPath().toLocalFile());
+ if(bookmarkFile.open(QIODevice::ReadOnly|QIODevice::Text)){
+ url = QString::fromUtf8(bookmarkFile.readAll());
+ bookmarkFile.close();
+ UBApplication::webController->loadUrl(QUrl(url));
+ }
+ else
+ qWarning() << "failed to read file named " << feature.getFullPath().toLocalFile();
+ }
+ else{
+ centralWidget->showElement(feature, UBFeaturesCentralWidget::FeaturePropertiesList);
+ mActionBar->setCurrentState( IN_PROPERTIES );
+ }
}
+
mActionBar->cleanText();
+ emit allowNewFolderButton(controller->newFolderAllowed());
+
}
void UBFeaturesWidget::createNewFolder()
{
- centralWidget->showAdditionalData(UBFeaturesCentralWidget::NewFolderDialog, UBFeaturesCentralWidget::Modal);
- emit sendFileNameList(controller->getFileNamesInFolders());
+ if (controller->newFolderAllowed()) {
+ centralWidget->showAdditionalData(UBFeaturesCentralWidget::NewFolderDialog, UBFeaturesCentralWidget::Modal);
+ emit sendFileNameList(controller->getFileNamesInFolders());
+ }
}
void UBFeaturesWidget::deleteElements( const UBFeaturesMimeData * mimeData )
@@ -233,6 +252,27 @@ void UBFeaturesWidget::lockIt(bool pLock)
centralWidget->setLockedExcludingAdditional(pLock);
}
+void UBFeaturesWidget::processViewSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+{
+ Q_UNUSED(deselected)
+
+ bool selectedDeletable = true;
+
+ if (!selected.indexes().count()) {
+ selectedDeletable = false;
+ } else {
+ foreach (QModelIndex curIndex, selected.indexes()) {
+ UBFeature curFeature = curIndex.data(Qt::UserRole + 1).value<UBFeature>();
+ if (!curFeature.isDeletable()) {
+ selectedDeletable = false;
+ break;
+ }
+ }
+ }
+
+ emit allowDeleteButton(selectedDeletable);
+}
+
void UBFeaturesWidget::addToFavorite( const UBFeaturesMimeData * mimeData )
{
if ( !mimeData->hasUrls() )
@@ -327,7 +367,6 @@ void UBFeaturesWidget::onPreviewLoaded(int id, bool pSuccess, QUrl sourceUrl, QU
void UBFeaturesWidget::onAddDownloadedFileToLibrary(bool pSuccess, QUrl sourceUrl, QString pContentHeader, QByteArray pData, QString pTitle)
{
if (pSuccess) {
- qDebug() << pData.length();
controller->addDownloadedFile(sourceUrl, pData, pContentHeader, pTitle);
controller->refreshModels();
}
@@ -345,7 +384,9 @@ void UBFeaturesWidget::addElementsToFavorite()
QModelIndexList selected = centralWidget->listView()->selectionModel()->selectedIndexes();
for ( int i = 0; i < selected.size(); ++i ) {
UBFeature feature = selected.at(i).data( Qt::UserRole + 1 ).value<UBFeature>();
- controller->addToFavorite(feature.getFullPath());
+ if (feature.getType() != FEATURE_FOLDER) {
+ controller->addToFavorite(feature.getFullPath());
+ }
}
}
@@ -396,6 +437,40 @@ void UBFeaturesWidget::importImage(const QImage &image, const QString &fileName)
controller->importImage(image, fileName);
}
+void UBFeaturesWidget::createBookmark(const QString& title, const QString& urlString)
+{
+ controller->createBookmark(title,urlString);
+}
+
+void UBFeaturesWidget::createLink(QString title, QString& urlString,QSize& size, QString mimeType, QString embedCode)
+{
+ controller->createLink(title,urlString,size,mimeType,embedCode);
+}
+
+QString UBFeaturesWidget::importFromUrl(const QUrl &url) const
+{
+ return controller->moveExternalData(url,UBFeature());
+}
+
+void UBFeaturesWidget::switchToElement(const UBFeature &feature)
+{
+ QString newPath = feature.getFullVirtualPath();
+ controller->setCurrentElement(feature);
+ controller->siftElements(newPath);
+
+ centralWidget->switchTo(UBFeaturesCentralWidget::MainList);
+}
+
+void UBFeaturesWidget::switchToRoot()
+{
+ switchToElement(controller->getRootElement());
+}
+
+void UBFeaturesWidget::switchToBookmarks()
+{
+ switchToElement(controller->getBookmarkElement());
+}
+
UBFeaturesListView::UBFeaturesListView( QWidget* parent, const char* name )
: QListView(parent)
{
@@ -414,7 +489,9 @@ void UBFeaturesListView::dragMoveEvent( QDragMoveEvent *event )
QModelIndex index = indexAt(event->pos());
UBFeature onFeature = model()->data(index, Qt::UserRole + 1).value<UBFeature>();
if (fMimeData) {
- if (!index.isValid() || !onFeature.isFolder()) {
+ if (!index.isValid()
+ || !onFeature.isFolder()
+ || !onFeature.testPermissions(UBFeature::WRITE_P)) {
event->ignore();
return;
}
@@ -470,6 +547,7 @@ UBFeaturesNavigatorWidget::UBFeaturesNavigatorWidget(QWidget *parent, const char
mListSlider->setMinimumHeight(20);
mListView->setParent(this);
+
QVBoxLayout *mainLayer = new QVBoxLayout(this);
mainLayer->addWidget(mListView, 1);
@@ -660,13 +738,13 @@ void UBFeaturesNewFolderDialog::setRegexp(const QRegExp pRegExp)
}
bool UBFeaturesNewFolderDialog::validString(const QString &pStr)
{
- return mLineEdit->hasAcceptableInput() && !mFileNameList.contains(pStr, Qt::CaseSensitive);
+ return mLineEdit->hasAcceptableInput() && !mFileNameList.contains(pStr.trimmed(), Qt::CaseSensitive);
}
void UBFeaturesNewFolderDialog::accept()
{
// Setting all the constraints we need
- emit createNewFolder(mLineEdit->text());
+ emit createNewFolder(mLineEdit->text().trimmed());
mLineEdit->clear();
}
void UBFeaturesNewFolderDialog::reject()
@@ -876,6 +954,8 @@ UBFeatureProperties::UBFeatureProperties( QWidget *parent, const char *name ) :
mpThumbnail->setAlignment(Qt::AlignHCenter);
mpLayout->addWidget(mpThumbnail, 0);
+ mpLayout->addWidget(new QLabel(tr("Add"),this));
+
mpButtonLayout = new QHBoxLayout();
mpLayout->addLayout(mpButtonLayout, 0);
@@ -1083,7 +1163,7 @@ void UBFeatureProperties::onAddToPage()
void UBFeatureProperties::onAddToLib()
{
- if ( UBApplication::isFromWeb( mpElement->getFullPath().toString() ) )
+ if ( UBApplication::isFromWeb(mpElement->getFullPath().toString() ) )
{
sDownloadFileDesc desc;
desc.isBackground = false;
@@ -1092,15 +1172,6 @@ void UBFeatureProperties::onAddToLib()
desc.name = mpElement->getMetadata().value("Title", QString());
qDebug() << desc.name;
desc.srcUrl = mpElement->getFullPath().toString();
- QString str1 = mpElement->getFullPath().toString().normalized(QString::NormalizationForm_C);
- QString str2 = mpElement->getFullPath().toString().normalized(QString::NormalizationForm_D);
- QString str3 = mpElement->getFullPath().toString().normalized(QString::NormalizationForm_KC);
- QString str4 = mpElement->getFullPath().toString().normalized(QString::NormalizationForm_KD);
- qDebug() << desc.srcUrl << endl
- << "str1" << str1 << endl
- << "str2" << str2 << endl
- << "str3" << str3 << endl
- << "str4" << str4 << endl;
UBDownloadManager::downloadManager()->addFileToDownload(desc);
}
}
@@ -1347,6 +1418,12 @@ void UBFeaturesModel::moveData(const UBFeature &source, const UBFeature &destina
} else {
curFeature.setFullPath(newPath);
}
+ } else {
+ if (action == Qt::CopyAction) {
+ copyFeature.setPermissions(curFeature.getPermissions());
+ } else {
+ curFeature.setPermissions(UBFeature::WRITE_P | UBFeature::DELETE_P);
+ }
}
// processing copy or move action for virtual FS
if (action == Qt::CopyAction) {
@@ -1369,9 +1446,9 @@ void UBFeaturesModel::moveData(const UBFeature &source, const UBFeature &destina
deleteItem(source);
}
-// Commented because of crashes on mac. But works fine. It is not predictable behavior.
+// Commented because of crashes on mac. But works fine. It is not predictable behavior.
// Please uncomment it if model will not refreshes
-// emit dataRestructured();.
+// emit dataRestructured();.
}
Qt::ItemFlags UBFeaturesModel::flags( const QModelIndex &index ) const
@@ -1387,6 +1464,8 @@ Qt::ItemFlags UBFeaturesModel::flags( const QModelIndex &index ) const
|| item.getType() == FEATURE_IMAGE
|| item.getType() == FEATURE_FLASH
|| item.getType() == FEATURE_INTERNAL
+ || item.getType() == FEATURE_LINK
+ || item.getType() == FEATURE_BOOKMARK
|| item.getType() == FEATURE_FOLDER)
resultFlags |= Qt::ItemIsDragEnabled;
@@ -1422,6 +1501,28 @@ bool UBFeaturesProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex &
return filterRegExp().exactMatch(path);
}
+bool UBFeaturesProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
+{
+ UBFeature leftFeature = left.data(Qt::UserRole + 1).value<UBFeature>();
+ UBFeature rightFeature = right.data(Qt::UserRole + 1).value<UBFeature>();
+
+ if (leftFeature.getType() == FEATURE_FOLDER) {
+ if (rightFeature.getType() == FEATURE_FOLDER) {
+ return leftFeature.getSortKey() < rightFeature.getSortKey();
+ } else {
+ return true;
+ }
+ } else {
+ if (rightFeature.getType() == FEATURE_FOLDER) {
+ return false;
+ } else {
+ return leftFeature.getSortKey() < rightFeature.getSortKey();
+ }
+ }
+
+ return QSortFilterProxyModel::lessThan(left, right);
+}
+
bool UBFeaturesSearchProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex & sourceParent )const
{
QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
@@ -1445,9 +1546,8 @@ bool UBFeaturesPathProxyModel::filterAcceptsRow( int sourceRow, const QModelInde
{
QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
UBFeature feature = sourceModel()->data(index, Qt::UserRole + 1).value<UBFeature>();
-
- return feature.isFolder() && path.startsWith( feature.getFullVirtualPath()) ;
+ return feature.isFolder() && path.startsWith( feature.getFullVirtualPath()) ;
}
QString UBFeaturesItemDelegate::displayText ( const QVariant & value, const QLocale & locale ) const
diff --git a/Sankore-3.1/src/gui/UBFeaturesWidget.h b/Sankore-3.1/src/gui/UBFeaturesWidget.h
index 1476c5c..844400e 100644
--- a/Sankore-3.1/src/gui/UBFeaturesWidget.h
+++ b/Sankore-3.1/src/gui/UBFeaturesWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBFEATURESWIDGET_H
#define UBFEATURESWIDGET_H
@@ -75,20 +76,29 @@ class UBFeaturesWidget : public UBDockPaletteWidget
{
Q_OBJECT
public:
- UBFeaturesWidget(QWidget* parent=0, const char* name="UBFeaturesWidget");
+ UBFeaturesWidget(QWidget* parent=0, const char* name="UBFeaturesWidget");
virtual ~UBFeaturesWidget();
- bool visibleInMode(eUBDockPaletteWidgetMode mode)
+ bool visibleInMode(eUBDockPaletteWidgetMode mode)
{
return mode == eUBDockPaletteWidget_BOARD
- || mode == eUBDockPaletteWidget_DESKTOP;
+ || mode == eUBDockPaletteWidget_DESKTOP
+ || mode == eUBDockPaletteWidget_WEB;
}
UBFeaturesController * getFeaturesController() const { return controller; }
void importImage(const QImage &image, const QString &fileName = QString());
+ void createBookmark(const QString& title, const QString& urlString);
+ void createLink(QString title, QString& urlString, QSize &size, QString mimeType, QString embedCode);
+
+ QString importFromUrl(const QUrl &url) const;
+
+ void switchToElement(const UBFeature &feature);
+ void switchToRoot();
+ void switchToBookmarks();
- static const int minThumbnailSize = 20;
- static const int maxThumbnailSize = 100;
- static const int defaultThumbnailSize = 40;
+ static const int minThumbnailSize = 20;
+ static const int maxThumbnailSize = 100;
+ static const int defaultThumbnailSize = 40;
static const char *objNamePathList;
static const char *objNameFeatureList;
@@ -97,8 +107,13 @@ public:
int scrollbarHorisontalPadding() const { return 10;}
int scrollbarVerticalIndent() const { return 0;}
+ QPixmap iconToLeft() const {return QPixmap(":images/library_open.png");}
+ QPixmap iconToRight() const {return QPixmap(":images/library_close.png");}
+
signals:
void sendFileNameList(const QStringList lst);
+ void allowNewFolderButton(bool pAllow);
+ void allowDeleteButton(bool pAllow);
private slots:
void onPreviewLoaded(int id, bool pSuccess, QUrl sourceUrl, QUrl originalUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground);
@@ -115,6 +130,7 @@ private slots:
void deleteSelectedElements();
void rescanModel();
void lockIt(bool pLock);
+ void processViewSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
private:
void switchToListView();
@@ -147,16 +163,16 @@ private:
class UBFeaturesListView : public QListView
{
- Q_OBJECT
+ Q_OBJECT
public:
- UBFeaturesListView( QWidget* parent=0, const char* name="UBFeaturesListView" );
+ UBFeaturesListView(QWidget* parent=0, const char* name="UBFeaturesListView");
virtual ~UBFeaturesListView() {;}
protected:
- virtual void dragEnterEvent( QDragEnterEvent *event );
- virtual void dropEvent( QDropEvent *event );
- virtual void dragMoveEvent( QDragMoveEvent *event );
+ virtual void dragEnterEvent(QDragEnterEvent *event);
+ virtual void dropEvent(QDropEvent *event);
+ virtual void dragMoveEvent(QDragMoveEvent *event);
private slots:
void thumbnailSizeChanged(int);
@@ -336,7 +352,7 @@ private slots:
//void onBack();
private:
- void populateMetadata();
+ void populateMetadata();
void adaptSize();
QVBoxLayout* mpLayout;
@@ -362,7 +378,7 @@ public:
class UBFeaturesModel : public QAbstractListModel
{
- Q_OBJECT
+ Q_OBJECT
signals:
void dataRestructured();
@@ -371,18 +387,18 @@ public:
UBFeaturesModel(QList<UBFeature> *pFeaturesList, QObject *parent = 0) : QAbstractListModel(parent), featuresList(pFeaturesList) {;}
virtual ~UBFeaturesModel(){;}
- void deleteFavoriteItem( const QString &path );
+ void deleteFavoriteItem( const QString &path );
void deleteItem( const QString &path );
void deleteItem(const UBFeature &feature);
- QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const;
- QMimeData *mimeData( const QModelIndexList &indexes ) const;
- QStringList mimeTypes() const;
- int rowCount( const QModelIndex &parent ) const;
- Qt::ItemFlags flags( const QModelIndex &index ) const;
+ QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const;
+ QMimeData *mimeData( const QModelIndexList &indexes ) const;
+ QStringList mimeTypes() const;
+ int rowCount( const QModelIndex &parent ) const;
+ Qt::ItemFlags flags( const QModelIndex &index ) const;
bool dropMimeData(const QMimeData *mimeData, Qt::DropAction action, int row, int column, const QModelIndex &parent);
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
- bool removeRow(int row, const QModelIndex &parent = QModelIndex());
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+ bool removeRow(int row, const QModelIndex &parent = QModelIndex());
//bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
//bool insertRow(int row, const QModelIndex &parent = QModelIndex());
@@ -394,69 +410,71 @@ public slots:
void addItem( const UBFeature &item );
private:
- QList <UBFeature> *featuresList;
+ QList <UBFeature> *featuresList;
};
class UBFeaturesProxyModel : public QSortFilterProxyModel
{
- Q_OBJECT
+ Q_OBJECT
public:
- UBFeaturesProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent) {;}
+ UBFeaturesProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent) {setDynamicSortFilter(true);}
virtual ~UBFeaturesProxyModel() {}
+
protected:
- virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
+ virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
+ virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
};
class UBFeaturesSearchProxyModel : public QSortFilterProxyModel
{
- Q_OBJECT
+ Q_OBJECT
public:
UBFeaturesSearchProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent), mFilterPrefix() {;}
virtual ~UBFeaturesSearchProxyModel() {}
void setFilterPrefix(const QString &newPrefix) {mFilterPrefix = newPrefix;}
protected:
- virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
+ virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
private:
QString mFilterPrefix;
};
class UBFeaturesPathProxyModel : public QSortFilterProxyModel
{
- Q_OBJECT
+ Q_OBJECT
public:
UBFeaturesPathProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent) {;}
virtual ~UBFeaturesPathProxyModel() {}
void setPath( const QString &p ) { path = p; }
protected:
- virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
+ virtual bool filterAcceptsRow ( int sourceRow, const QModelIndex & sourceParent ) const;
private:
- QString path;
+ QString path;
};
class UBFeaturesItemDelegate : public QStyledItemDelegate
{
- Q_OBJECT
+ Q_OBJECT
public:
UBFeaturesItemDelegate(QObject *parent = 0, const QListView *lw = 0) : QStyledItemDelegate(parent) { listView = lw; }
~UBFeaturesItemDelegate() {}
- //UBFeaturesItemDelegate(const QListView *lw = 0) { listView = lw; };
- //void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ //UBFeaturesItemDelegate(const QListView *lw = 0) { listView = lw; };
+ //void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
//QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
- virtual QString displayText ( const QVariant & value, const QLocale & locale ) const;
+ virtual QString displayText ( const QVariant & value, const QLocale & locale ) const;
private:
- const QListView *listView;
+ const QListView *listView;
};
class UBFeaturesPathItemDelegate : public QStyledItemDelegate
{
- Q_OBJECT
+ Q_OBJECT
public:
UBFeaturesPathItemDelegate(QObject *parent = 0);
- ~UBFeaturesPathItemDelegate();
- virtual QString displayText ( const QVariant & value, const QLocale & locale ) const;
- void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ ~UBFeaturesPathItemDelegate();
+ virtual QString displayText ( const QVariant & value, const QLocale & locale ) const;
+ void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
private:
- QPixmap *arrowPixmap;
+ QPixmap *arrowPixmap;
};
diff --git a/Sankore-3.1/src/gui/UBFloatingPalette.cpp b/Sankore-3.1/src/gui/UBFloatingPalette.cpp
index 14738f1..4ebb5db 100644
--- a/Sankore-3.1/src/gui/UBFloatingPalette.cpp
+++ b/Sankore-3.1/src/gui/UBFloatingPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include <QPainterPath>
@@ -207,7 +208,7 @@ QSize UBFloatingPalette::preferredSize()
return palettePreferredSize;
}
-void UBFloatingPalette::adjustSizeAndPosition(bool pUp)
+void UBFloatingPalette::adjustSizeAndPosition(bool pUp, bool resetPosition)
{
QSize newPreferredSize = preferredSize();
@@ -234,6 +235,9 @@ void UBFloatingPalette::adjustSizeAndPosition(bool pUp)
palette->resize(newPreferredSize.width(), palette->size().height());
}
}
+
+ if (parentWidget() && resetPosition)
+ move((parentWidget()->width() - width()) / 2, (parentWidget()->height() - height()) / 5);
}
void UBFloatingPalette::removeAllAssociatedPalette()
@@ -283,46 +287,46 @@ void UBFloatingPalette::minimizePalette(const QPoint& pos)
if(!mCanBeMinimized)
{
// If this floating palette cannot be minimized, we exit this method.
- return;
+ return;
}
if(mMinimizedLocation == eMinimizedLocation_None)
{
- // Verify if we have to minimize this palette
- if(pos.x() == 5)
- {
- mMinimizedLocation = eMinimizedLocation_Left;
- }
+ // Verify if we have to minimize this palette
+ if(pos.x() == 5)
+ {
+ mMinimizedLocation = eMinimizedLocation_Left;
+ }
// else if(pos.y() == 5)
// {
// mMinimizedLocation = eMinimizedLocation_Top;
// }
else if(pos.x() == parentWidget()->width() - getParentRightOffset() - width() - 5)
- {
- mMinimizedLocation = eMinimizedLocation_Right;
- }
+ {
+ mMinimizedLocation = eMinimizedLocation_Right;
+ }
// else if(pos.y() == parentSize.height() - height() - 5)
// {
// mMinimizedLocation = eMinimizedLocation_Bottom;
// }
- // Minimize the Palette
- if(mMinimizedLocation != eMinimizedLocation_None)
- {
- emit minimizeStart(mMinimizedLocation);
- }
+ // Minimize the Palette
+ if(mMinimizedLocation != eMinimizedLocation_None)
+ {
+ emit minimizeStart(mMinimizedLocation);
+ }
}
else
{
- // Restore the palette
- if(pos.x() > 5 &&
- pos.y() > 5 &&
+ // Restore the palette
+ if(pos.x() > 5 &&
+ pos.y() > 5 &&
pos.x() < parentWidget()->width() - getParentRightOffset() - width() - 5 &&
pos.y() < parentWidget()->size().height() - height() - 5)
- {
- mMinimizedLocation = eMinimizedLocation_None;
- emit maximizeStart();
- }
+ {
+ mMinimizedLocation = eMinimizedLocation_None;
+ emit maximizeStart();
+ }
}
}
@@ -330,3 +334,13 @@ void UBFloatingPalette::setMinimizePermission(bool permission)
{
mCanBeMinimized = permission;
}
+
+void UBFloatingPalette::savePos()
+{
+ mOldPos = pos();
+}
+
+void UBFloatingPalette::restorePos()
+{
+ move(mOldPos);
+}
diff --git a/Sankore-3.1/src/gui/UBFloatingPalette.h b/Sankore-3.1/src/gui/UBFloatingPalette.h
index 4aae193..eeb5c29 100644
--- a/Sankore-3.1/src/gui/UBFloatingPalette.h
+++ b/Sankore-3.1/src/gui/UBFloatingPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBFLOATINGPALLETTE_H_
#define UBFLOATINGPALLETTE_H_
@@ -54,7 +55,7 @@ class UBFloatingPalette : public QWidget
void addAssociatedPalette(UBFloatingPalette* pOtherPalette);
void removeAssociatedPalette(UBFloatingPalette* pOtherPalette);
- virtual void adjustSizeAndPosition(bool pUp = true);
+ virtual void adjustSizeAndPosition(bool pUp = true, bool resetPosition = true);
void setCustomPosition(bool pFlag);
@@ -65,6 +66,9 @@ class UBFloatingPalette : public QWidget
void setMinimizePermission(bool permission);
+ void savePos();
+ void restorePos();
+
protected:
virtual void enterEvent(QEvent *event);
@@ -97,6 +101,8 @@ class UBFloatingPalette : public QWidget
eMinimizedLocation mMinimizedLocation;
Qt::Corner mDefaultPosition;
+ QPoint mOldPos;
+
signals:
void mouseEntered();
void minimizeStart(eMinimizedLocation location);
diff --git a/Sankore-3.1/src/gui/UBIconButton.cpp b/Sankore-3.1/src/gui/UBIconButton.cpp
index 9e7a5e2..335db35 100644
--- a/Sankore-3.1/src/gui/UBIconButton.cpp
+++ b/Sankore-3.1/src/gui/UBIconButton.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include "UBIconButton.h"
diff --git a/Sankore-3.1/src/gui/UBIconButton.h b/Sankore-3.1/src/gui/UBIconButton.h
index a7c4934..710e637 100644
--- a/Sankore-3.1/src/gui/UBIconButton.h
+++ b/Sankore-3.1/src/gui/UBIconButton.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBICONBUTTON_H_
#define UBICONBUTTON_H_
diff --git a/Sankore-3.1/src/gui/UBKeyboardPalette.cpp b/Sankore-3.1/src/gui/UBKeyboardPalette.cpp
index 6bec141..5446f9a 100644
--- a/Sankore-3.1/src/gui/UBKeyboardPalette.cpp
+++ b/Sankore-3.1/src/gui/UBKeyboardPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,726 +18,756 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include <QtGui>
-#include <QList>
-#include <QSize>
-
-#include "UBKeyboardPalette.h"
-#include "core/UBSettings.h"
-
-#include "core/UBApplication.h"
-#include "gui/UBMainWindow.h"
-
-#include "core/memcheck.h"
-
-/*
-
- UBKeyboardPalette
-
-*/
-
-
-UBKeyboardPalette::UBKeyboardPalette(QWidget *parent)
- : UBActionPalette(Qt::TopRightCorner, parent)
-{
-
- // setWindowFlags(/*Qt::CustomizeWindowHint|*/Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);
-
- setCustomCloseProcessing(true);
- setCustomPosition(true);
- setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
- setFocusPolicy(Qt::NoFocus);
- setClosable(true);
- setGrip(false);
-
- capsLock = false;
- shift = false;
- languagePopupActive = false;
- keyboardActive = false;
- nSpecialModifierIndex = 0;
- specialModifier = 0;
- btnWidth = btnHeight = 16;
- strSize = "16x16";
- currBtnImages = new BTNImages("16", btnWidth, btnHeight);
- storage = NULL;
-
-
- buttons = new UBKeyButton*[47];
- for (int i=0; i<47; i++)
- {
- buttons[i] = new UBKeyButton(this);
- }
-
- locales = UBPlatformUtils::getKeyboardLayouts(this->nLocalesCount);
-
- createCtrlButtons();
-
- nCurrentLocale = UBSettings::settings()->KeyboardLocale->get().toInt();
- if (nCurrentLocale < 0 || nCurrentLocale >= nLocalesCount)
- nCurrentLocale = 0;
- if (locales!=NULL)
- setInput(locales[nCurrentLocale]);
-
- setContentsMargins( 22, 22, 22, 22 );
-
- init();
-}
-
-//QList<UBKeyboardPalette*> UBKeyboardPalette::instances;
-void UBKeyboardPalette::init()
-{
- m_isVisible = false;
- setVisible(false);
-
- setKeyButtonSize(UBSettings::settings()->boardKeyboardPaletteKeyBtnSize->get().toString());
-
- connect(this, SIGNAL(keyboardActivated(bool)), this, SLOT(onActivated(bool)));
- connect(UBSettings::settings()->boardKeyboardPaletteKeyBtnSize, SIGNAL(changed(QVariant)), this, SLOT(keyboardPaletteButtonSizeChanged(QVariant)));
- connect(UBApplication::mainWindow->actionVirtualKeyboard, SIGNAL(triggered(bool)), this, SLOT(showKeyboard(bool)));
- connect(this, SIGNAL(closed()), this, SLOT(hideKeyboard()));
-
- //------------------------------//
-
- UBPlatformUtils::setWindowNonActivableFlag(this, true);
-}
-
-void UBKeyboardPalette::showKeyboard(bool show)
-{
- m_isVisible = show;
-}
-
-
-void UBKeyboardPalette::hideKeyboard()
-{
- UBApplication::mainWindow->actionVirtualKeyboard->activate(QAction::Trigger);
-}
-
-void UBKeyboardPalette::syncPosition(const QPoint & pos)
-{
- m_pos = pos;
- move(pos);
-}
-
-void UBKeyboardPalette::syncLocale(int nLocale)
-{
- nCurrentLocale = nLocale;
- setInput(locales[nCurrentLocale]);
-}
-
-void UBKeyboardPalette::keyboardPaletteButtonSizeChanged(QVariant size)
-{
- setKeyButtonSize(size.toString());
-}
-
-void UBKeyboardPalette::setInput(const UBKeyboardLocale* locale)
-{
- if (locale!=NULL)
- {
- for (int i=0; i<47; i++)
- buttons[i]->setKeyBt((*locale)[i]);
- }
- else
- {
- this->hide();
- }
-}
-
-UBKeyboardPalette::~UBKeyboardPalette()
-{
- //for (int i=0; i<47; i++)
- // delete buttons[i];
- delete [] buttons;
-
- //for (int i=0; i<8; i++)
- // delete ctrlButtons[i];
- delete [] ctrlButtons;
-
- //if (locales!=NULL)
- //{
- // for (int i=0; i<nLocalesCount; i++)
- // delete locales[i];
- // delete [] locales;
- //}
-
- if(currBtnImages != NULL)
- {
- delete currBtnImages;
- currBtnImages = NULL;
- }
-
- onActivated(false);
-}
-
-QSize UBKeyboardPalette::sizeHint () const
-{
- int w = contentsMargins().left() + 15 * btnWidth + contentsMargins().right();
- int h = contentsMargins().top() + 5 * btnHeight + contentsMargins().bottom();
- return QSize(w, h);
-}
-
-const QString* UBKeyboardPalette::getLocaleName()
-{
- return locales == NULL ? NULL : &(locales[nCurrentLocale]->name);
-}
-
-void UBKeyboardPalette::setLocale(int nLocale)
-{
- if (locales != NULL)
- {
- nCurrentLocale = nLocale;
-
- setInput(locales[nCurrentLocale]);
- onLocaleChanged(locales[nCurrentLocale]);
- update();
-
- UBSettings::settings()->KeyboardLocale->set(nCurrentLocale);
- }
- emit localeChanged(nLocale);
-}
-
-void UBKeyboardPalette::setKeyButtonSize(const QString& _strSize)
-{
- QStringList strs = _strSize.split('x');
-
- if (strs.size()==2)
- {
- strSize = _strSize;
- btnWidth = strs[0].toInt();
- btnHeight = strs[1].toInt();
-
- if(currBtnImages != NULL)
- delete currBtnImages;
- currBtnImages = new BTNImages(strs[1], btnWidth, btnHeight);
-
- adjustSizeAndPosition();
- }
-}
-
-void UBKeyboardPalette::enterEvent ( QEvent * )
-{
- if (keyboardActive)
- return;
-
- keyboardActive = true;
-
- adjustSizeAndPosition();
-
- emit keyboardActivated(true);
-}
-
-void UBKeyboardPalette::leaveEvent ( QEvent * )
-{
- if (languagePopupActive || !keyboardActive || mIsMoving)
- return;
-
- keyboardActive = false;
-
- adjustSizeAndPosition();
-
- emit keyboardActivated(false);
-}
-
-void UBKeyboardPalette::moveEvent ( QMoveEvent * event )
-{
- UBActionPalette::moveEvent(event);
- emit moved(event->pos());
-}
-
-void UBKeyboardPalette::adjustSizeAndPosition(bool pUp)
-{
- QSize rSize = sizeHint();
- if (rSize != size())
- {
- int dx = (rSize.width() - size().width()) /2;
- int dy = rSize.height() - size().height();
-
- this->move(x()-dx, y() - dy);
- this->resize(rSize.width(), rSize.height());
- }
- UBActionPalette::adjustSizeAndPosition(pUp);
-}
-
-void UBKeyboardPalette::paintEvent( QPaintEvent* event)
-{
- checkLayout();
-
- UBActionPalette::paintEvent(event);
-
- QRect r = this->geometry();
-
- int lleft, ltop, lright, lbottom;
- getContentsMargins ( &lleft, <op, &lright, &lbottom ) ;
-
- //------------------------------------------------
- // calculate start offset from left, and from top
-
- int ctrlButtonsId = 0;
- lleft = ( r.width() - btnWidth * 15 ) / 2;
- ltop = ( r.height() - btnHeight * 5 ) / 2;
-
- //------------------------------------------------
- // set geometry (position) for row 1
-
- int offX = lleft;
- int offY = ltop;
-
- //-------------------
-
- // buttons [`]..[+]
- for (int i = 0; i<13; i++)
- {
- buttons[i]->setGeometry(offX, offY, btnWidth, btnHeight);
- offX += btnWidth;
- }
-
- // button Backspace
- ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 2, btnHeight);
- offX += btnWidth * 2;
-
- //------------------------------------------------
- // set geometry (position) for row 2
-
- offX = lleft;
- offY += btnHeight;
- offX += btnWidth / 2;
-
- //-------------------
-
- // button Tab
- ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 2, btnHeight);
- offX += btnWidth * 2;
-
- // buttons [q]..[]]
- for (int i = 0; i<12; i++)
- {
- buttons[i + 13]->setGeometry(offX, offY, btnWidth, btnHeight);
- offX += btnWidth;
- }
-
-// // Row 2 Stub
-// ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 1.5, btnHeight);
-// offX += btnWidth * 1.5;
-
- //------------------------------------------------
- // set geometry (position) for row 3
-
- offX = lleft;
- offY += btnHeight;
-
- //-------------------
-
-// // Row 3 Stub
-
- // button Enter
- ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 1, btnHeight);
- offX += btnWidth*1;
-
- // buttons [a]..[\]
- for (int i = 0; i < 12; i++)
- {
- buttons[i + 12 + 13]->setGeometry(offX, offY, btnWidth, btnHeight);
- offX += btnWidth;
- }
-
- // button Enter
- ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 2, btnHeight);
- offX += btnWidth*2;
-
- //------------------------------------------------
- // set geometry (position) for row 4
-
- offX = lleft;
- offY += btnHeight;
-
- //-------------------
-
- // button LCapsLock
- ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth*2.5, btnHeight);
- offX += btnWidth*2.5;
-
- for (int i = 0; i < 10; i++)
- {
- buttons[i + 12 + 12 + 13]->setGeometry(offX, offY, btnWidth, btnHeight);
- offX += btnWidth;
- }
-
- // button RCapsLock
- ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth*2.5, btnHeight);
- offX += btnWidth*2.5;
-
- //------------------------------------------------
- // set geometry (position) for row 5
-
- offX = lleft;
- offY += btnHeight;
-
- //-------------------
-
- ctrlButtons[ctrlButtonsId++]->setGeometry(offX + btnWidth * 1 , offY, btnWidth * 2, btnHeight);
- ctrlButtons[ctrlButtonsId++]->setGeometry(offX + btnWidth * 3 , offY, btnWidth * 9, btnHeight);
- ctrlButtons[ctrlButtonsId++]->setGeometry(offX + btnWidth * 12, offY, btnWidth * 2, btnHeight);
-
- //------------------------------------------------
-}
-
-void UBKeyboardPalette::onDeactivated()
-{
- onActivated(false);
-}
-
-
-//-----------------------------------------------------------------------//
-// BTNImages Class
-//-----------------------------------------------------------------------//
-
-BTNImages::BTNImages(QString strHeight, int width, int height)
-{
- m_strHeight = strHeight;
- m_width = width;
- m_height = height;
-
- m_strLeftPassive = ":/images/virtual.keyboard/" + strHeight + "/left-passive.png";
- m_strCenterPassive = ":/images/virtual.keyboard/" + strHeight + "/centre-passive.png";
- m_strRightPassive = ":/images/virtual.keyboard/" + strHeight + "/right-passive.png";
- m_strLeftActive = ":/images/virtual.keyboard/" + strHeight + "/left-active.png";
- m_strCenterActive = ":/images/virtual.keyboard/" + strHeight + "/centre-active.png";
- m_strRightActive = ":/images/virtual.keyboard/" + strHeight + "/right-active.png";
-
- m_btnLeftPassive = QImage(m_strLeftPassive);
- m_btnCenterPassive = QImage(m_strCenterPassive);
- m_btnRightPassive = QImage(m_strRightPassive);
- m_btnLeftActive = QImage(m_strLeftActive);
- m_btnCenterActive = QImage(m_strCenterActive);
- m_btnRightActive = QImage(m_strRightActive);
-}
-
-ContentImage::ContentImage(QString strHeight, int height, QString strContentName)
-{
- m_strHeight = strHeight;
- m_height = height;
-
- m_strContent = ":/images/virtual.keyboard/" + strHeight + "/" + strContentName + ".png";
- m_btnContent = QImage(m_strContent);
-}
-
-//-----------------------------------------------------------------------//
-// UBKeyboardButton Class
-//-----------------------------------------------------------------------//
-
-UBKeyboardButton::UBKeyboardButton(UBKeyboardPalette* parent, QString contentImagePath = "")
- :QWidget(parent),
- keyboard(parent),
- bFocused(false),
- bPressed(false)
-{
- m_parent = parent;
-
- m_contentImagePath = contentImagePath;
- imgContent = NULL;
-
- setCursor(Qt::PointingHandCursor);
-}
-
-UBKeyboardButton::~UBKeyboardButton()
-{
- if(imgContent != NULL)
- {
- delete imgContent;
- imgContent = NULL;
- }
-}
-
-bool UBKeyboardButton::isPressed()
-{
- return bPressed;
-}
-
-void UBKeyboardButton::paintEvent(QPaintEvent*)
-{
-
- QPainter painter(this);
-
- //--------------------------
-
- if(imgContent != NULL)
- {
- if(imgContent->m_height != m_parent->currBtnImages->m_height)
- {
- delete imgContent;
- if(!m_contentImagePath.isEmpty())
- imgContent = new ContentImage(m_parent->currBtnImages->m_strHeight, m_parent->currBtnImages->m_height, m_contentImagePath);
- }
- }
- else
- if(!m_contentImagePath.isEmpty())
- imgContent = new ContentImage(m_parent->currBtnImages->m_strHeight, m_parent->currBtnImages->m_height, m_contentImagePath);
-
- //--------------------------
-
- if (isPressed())
- {
- painter.drawImage( 0,0, m_parent->currBtnImages->m_btnLeftActive, 0,0, m_parent->currBtnImages->m_btnLeftActive.width(), m_parent->currBtnImages->m_btnLeftActive.height() );
- painter.drawImage( QRect(m_parent->currBtnImages->m_btnLeftActive.width(), 0, width() - m_parent->currBtnImages->m_btnLeftActive.width() - m_parent->currBtnImages->m_btnRightActive.width(), height()), m_parent->currBtnImages->m_btnCenterActive );
- painter.drawImage( width() - m_parent->currBtnImages->m_btnRightActive.width(), 0, m_parent->currBtnImages->m_btnRightActive, 0,0, m_parent->currBtnImages->m_btnRightActive.width(), m_parent->currBtnImages->m_btnRightActive.height() );
- }
- else
- {
- painter.drawImage( 0,0, m_parent->currBtnImages->m_btnLeftPassive, 0,0, m_parent->currBtnImages->m_btnLeftPassive.width(), m_parent->currBtnImages->m_btnLeftPassive.height() );
- painter.drawImage( QRect(m_parent->currBtnImages->m_btnLeftPassive.width(), 0, width() - m_parent->currBtnImages->m_btnLeftPassive.width() - m_parent->currBtnImages->m_btnRightPassive.width(), height()), m_parent->currBtnImages->m_btnCenterPassive );
- painter.drawImage( width() - m_parent->currBtnImages->m_btnRightPassive.width(), 0, m_parent->currBtnImages->m_btnRightPassive, 0,0, m_parent->currBtnImages->m_btnRightPassive.width(), m_parent->currBtnImages->m_btnRightPassive.height() );
- }
-
- //--------------------------
-
- this->paintContent(painter);
-
- //--------------------------
-}
-
-void UBKeyboardButton::enterEvent ( QEvent*)
-{
- bFocused = true;
- update();
-}
-
-void UBKeyboardButton::leaveEvent ( QEvent*)
-{
- bFocused = false;
- update();
-}
-
-void UBKeyboardButton::mousePressEvent ( QMouseEvent * event)
-{
- event->accept();
- bPressed = true;
- update();
- this->onPress();
-}
-
-void UBKeyboardButton::mouseReleaseEvent ( QMouseEvent * )
-{
- bPressed = false;
- update();
- this->onRelease();
-}
-
-UBKeyButton::UBKeyButton(UBKeyboardPalette* parent)
- :UBKeyboardButton(parent),
- keybt(0)
-{}
-
-UBKeyButton::~UBKeyButton()
-{}
-
-bool UBKeyButton::shifted()
-{
- bool b = keyboard->shift;
- if (keybt->capsLockSwitch && keyboard->capsLock)
- b = !b;
- return b;
-}
-
-void UBKeyButton::onPress()
-{
- if (keybt!=NULL)
- {
- int codeIndex = keyboard->nSpecialModifierIndex * 2 + shifted();
-
- if (keyboard->nSpecialModifierIndex)
- {
- if (keybt->codes[codeIndex].empty())
- {
- sendUnicodeSymbol(keyboard->specialModifier);
- sendUnicodeSymbol(keybt->codes[shifted()]);
- }
- else
- {
- sendUnicodeSymbol(keybt->codes[codeIndex]);
- }
-
- keyboard->nSpecialModifierIndex = 0;
- }
- else
- {
- int nSpecialModifierIndex = shifted()? keybt->modifier2 : keybt->modifier1;
-
- if (nSpecialModifierIndex)
- {
- keyboard->nSpecialModifierIndex = nSpecialModifierIndex;
- keyboard->specialModifier = keybt->codes[codeIndex];
- }
- else
- {
- sendUnicodeSymbol(keybt->codes[codeIndex]);
- }
- }
- }
-
- if (keyboard->shift)
- {
- keyboard->shift = false;
- keyboard->update();
- }
-}
-
-void UBKeyButton::onRelease()
-{}
-
-void UBKeyButton::paintContent(QPainter& painter)
-{
- if (keybt)
- {
- QString text(QChar(shifted() ? keybt->symbol2 : keybt->symbol1));
- QRect textRect(rect().x()+2, rect().y()+2, rect().width()-4, rect().height()-4);
- painter.drawText(textRect, Qt::AlignCenter, text);
- }
-}
-
-UBCntrlButton::UBCntrlButton(UBKeyboardPalette* parent, int _code, const QString& _contentImagePath )
- :UBKeyboardButton(parent, _contentImagePath),
- label(""),
- code(_code)
-{}
-
-
-UBCntrlButton::UBCntrlButton(UBKeyboardPalette* parent, const QString& _label, int _code )
- :UBKeyboardButton(parent),
- label(_label),
- code(_code)
-{}
-
-UBCntrlButton::~UBCntrlButton()
-{}
-
-void UBCntrlButton::onPress()
-{
- sendControlSymbol(code);
-}
-
-void UBCntrlButton::onRelease()
-{}
-
-void UBCntrlButton::paintContent(QPainter& painter)
-{
- if(!label.isEmpty())
- {
- painter.drawText(rect(), Qt::AlignCenter, label);
- }
- else
- if(imgContent != NULL)
- {
- painter.drawImage(( rect().width() - imgContent->m_btnContent.width() ) / 2, ( rect().height() - imgContent->m_btnContent.height() ) / 2,
- imgContent->m_btnContent, 0,0, imgContent->m_btnContent.width(), imgContent->m_btnContent.height());
- }
-}
-
-UBCapsLockButton::UBCapsLockButton(UBKeyboardPalette* parent, const QString _contentImagePath)
- :UBKeyboardButton(parent, _contentImagePath)
-{}
-
-UBCapsLockButton::~UBCapsLockButton()
-{}
-
-void UBCapsLockButton::onPress()
-{
- keyboard->capsLock = !keyboard->capsLock;
- keyboard->update();
-}
-
-void UBCapsLockButton::onRelease()
-{}
-
-bool UBCapsLockButton::isPressed()
-{
- return keyboard->capsLock;
-}
-
-void UBCapsLockButton::paintContent(QPainter& painter)
-{
- if(imgContent != NULL)
- {
- painter.drawImage(( rect().width() - imgContent->m_btnContent.width() ) / 2, ( rect().height() - imgContent->m_btnContent.height() ) / 2,
- imgContent->m_btnContent, 0,0, imgContent->m_btnContent.width(), imgContent->m_btnContent.height());
- }
- else
- painter.drawText(rect(), Qt::AlignCenter, "^");
-}
-
-UBShiftButton::UBShiftButton(UBKeyboardPalette* parent, const QString _contentImagePath)
- :UBKeyboardButton(parent, _contentImagePath)
-{}
-
-UBShiftButton::~UBShiftButton()
-{}
-
-void UBShiftButton::onPress()
-{
- keyboard->shift = !keyboard->shift;
- keyboard->update();
-}
-
-
-void UBShiftButton::onRelease()
-{}
-
-bool UBShiftButton::isPressed()
-{
- return keyboard->shift;
-}
-
-void UBShiftButton::paintContent(QPainter& painter)
-{
- if(imgContent != NULL)
- {
- painter.drawImage(( rect().width() - imgContent->m_btnContent.width() ) / 2, ( rect().height() - imgContent->m_btnContent.height() ) / 2,
- imgContent->m_btnContent, 0,0, imgContent->m_btnContent.width(), imgContent->m_btnContent.height());
- }
- else
- painter.drawText(rect(), Qt::AlignCenter, "^");
-}
-
-
-
-UBLocaleButton::UBLocaleButton(UBKeyboardPalette* parent)
- :UBKeyboardButton(parent)
-{
- localeMenu = new QMenu(this);
-
- for (int i=0; i<parent->nLocalesCount; i++)
- {
- QAction* action = (parent->locales[i]->icon!=NULL) ?
- localeMenu->addAction(*parent->locales[i]->icon, parent->locales[i]->fullName)
- : localeMenu->addAction(parent->locales[i]->fullName);
- action->setData(QVariant(i));
- }
-}
-
-UBLocaleButton::~UBLocaleButton()
-{
- delete localeMenu;
-}
-
-void UBLocaleButton::onPress()
-{
-}
-
-void UBLocaleButton::onRelease()
-{
- keyboard->languagePopupActive = true;
- QAction* action = localeMenu->exec(mapToGlobal(QPoint(0,0)));
- keyboard->languagePopupActive = false;
- if (action!=NULL)
- {
- int nLocale = action->data().toInt();
- keyboard->setLocale(nLocale);
- }
-}
-
-void UBLocaleButton::paintContent(QPainter& painter)
-{
- const QString* localeName = keyboard->getLocaleName();
- if (localeName!=NULL)
- painter.drawText(rect(), Qt::AlignCenter, *localeName);
-}
+
+
+
+#include <QtGui>
+#include <QList>
+#include <QSize>
+
+#include "UBKeyboardPalette.h"
+#include "core/UBSettings.h"
+
+#include "core/UBApplication.h"
+#include "gui/UBMainWindow.h"
+
+#include "core/memcheck.h"
+
+/*
+
+ UBKeyboardPalette
+
+*/
+
+
+UBKeyboardPalette::UBKeyboardPalette(QWidget *parent)
+ : UBActionPalette(Qt::TopRightCorner, parent)
+{
+
+ // setWindowFlags(/*Qt::CustomizeWindowHint|*/Qt::WindowStaysOnTopHint|Qt::FramelessWindowHint);
+
+ setCustomCloseProcessing(true);
+ setCustomPosition(true);
+ setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ setFocusPolicy(Qt::NoFocus);
+ setClosable(true);
+ setGrip(false);
+
+ capsLock = false;
+ shift = false;
+ languagePopupActive = false;
+ keyboardActive = false;
+ nSpecialModifierIndex = 0;
+ specialModifier = 0;
+ btnWidth = btnHeight = 16;
+ strSize = "16x16";
+ currBtnImages = new BTNImages("16", btnWidth, btnHeight);
+ storage = NULL;
+
+
+ buttons = new UBKeyButton*[47];
+ for (int i=0; i<47; i++)
+ {
+ buttons[i] = new UBKeyButton(this);
+ }
+
+ locales = UBPlatformUtils::getKeyboardLayouts(this->nLocalesCount);
+
+ createCtrlButtons();
+
+ nCurrentLocale = UBSettings::settings()->KeyboardLocale->get().toInt();
+ if (nCurrentLocale < 0 || nCurrentLocale >= nLocalesCount)
+ nCurrentLocale = 0;
+ if (locales!=NULL)
+ setInput(locales[nCurrentLocale]);
+
+ setContentsMargins( 22, 22, 22, 22 );
+
+ init();
+}
+
+//QList<UBKeyboardPalette*> UBKeyboardPalette::instances;
+void UBKeyboardPalette::init()
+{
+ m_isVisible = false;
+ setVisible(false);
+
+ setKeyButtonSize(UBSettings::settings()->boardKeyboardPaletteKeyBtnSize->get().toString());
+
+ connect(this, SIGNAL(keyboardActivated(bool)), this, SLOT(onActivated(bool)));
+ connect(UBSettings::settings()->boardKeyboardPaletteKeyBtnSize, SIGNAL(changed(QVariant)), this, SLOT(keyboardPaletteButtonSizeChanged(QVariant)));
+ connect(UBApplication::mainWindow->actionVirtualKeyboard, SIGNAL(triggered(bool)), this, SLOT(showKeyboard(bool)));
+ connect(this, SIGNAL(closed()), this, SLOT(hideKeyboard()));
+
+ //------------------------------//
+
+ UBPlatformUtils::setWindowNonActivableFlag(this, true);
+}
+
+void UBKeyboardPalette::showKeyboard(bool show)
+{
+ m_isVisible = show;
+}
+
+
+void UBKeyboardPalette::hideKeyboard()
+{
+ UBApplication::mainWindow->actionVirtualKeyboard->activate(QAction::Trigger);
+}
+
+void UBKeyboardPalette::syncPosition(const QPoint & pos)
+{
+ m_pos = pos;
+ move(pos);
+}
+
+void UBKeyboardPalette::syncLocale(int nLocale)
+{
+ nCurrentLocale = nLocale;
+ setInput(locales[nCurrentLocale]);
+}
+
+void UBKeyboardPalette::keyboardPaletteButtonSizeChanged(QVariant size)
+{
+ setKeyButtonSize(size.toString());
+}
+
+void UBKeyboardPalette::setInput(const UBKeyboardLocale* locale)
+{
+ if (locale!=NULL)
+ {
+ for (int i=0; i<47; i++)
+ buttons[i]->setKeyBt((*locale)[i]);
+ }
+ else
+ {
+ this->hide();
+ }
+}
+
+UBKeyboardPalette::~UBKeyboardPalette()
+{
+ //for (int i=0; i<47; i++)
+ // delete buttons[i];
+ delete [] buttons;
+
+ //for (int i=0; i<8; i++)
+ // delete ctrlButtons[i];
+ delete [] ctrlButtons;
+
+ //if (locales!=NULL)
+ //{
+ // for (int i=0; i<nLocalesCount; i++)
+ // delete locales[i];
+ // delete [] locales;
+ //}
+
+ if(currBtnImages != NULL)
+ {
+ delete currBtnImages;
+ currBtnImages = NULL;
+ }
+
+ onActivated(false);
+}
+
+QSize UBKeyboardPalette::sizeHint () const
+{
+ int w = contentsMargins().left() + 15 * btnWidth + contentsMargins().right();
+ int h = contentsMargins().top() + 5 * btnHeight + contentsMargins().bottom();
+ return QSize(w, h);
+}
+
+const QString* UBKeyboardPalette::getLocaleName()
+{
+ return locales == NULL ? NULL : &(locales[nCurrentLocale]->name);
+}
+
+void UBKeyboardPalette::setLocale(int nLocale)
+{
+ if (locales != NULL)
+ {
+ nCurrentLocale = nLocale;
+
+ setInput(locales[nCurrentLocale]);
+ onLocaleChanged(locales[nCurrentLocale]);
+ update();
+
+ UBSettings::settings()->KeyboardLocale->set(nCurrentLocale);
+ }
+ emit localeChanged(nLocale);
+}
+
+void UBKeyboardPalette::setKeyButtonSize(const QString& _strSize)
+{
+ QStringList strs = _strSize.split('x');
+
+ if (strs.size()==2)
+ {
+ strSize = _strSize;
+ btnWidth = strs[0].toInt();
+ btnHeight = strs[1].toInt();
+
+ if(currBtnImages != NULL)
+ delete currBtnImages;
+ currBtnImages = new BTNImages(strs[1], btnWidth, btnHeight);
+
+ adjustSizeAndPosition();
+ }
+}
+
+void UBKeyboardPalette::enterEvent ( QEvent * )
+{
+ if (keyboardActive)
+ return;
+
+ keyboardActive = true;
+
+ //adjustSizeAndPosition();
+
+ emit keyboardActivated(true);
+}
+
+void UBKeyboardPalette::leaveEvent ( QEvent * )
+{
+ if (languagePopupActive || !keyboardActive || mIsMoving)
+ return;
+
+ keyboardActive = false;
+
+ //adjustSizeAndPosition();
+
+ emit keyboardActivated(false);
+}
+
+void UBKeyboardPalette::moveEvent ( QMoveEvent * event )
+{
+ UBActionPalette::moveEvent(event);
+ emit moved(event->pos());
+}
+
+void UBKeyboardPalette::adjustSizeAndPosition(bool pUp)
+{
+ QSize rSize = sizeHint();
+ if (rSize != size())
+ {
+ int dx = (rSize.width() - size().width()) /2;
+ int dy = rSize.height() - size().height();
+
+ this->move(x()-dx, y() - dy);
+ this->resize(rSize.width(), rSize.height());
+ }
+ UBActionPalette::adjustSizeAndPosition(pUp);
+}
+
+void UBKeyboardPalette::paintEvent( QPaintEvent* event)
+{
+ checkLayout();
+
+ UBActionPalette::paintEvent(event);
+
+ QRect r = this->geometry();
+
+ int lleft, ltop, lright, lbottom;
+ getContentsMargins ( &lleft, <op, &lright, &lbottom ) ;
+
+ //------------------------------------------------
+ // calculate start offset from left, and from top
+
+ int ctrlButtonsId = 0;
+ lleft = ( r.width() - btnWidth * 15 ) / 2;
+ ltop = ( r.height() - btnHeight * 5 ) / 2;
+
+ //------------------------------------------------
+ // set geometry (position) for row 1
+
+ int offX = lleft;
+ int offY = ltop;
+
+ //-------------------
+
+ // buttons [`]..[+]
+ for (int i = 0; i<13; i++)
+ {
+ buttons[i]->setGeometry(offX, offY, btnWidth, btnHeight);
+ offX += btnWidth;
+ }
+
+ // button Backspace
+ ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 2, btnHeight);
+ offX += btnWidth * 2;
+
+ //------------------------------------------------
+ // set geometry (position) for row 2
+
+ offX = lleft;
+ offY += btnHeight;
+ offX += btnWidth / 2;
+
+ //-------------------
+
+ // button Tab
+ ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 2, btnHeight);
+ offX += btnWidth * 2;
+
+ // buttons [q]..[]]
+ for (int i = 0; i<12; i++)
+ {
+ buttons[i + 13]->setGeometry(offX, offY, btnWidth, btnHeight);
+ offX += btnWidth;
+ }
+
+// // Row 2 Stub
+// ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 1.5, btnHeight);
+// offX += btnWidth * 1.5;
+
+ //------------------------------------------------
+ // set geometry (position) for row 3
+
+ offX = lleft;
+ offY += btnHeight;
+
+ //-------------------
+
+// // Row 3 Stub
+
+ // button Enter
+ ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 1, btnHeight);
+ offX += btnWidth*1;
+
+ // buttons [a]..[\]
+ for (int i = 0; i < 12; i++)
+ {
+ buttons[i + 12 + 13]->setGeometry(offX, offY, btnWidth, btnHeight);
+ offX += btnWidth;
+ }
+
+ // button Enter
+ ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth * 2, btnHeight);
+ offX += btnWidth*2;
+
+ //------------------------------------------------
+ // set geometry (position) for row 4
+
+ offX = lleft;
+ offY += btnHeight;
+
+ //-------------------
+
+ // button LCapsLock
+ ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth*2.5, btnHeight);
+ offX += btnWidth*2.5;
+
+ for (int i = 0; i < 10; i++)
+ {
+ buttons[i + 12 + 12 + 13]->setGeometry(offX, offY, btnWidth, btnHeight);
+ offX += btnWidth;
+ }
+
+ // button RCapsLock
+ ctrlButtons[ctrlButtonsId++]->setGeometry(offX, offY, btnWidth*2.5, btnHeight);
+ offX += btnWidth*2.5;
+
+ //------------------------------------------------
+ // set geometry (position) for row 5
+
+ offX = lleft;
+ offY += btnHeight;
+
+ //-------------------
+
+ ctrlButtons[ctrlButtonsId++]->setGeometry(offX + btnWidth * 1 , offY, btnWidth * 2, btnHeight);
+ ctrlButtons[ctrlButtonsId++]->setGeometry(offX + btnWidth * 3 , offY, btnWidth * 9, btnHeight);
+ ctrlButtons[ctrlButtonsId++]->setGeometry(offX + btnWidth * 12, offY, btnWidth * 2, btnHeight);
+
+ //------------------------------------------------
+}
+
+void UBKeyboardPalette::onDeactivated()
+{
+ onActivated(false);
+}
+
+
+//-----------------------------------------------------------------------//
+// BTNImages Class
+//-----------------------------------------------------------------------//
+
+BTNImages::BTNImages(QString strHeight, int width, int height)
+{
+ m_strHeight = strHeight;
+ m_width = width;
+ m_height = height;
+
+ m_strLeftPassive = ":/images/virtual.keyboard/" + strHeight + "/left-passive.png";
+ m_strCenterPassive = ":/images/virtual.keyboard/" + strHeight + "/centre-passive.png";
+ m_strRightPassive = ":/images/virtual.keyboard/" + strHeight + "/right-passive.png";
+ m_strLeftActive = ":/images/virtual.keyboard/" + strHeight + "/left-active.png";
+ m_strCenterActive = ":/images/virtual.keyboard/" + strHeight + "/centre-active.png";
+ m_strRightActive = ":/images/virtual.keyboard/" + strHeight + "/right-active.png";
+
+ m_btnLeftPassive = QImage(m_strLeftPassive);
+ m_btnCenterPassive = QImage(m_strCenterPassive);
+ m_btnRightPassive = QImage(m_strRightPassive);
+ m_btnLeftActive = QImage(m_strLeftActive);
+ m_btnCenterActive = QImage(m_strCenterActive);
+ m_btnRightActive = QImage(m_strRightActive);
+}
+
+ContentImage::ContentImage(QString strHeight, int height, QString strContentName)
+{
+ m_strHeight = strHeight;
+ m_height = height;
+
+ m_strContent = ":/images/virtual.keyboard/" + strHeight + "/" + strContentName + ".png";
+ m_btnContent = QImage(m_strContent);
+}
+
+//-----------------------------------------------------------------------//
+// UBKeyboardButton Class
+//-----------------------------------------------------------------------//
+
+UBKeyboardButton::UBKeyboardButton(UBKeyboardPalette* parent, QString contentImagePath = "")
+ :QWidget(parent),
+ keyboard(parent),
+ bFocused(false),
+ bPressed(false)
+{
+ m_parent = parent;
+
+ m_contentImagePath = contentImagePath;
+ imgContent = NULL;
+
+ setCursor(Qt::PointingHandCursor);
+}
+
+UBKeyboardButton::~UBKeyboardButton()
+{
+ if(imgContent != NULL)
+ {
+ delete imgContent;
+ imgContent = NULL;
+ }
+}
+
+bool UBKeyboardButton::isPressed()
+{
+ return bPressed;
+}
+
+void UBKeyboardButton::paintEvent(QPaintEvent*)
+{
+
+ QPainter painter(this);
+
+ //--------------------------
+
+ if(imgContent != NULL)
+ {
+ if(imgContent->m_height != m_parent->currBtnImages->m_height)
+ {
+ delete imgContent;
+ if(!m_contentImagePath.isEmpty())
+ imgContent = new ContentImage(m_parent->currBtnImages->m_strHeight, m_parent->currBtnImages->m_height, m_contentImagePath);
+ }
+ }
+ else
+ if(!m_contentImagePath.isEmpty())
+ imgContent = new ContentImage(m_parent->currBtnImages->m_strHeight, m_parent->currBtnImages->m_height, m_contentImagePath);
+
+ //--------------------------
+
+ if (isPressed())
+ {
+ painter.drawImage( 0,0, m_parent->currBtnImages->m_btnLeftActive, 0,0, m_parent->currBtnImages->m_btnLeftActive.width(), m_parent->currBtnImages->m_btnLeftActive.height() );
+ painter.drawImage( QRect(m_parent->currBtnImages->m_btnLeftActive.width(), 0, width() - m_parent->currBtnImages->m_btnLeftActive.width() - m_parent->currBtnImages->m_btnRightActive.width(), height()), m_parent->currBtnImages->m_btnCenterActive );
+ painter.drawImage( width() - m_parent->currBtnImages->m_btnRightActive.width(), 0, m_parent->currBtnImages->m_btnRightActive, 0,0, m_parent->currBtnImages->m_btnRightActive.width(), m_parent->currBtnImages->m_btnRightActive.height() );
+ }
+ else
+ {
+ painter.drawImage( 0,0, m_parent->currBtnImages->m_btnLeftPassive, 0,0, m_parent->currBtnImages->m_btnLeftPassive.width(), m_parent->currBtnImages->m_btnLeftPassive.height() );
+ painter.drawImage( QRect(m_parent->currBtnImages->m_btnLeftPassive.width(), 0, width() - m_parent->currBtnImages->m_btnLeftPassive.width() - m_parent->currBtnImages->m_btnRightPassive.width(), height()), m_parent->currBtnImages->m_btnCenterPassive );
+ painter.drawImage( width() - m_parent->currBtnImages->m_btnRightPassive.width(), 0, m_parent->currBtnImages->m_btnRightPassive, 0,0, m_parent->currBtnImages->m_btnRightPassive.width(), m_parent->currBtnImages->m_btnRightPassive.height() );
+ }
+
+ //--------------------------
+
+ this->paintContent(painter);
+
+ //--------------------------
+}
+
+void UBKeyboardButton::enterEvent ( QEvent*)
+{
+ bFocused = true;
+ update();
+}
+
+void UBKeyboardButton::leaveEvent ( QEvent*)
+{
+ bFocused = false;
+ update();
+}
+
+void UBKeyboardButton::mousePressEvent ( QMouseEvent * event)
+{
+ event->accept();
+ bPressed = true;
+ update();
+ this->onPress();
+}
+
+void UBKeyboardButton::mouseReleaseEvent ( QMouseEvent * )
+{
+ bPressed = false;
+ update();
+ this->onRelease();
+}
+
+UBKeyButton::UBKeyButton(UBKeyboardPalette* parent)
+ :UBKeyboardButton(parent),
+ keybt(0)
+{}
+
+UBKeyButton::~UBKeyButton()
+{}
+
+bool UBKeyButton::shifted()
+{
+#if defined(Q_WS_MACX)
+ return keyboard->shift;
+#else
+ bool b = keyboard->shift;
+ if (keybt->capsLockSwitch && keyboard->capsLock)
+ b = !b;
+ return b;
+#endif
+}
+
+bool UBKeyButton::capsed()
+{
+ return keyboard->capsLock;
+}
+
+void UBKeyButton::onPress()
+{
+ if (keybt!=NULL)
+ {
+#if defined(Q_WS_MACX)
+ int codeIndex = keyboard->nSpecialModifierIndex + (shifted())?1:(capsed() ? 2 : 0);
+#else
+ int codeIndex = keyboard->nSpecialModifierIndex * 2 + shifted();
+#endif
+ if (keyboard->nSpecialModifierIndex)
+ {
+ if (keybt->codes[codeIndex].empty())
+ {
+ sendUnicodeSymbol(keyboard->specialModifier);
+ sendUnicodeSymbol(keybt->codes[shifted()]);
+ }
+ else
+ {
+ sendUnicodeSymbol(keybt->codes[codeIndex]);
+ }
+
+ keyboard->nSpecialModifierIndex = 0;
+ }
+ else
+ {
+
+#if defined(Q_WS_MACX)
+ int nSpecialModifierIndex;
+
+ if (shifted())
+ nSpecialModifierIndex = keybt->modifierShift;
+ else if(capsed())
+ nSpecialModifierIndex = keybt->modifierCaps;
+ else
+ nSpecialModifierIndex = keybt->modifierNo;
+#else
+ int nSpecialModifierIndex = shifted()? keybt->modifierShift : keybt->modifierNo;
+#endif
+
+
+ if (nSpecialModifierIndex)
+ {
+ keyboard->nSpecialModifierIndex = nSpecialModifierIndex;
+ keyboard->specialModifier = keybt->codes[codeIndex];
+ }
+ else
+ {
+ sendUnicodeSymbol(keybt->codes[codeIndex]);
+ }
+ }
+ }
+
+ if (keyboard->shift)
+ {
+ keyboard->shift = false;
+ keyboard->update();
+ }
+}
+
+void UBKeyButton::onRelease()
+{}
+
+void UBKeyButton::paintContent(QPainter& painter)
+{
+ if (keybt)
+ {
+#if defined(Q_WS_MACX)
+ QString text(QChar(shifted() ? keybt->shiftedSymbol : (capsed() ? keybt->capsedSymbol : keybt->simpleSymbol)));
+#else
+ QString text(QChar(shifted() ? keybt->shiftedSymbol : keybt->simpleSymbol));
+#endif
+ QRect textRect(rect().x()+2, rect().y()+2, rect().width()-4, rect().height()-4);
+ painter.drawText(textRect, Qt::AlignCenter, text);
+ }
+}
+
+UBCntrlButton::UBCntrlButton(UBKeyboardPalette* parent, int _code, const QString& _contentImagePath )
+ :UBKeyboardButton(parent, _contentImagePath),
+ label(""),
+ code(_code)
+{}
+
+
+UBCntrlButton::UBCntrlButton(UBKeyboardPalette* parent, const QString& _label, int _code )
+ :UBKeyboardButton(parent),
+ label(_label),
+ code(_code)
+{}
+
+UBCntrlButton::~UBCntrlButton()
+{}
+
+void UBCntrlButton::onPress()
+{
+ sendControlSymbol(code);
+}
+
+void UBCntrlButton::onRelease()
+{}
+
+void UBCntrlButton::paintContent(QPainter& painter)
+{
+ if(!label.isEmpty())
+ {
+ painter.drawText(rect(), Qt::AlignCenter, label);
+ }
+ else
+ if(imgContent != NULL)
+ {
+ painter.drawImage(( rect().width() - imgContent->m_btnContent.width() ) / 2, ( rect().height() - imgContent->m_btnContent.height() ) / 2,
+ imgContent->m_btnContent, 0,0, imgContent->m_btnContent.width(), imgContent->m_btnContent.height());
+ }
+}
+
+UBCapsLockButton::UBCapsLockButton(UBKeyboardPalette* parent, const QString _contentImagePath)
+ :UBKeyboardButton(parent, _contentImagePath)
+{}
+
+UBCapsLockButton::~UBCapsLockButton()
+{}
+
+void UBCapsLockButton::onPress()
+{
+ keyboard->capsLock = !keyboard->capsLock;
+ keyboard->update();
+}
+
+void UBCapsLockButton::onRelease()
+{}
+
+bool UBCapsLockButton::isPressed()
+{
+ return keyboard->capsLock;
+}
+
+void UBCapsLockButton::paintContent(QPainter& painter)
+{
+ if(imgContent != NULL)
+ {
+ painter.drawImage(( rect().width() - imgContent->m_btnContent.width() ) / 2, ( rect().height() - imgContent->m_btnContent.height() ) / 2,
+ imgContent->m_btnContent, 0,0, imgContent->m_btnContent.width(), imgContent->m_btnContent.height());
+ }
+ else
+ painter.drawText(rect(), Qt::AlignCenter, "^");
+}
+
+UBShiftButton::UBShiftButton(UBKeyboardPalette* parent, const QString _contentImagePath)
+ :UBKeyboardButton(parent, _contentImagePath)
+{}
+
+UBShiftButton::~UBShiftButton()
+{}
+
+void UBShiftButton::onPress()
+{
+ keyboard->shift = !keyboard->shift;
+ keyboard->update();
+}
+
+
+void UBShiftButton::onRelease()
+{}
+
+bool UBShiftButton::isPressed()
+{
+ return keyboard->shift;
+}
+
+void UBShiftButton::paintContent(QPainter& painter)
+{
+ if(imgContent != NULL)
+ {
+ painter.drawImage(( rect().width() - imgContent->m_btnContent.width() ) / 2, ( rect().height() - imgContent->m_btnContent.height() ) / 2,
+ imgContent->m_btnContent, 0,0, imgContent->m_btnContent.width(), imgContent->m_btnContent.height());
+ }
+ else
+ painter.drawText(rect(), Qt::AlignCenter, "^");
+}
+
+
+
+UBLocaleButton::UBLocaleButton(UBKeyboardPalette* parent)
+ :UBKeyboardButton(parent)
+{
+ localeMenu = new QMenu(this);
+
+ for (int i=0; i<parent->nLocalesCount; i++)
+ {
+ QAction* action = (parent->locales[i]->icon!=NULL) ?
+ localeMenu->addAction(*parent->locales[i]->icon, parent->locales[i]->fullName)
+ : localeMenu->addAction(parent->locales[i]->fullName);
+ action->setData(QVariant(i));
+ }
+}
+
+UBLocaleButton::~UBLocaleButton()
+{
+ delete localeMenu;
+}
+
+void UBLocaleButton::onPress()
+{
+}
+
+void UBLocaleButton::onRelease()
+{
+ keyboard->languagePopupActive = true;
+ QAction* action = localeMenu->exec(mapToGlobal(QPoint(0,0)));
+ keyboard->languagePopupActive = false;
+ if (action!=NULL)
+ {
+ int nLocale = action->data().toInt();
+ keyboard->setLocale(nLocale);
+ }
+}
+
+void UBLocaleButton::paintContent(QPainter& painter)
+{
+ const QString* localeName = keyboard->getLocaleName();
+ if (localeName!=NULL)
+ painter.drawText(rect(), Qt::AlignCenter, *localeName);
+}
diff --git a/Sankore-3.1/src/gui/UBKeyboardPalette.h b/Sankore-3.1/src/gui/UBKeyboardPalette.h
index c964975..e3b3d2e 100644
--- a/Sankore-3.1/src/gui/UBKeyboardPalette.h
+++ b/Sankore-3.1/src/gui/UBKeyboardPalette.h
@@ -1,23 +1,24 @@
-/*
- * Copyright (C) 2012 Webdoc SA
- *
- * This file is part of Open-Sankoré.
- *
- * Open-Sankoré is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
- * with a specific linking exception for the OpenSSL project's
- * "OpenSSL" library (or with modified versions of it that use the
- * same license as the "OpenSSL" library).
- *
- * 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
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
- */
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#ifndef UBKEYBOARDPALETTE_H
@@ -228,6 +229,7 @@ public:
private:
bool shifted();
+ bool capsed();
const KEYBT* keybt;
};
diff --git a/Sankore-3.1/src/gui/UBKeyboardPalette_linux.cpp b/Sankore-3.1/src/gui/UBKeyboardPalette_linux.cpp
index 5c27cc0..13c95a2 100644
--- a/Sankore-3.1/src/gui/UBKeyboardPalette_linux.cpp
+++ b/Sankore-3.1/src/gui/UBKeyboardPalette_linux.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBKeyboardPalette.h"
#include <X11/Xlib.h>
diff --git a/Sankore-3.1/src/gui/UBKeyboardPalette_mac.cpp b/Sankore-3.1/src/gui/UBKeyboardPalette_mac.cpp
index 341ff40..643924a 100644
--- a/Sankore-3.1/src/gui/UBKeyboardPalette_mac.cpp
+++ b/Sankore-3.1/src/gui/UBKeyboardPalette_mac.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBKeyboardPalette.h"
#include <stdio.h>
@@ -32,12 +33,22 @@
void UBKeyboardButton::sendUnicodeSymbol(KEYCODE keycode)
{
- if (keycode.modifier)
- CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, 56, true));
+ // if shift pressrd
+ if (1 == keycode.modifier)
+ CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, 56, true));
+ //if caps pressed
+ if (2 == keycode.modifier)
+ CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, 57, true));
+
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, keycode.code, true));
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, keycode.code, false));
+
+ //release shift
if (keycode.modifier)
CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, 56, false));
+ //release caps
+ if (2 == keycode.modifier)
+ CGEventPost(kCGSessionEventTap, CGEventCreateKeyboardEvent(NULL, 57, false));
}
diff --git a/Sankore-3.1/src/gui/UBKeyboardPalette_win.cpp b/Sankore-3.1/src/gui/UBKeyboardPalette_win.cpp
index 4c52552..89b6423 100644
--- a/Sankore-3.1/src/gui/UBKeyboardPalette_win.cpp
+++ b/Sankore-3.1/src/gui/UBKeyboardPalette_win.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,79 +18,80 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBKeyboardPalette.h"
-
-#include <windows.h>
-
-#include "../core/UBApplication.h"
-#include "../gui/UBMainWindow.h"
-
-#include "core/memcheck.h"
-
-void UBKeyboardButton::sendUnicodeSymbol(KEYCODE keycode)
-{
- INPUT input[2];
- input[0].type = INPUT_KEYBOARD;
- input[0].ki.wVk = 0;
- input[0].ki.wScan = keycode.symbol;
- input[0].ki.dwFlags = KEYEVENTF_UNICODE;
- input[0].ki.time = 0;
- input[0].ki.dwExtraInfo = 0;
-
- input[1].type = INPUT_KEYBOARD;
- input[1].ki.wVk = 0;
- input[1].ki.wScan = keycode.symbol;
- input[1].ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
- input[1].ki.time = 0;
- input[1].ki.dwExtraInfo = 0;
-
- ::SendInput(2, input, sizeof(input[0]));
-}
-
-void UBKeyboardButton::sendControlSymbol(int nSymbol)
-{
- INPUT input[2];
- input[0].type = INPUT_KEYBOARD;
- input[0].ki.wVk = nSymbol;
- input[0].ki.wScan = 0;
- input[0].ki.dwFlags = 0;
- input[0].ki.time = 0;
- input[0].ki.dwExtraInfo = 0;
-
- input[1].type = INPUT_KEYBOARD;
- input[1].ki.wVk = nSymbol;
- input[1].ki.wScan = 0;
- input[1].ki.dwFlags = KEYEVENTF_KEYUP;
- input[1].ki.time = 0;
- input[1].ki.dwExtraInfo = 0;
-
- ::SendInput(2, input, sizeof(input[0]));
-}
-
-void UBKeyboardPalette::createCtrlButtons()
-{
- int ctrlID = 0;
- ctrlButtons = new UBKeyboardButton*[9];
-
- ctrlButtons[ctrlID++] = new UBCntrlButton(this, 0x08, "backspace");// Backspace
- ctrlButtons[ctrlID++] = new UBCntrlButton(this, 0x09, "tab"); // Tab
- ctrlButtons[ctrlID++] = new UBCapsLockButton(this, "capslock"); // Shift
- ctrlButtons[ctrlID++] = new UBCntrlButton(this, tr("Enter"), 0x0d); // Enter
- ctrlButtons[ctrlID++] = new UBShiftButton(this, "shift"); // Shift
- ctrlButtons[ctrlID++] = new UBShiftButton(this, "shift"); // Shift
- ctrlButtons[ctrlID++] = new UBLocaleButton(this); // Language Switch
- ctrlButtons[ctrlID++] = new UBCntrlButton(this, "", 0x20); // Space
- ctrlButtons[ctrlID++] = new UBLocaleButton(this); // Language Switch
-}
-
-void UBKeyboardPalette::checkLayout()
-{}
-
-void UBKeyboardPalette::onActivated(bool)
-{}
-
-void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* )
-{}
-
+
+
+
+#include "UBKeyboardPalette.h"
+
+#include <windows.h>
+
+#include "../core/UBApplication.h"
+#include "../gui/UBMainWindow.h"
+
+#include "core/memcheck.h"
+
+void UBKeyboardButton::sendUnicodeSymbol(KEYCODE keycode)
+{
+ INPUT input[2];
+ input[0].type = INPUT_KEYBOARD;
+ input[0].ki.wVk = 0;
+ input[0].ki.wScan = keycode.symbol;
+ input[0].ki.dwFlags = KEYEVENTF_UNICODE;
+ input[0].ki.time = 0;
+ input[0].ki.dwExtraInfo = 0;
+
+ input[1].type = INPUT_KEYBOARD;
+ input[1].ki.wVk = 0;
+ input[1].ki.wScan = keycode.symbol;
+ input[1].ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
+ input[1].ki.time = 0;
+ input[1].ki.dwExtraInfo = 0;
+
+ ::SendInput(2, input, sizeof(input[0]));
+}
+
+void UBKeyboardButton::sendControlSymbol(int nSymbol)
+{
+ INPUT input[2];
+ input[0].type = INPUT_KEYBOARD;
+ input[0].ki.wVk = nSymbol;
+ input[0].ki.wScan = 0;
+ input[0].ki.dwFlags = 0;
+ input[0].ki.time = 0;
+ input[0].ki.dwExtraInfo = 0;
+
+ input[1].type = INPUT_KEYBOARD;
+ input[1].ki.wVk = nSymbol;
+ input[1].ki.wScan = 0;
+ input[1].ki.dwFlags = KEYEVENTF_KEYUP;
+ input[1].ki.time = 0;
+ input[1].ki.dwExtraInfo = 0;
+
+ ::SendInput(2, input, sizeof(input[0]));
+}
+
+void UBKeyboardPalette::createCtrlButtons()
+{
+ int ctrlID = 0;
+ ctrlButtons = new UBKeyboardButton*[9];
+
+ ctrlButtons[ctrlID++] = new UBCntrlButton(this, 0x08, "backspace");// Backspace
+ ctrlButtons[ctrlID++] = new UBCntrlButton(this, 0x09, "tab"); // Tab
+ ctrlButtons[ctrlID++] = new UBCapsLockButton(this, "capslock"); // Shift
+ ctrlButtons[ctrlID++] = new UBCntrlButton(this, tr("Enter"), 0x0d); // Enter
+ ctrlButtons[ctrlID++] = new UBShiftButton(this, "shift"); // Shift
+ ctrlButtons[ctrlID++] = new UBShiftButton(this, "shift"); // Shift
+ ctrlButtons[ctrlID++] = new UBLocaleButton(this); // Language Switch
+ ctrlButtons[ctrlID++] = new UBCntrlButton(this, "", 0x20); // Space
+ ctrlButtons[ctrlID++] = new UBLocaleButton(this); // Language Switch
+}
+
+void UBKeyboardPalette::checkLayout()
+{}
+
+void UBKeyboardPalette::onActivated(bool)
+{}
+
+void UBKeyboardPalette::onLocaleChanged(UBKeyboardLocale* )
+{}
+
diff --git a/Sankore-3.1/src/gui/UBLeftPalette.cpp b/Sankore-3.1/src/gui/UBLeftPalette.cpp
index cc1ddc6..a48d734 100644
--- a/Sankore-3.1/src/gui/UBLeftPalette.cpp
+++ b/Sankore-3.1/src/gui/UBLeftPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBLeftPalette.h"
#include "core/UBSettings.h"
@@ -37,18 +38,18 @@ UBLeftPalette::UBLeftPalette(QWidget *parent, const char *name):
bool isCollapsed = false;
if(mCurrentMode == eUBDockPaletteWidget_BOARD){
- mLastWidth = UBSettings::settings()->leftLibPaletteBoardModeWidth->get().toInt();
- isCollapsed = UBSettings::settings()->leftLibPaletteBoardModeIsCollapsed->get().toBool();
+ mLastWidth = UBSettings::settings()->leftLibPaletteBoardModeWidth->get().toInt();
+ isCollapsed = UBSettings::settings()->leftLibPaletteBoardModeIsCollapsed->get().toBool();
}
else{
- mLastWidth = UBSettings::settings()->leftLibPaletteDesktopModeWidth->get().toInt();
- isCollapsed = UBSettings::settings()->leftLibPaletteDesktopModeIsCollapsed->get().toBool();
+ mLastWidth = UBSettings::settings()->leftLibPaletteDesktopModeWidth->get().toInt();
+ isCollapsed = UBSettings::settings()->leftLibPaletteDesktopModeIsCollapsed->get().toBool();
}
if(isCollapsed)
- resize(0,parentWidget()->height());
+ resize(0,parentWidget()->height());
else
- resize(mLastWidth, parentWidget()->height());
+ resize(mLastWidth, parentWidget()->height());
}
/**
@@ -62,9 +63,9 @@ UBLeftPalette::~UBLeftPalette()
void UBLeftPalette::onDocumentSet(UBDocumentProxy* documentProxy)
{
- //This is necessary to force the teacher guide to be showed in priority each time a document is set
- if(documentProxy && UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
- mLastOpenedTabForMode.insert(eUBDockPaletteWidget_BOARD, 1);
+ //This is necessary to force the teacher guide to be showed in priority each time a document is set
+ if(documentProxy && UBSettings::settings()->teacherGuidePageZeroActivated->get().toBool())
+ mLastOpenedTabForMode.insert(eUBDockPaletteWidget_BOARD, 1);
}
/**
@@ -81,36 +82,39 @@ void UBLeftPalette::updateMaxWidth()
*/
void UBLeftPalette::resizeEvent(QResizeEvent *event)
{
- int newWidth = width();
- if(mCurrentMode == eUBDockPaletteWidget_BOARD){
- if(newWidth > mCollapseWidth)
- UBSettings::settings()->leftLibPaletteBoardModeWidth->set(newWidth);
- UBSettings::settings()->leftLibPaletteBoardModeIsCollapsed->set(newWidth == 0);
- }
- else{
- if(newWidth > mCollapseWidth)
- UBSettings::settings()->leftLibPaletteDesktopModeWidth->set(newWidth);
- UBSettings::settings()->leftLibPaletteDesktopModeIsCollapsed->set(newWidth == 0);
- }
+ int newWidth = width();
+ if(mCurrentMode == eUBDockPaletteWidget_BOARD){
+ if(newWidth > mCollapseWidth)
+ UBSettings::settings()->leftLibPaletteBoardModeWidth->set(newWidth);
+ UBSettings::settings()->leftLibPaletteBoardModeIsCollapsed->set(newWidth == 0);
+ }
+ else if (mCurrentMode == eUBDockPaletteWidget_DESKTOP){
+ if(newWidth > mCollapseWidth)
+ UBSettings::settings()->leftLibPaletteDesktopModeWidth->set(newWidth);
+ UBSettings::settings()->leftLibPaletteDesktopModeIsCollapsed->set(newWidth == 0);
+ }
UBDockPalette::resizeEvent(event);
}
bool UBLeftPalette::switchMode(eUBDockPaletteWidgetMode mode)
{
- int newModeWidth;
- if(mode == eUBDockPaletteWidget_BOARD){
- mLastWidth = UBSettings::settings()->leftLibPaletteBoardModeWidth->get().toInt();
- newModeWidth = mLastWidth;
- if(UBSettings::settings()->leftLibPaletteBoardModeIsCollapsed->get().toBool())
- newModeWidth = 0;
- }
- else{
- mLastWidth = UBSettings::settings()->leftLibPaletteDesktopModeWidth->get().toInt();
- newModeWidth = mLastWidth;
- if(UBSettings::settings()->leftLibPaletteDesktopModeIsCollapsed->get().toBool())
- newModeWidth = 0;
- }
- resize(newModeWidth,height());
- return UBDockPalette::switchMode(mode);
+ int newModeWidth;
+ if(mode == eUBDockPaletteWidget_BOARD){
+ mLastWidth = UBSettings::settings()->leftLibPaletteBoardModeWidth->get().toInt();
+ newModeWidth = mLastWidth;
+ if(UBSettings::settings()->leftLibPaletteBoardModeIsCollapsed->get().toBool())
+ newModeWidth = 0;
+ }
+ else if (mode == eUBDockPaletteWidget_DESKTOP){
+ mLastWidth = UBSettings::settings()->leftLibPaletteDesktopModeWidth->get().toInt();
+ newModeWidth = mLastWidth;
+ if(UBSettings::settings()->leftLibPaletteDesktopModeIsCollapsed->get().toBool())
+ newModeWidth = 0;
+ }
+ //TODO claudio another hack
+ // avoid the overlap of tab and menu bar (positionned on bottom) when clicling between
+ // board and web mode
+ resize(newModeWidth == 0 ? 1 : newModeWidth,height());
+ return UBDockPalette::switchMode(mode);
}
diff --git a/Sankore-3.1/src/gui/UBLeftPalette.h b/Sankore-3.1/src/gui/UBLeftPalette.h
index 564c627..6ba12c9 100644
--- a/Sankore-3.1/src/gui/UBLeftPalette.h
+++ b/Sankore-3.1/src/gui/UBLeftPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBLEFTPALETTE_H
#define UBLEFTPALETTE_H
diff --git a/Sankore-3.1/src/gui/UBMagnifer.cpp b/Sankore-3.1/src/gui/UBMagnifer.cpp
index 046ff53..de8e5db 100644
--- a/Sankore-3.1/src/gui/UBMagnifer.cpp
+++ b/Sankore-3.1/src/gui/UBMagnifer.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,386 +18,467 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include <QtGui>
-#include "UBMagnifer.h"
-
-#include "core/UBApplication.h"
-#include "board/UBBoardController.h"
-#include "domain/UBGraphicsScene.h"
-#include "board/UBBoardView.h"
-
-#include "core/memcheck.h"
-
-
-UBMagnifier::UBMagnifier(QWidget *parent, bool isInteractive)
- : QWidget(parent, parent ? Qt::Widget : Qt::Tool | (Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint))
- , mShouldMoveWidget(false)
- , mShouldResizeWidget(false)
- , borderPen(Qt::darkGray)
- , gView(0)
- , mView(0)
-{
- isCusrsorAlreadyStored = false;
- setMouseTracking(true);
-
- //--------------------------------------------------//
-
- QPixmap pix(":/images/cursors/resize.png");
- QTransform tr;
- tr.rotate(45);
- mResizeCursor = QCursor(pix.transformed(tr, Qt::SmoothTransformation), pix.width() / 2, pix.height() / 2);
-
- //--------------------------------------------------//
-
- params.sizePercentFromScene = 20;
- m_isInteractive = isInteractive;
- sClosePixmap = new QPixmap(":/images/close.svg");
- sIncreasePixmap = new QPixmap(":/images/increase.svg");
- sDecreasePixmap = new QPixmap(":/images/decrease.svg");
- mResizeItem = new QPixmap(":/images/resize.svg");
-
- if (parent)
- {
- setAttribute(Qt::WA_NoMousePropagation);
- }
- else
- {
- // standalone window
- // !!!! Should be included into Windows after QT recompilation
-#ifndef Q_WS_WIN
-// setAttribute(Qt::WA_TranslucentBackground);
- setAttribute(Qt::WA_MacAlwaysShowToolWindow);
-#endif
-#ifdef Q_WS_MAC
- setAttribute(Qt::WA_MacAlwaysShowToolWindow);
- setAttribute(Qt::WA_MacNonActivatingToolWindow);
- setAttribute(Qt::WA_MacNoShadow);
-#endif
- }
-
- connect(&mRefreshTimer, SIGNAL(timeout()), this, SLOT(slot_refresh()));
-}
-
-UBMagnifier::~UBMagnifier()
-{
- if(sClosePixmap)
- {
- delete sClosePixmap;
- sClosePixmap = NULL;
- }
-
- if(sIncreasePixmap)
- {
- delete sIncreasePixmap;
- sIncreasePixmap = NULL;
- }
-
- if(sDecreasePixmap)
- {
- delete sDecreasePixmap;
- sDecreasePixmap = NULL;
- }
-}
-
-void UBMagnifier::setSize(qreal percentFromScene)
-{
- if(gView == NULL || mView == NULL) return;
-
- // calculate object size
- params.sizePercentFromScene = percentFromScene;
- QSize sceneSize = mView->size();
- qreal size = params.sizePercentFromScene * sceneSize.width() / 100;
-
- QRect currGeom = geometry();
- if(currGeom.width() == currGeom.height())
- {
- QPoint newPos = mView->mapFromGlobal(updPointMove);
- setGeometry(newPos.x() - size / 2, newPos.y() - size / 2, size, size);
- }
- else
- setGeometry(0, 0, size, size);
-
- // prepare transparent bit mask
- QImage mask_img(width(), height(), QImage::Format_Mono);
- mask_img.fill(0xff);
- QPainter mask_ptr(&mask_img);
- mask_ptr.setBrush( QBrush( QColor(0, 0, 0) ) );
- mask_ptr.drawEllipse(QPointF(size/2, size/2), size / 2 - sClosePixmap->width(), size / 2 - sClosePixmap->width());
- bmpMask = QBitmap::fromImage(mask_img);
-
- // prepare general image
- pMap = QPixmap(width(), height());
- pMap.fill(Qt::transparent);
- pMap.setMask(bmpMask);
-}
-
-void UBMagnifier::setZoom(qreal zoom)
-{
- params.zoom = zoom;
-}
-
-void UBMagnifier::paintEvent(QPaintEvent * event)
-{
- Q_UNUSED(event);
- QPainter painter(this);
-
- painter.setRenderHint(QPainter::Antialiasing);
- painter.setPen(Qt::NoPen);
-
- if (m_isInteractive)
- {
- painter.setBrush(QColor(127, 127, 127, 127));
- painter.drawRoundedRect(QRectF(size().width() / 2, size().height() / 2, ( size().width() - sClosePixmap->width() ) / 2, ( size().height() - sClosePixmap->width() ) / 2), 15, 15);
-
- painter.setBrush(QColor(190, 190, 190, 255));
- painter.drawEllipse(QPoint( size().width() / 2, size().height() / 2), ( size().width() - sClosePixmap->width() ) / 2, ( size().height() - sClosePixmap->height() ) / 2);
-
- painter.drawPixmap(size().width() - sClosePixmap->width(), size().height() / 2 + sClosePixmap->height() * 1, *sClosePixmap);
- painter.drawPixmap(size().width() - sIncreasePixmap->width(), size().height() / 2 + sIncreasePixmap->height() * 2.5, *sIncreasePixmap);
- painter.drawPixmap(size().width() - sDecreasePixmap->width(), size().height() / 2 + sDecreasePixmap->height() * 3.6, *sDecreasePixmap);
-
- painter.drawPixmap(size().width() - mResizeItem->width() - 20, size().height() - mResizeItem->height() - 20, *mResizeItem);
- }
- else
- {
- painter.setBrush(QColor(127, 127, 127, 127));
- painter.drawEllipse(QPoint( size().width() / 2, size().height() / 2), ( size().width() - sClosePixmap->width() ) / 2, ( size().height() - sClosePixmap->height() ) / 2);
- }
-
- painter.drawPixmap(0, 0, pMap);
-}
-
-void UBMagnifier::mousePressEvent ( QMouseEvent * event )
-{
- if(m_isInteractive)
- {
-
- QWidget::mousePressEvent(event);
-
- if (event->pos().x() >= size().width() - mResizeItem->width() - 20 &&
- event->pos().x() < size().width() - 20 &&
- event->pos().y() >= size().height() - mResizeItem->height() - 20 &&
- event->pos().y() < size().height() - - 20)
- {
- mShouldResizeWidget = true;
- }
- else
- {
- mShouldMoveWidget = !event->isAccepted() && (event->buttons() & Qt::LeftButton);
- }
-
- mMousePressPos = event->pos();
- mMousePressDelta = (qreal)updPointGrab.x() + (qreal)size().width() / 2 - (qreal)event->globalPos().x();
-
- event->accept();
-
- update();
- }
- else
- event->ignore();
-}
-
-void UBMagnifier::mouseMoveEvent ( QMouseEvent * event )
-{
- if(m_isInteractive)
- {
- if(mShouldMoveWidget && (event->buttons() & Qt::LeftButton))
- {
- move(pos() - mMousePressPos + event->pos());
- event->accept();
-
- QWidget::mouseMoveEvent(event);
- emit magnifierMoved_Signal(QPoint(this->pos().x() + size().width() / 2, this->pos().y() + size().height() / 2 ));
- return;
- }
-
- if(mShouldResizeWidget && (event->buttons() & Qt::LeftButton))
- {
-
- QPoint currGlobalPos = event->globalPos();
- qreal cvW = mView->width();
-
- qreal newXSize = ( currGlobalPos.x() + mMousePressDelta - updPointGrab.x() ) * 2;
- qreal newPercentSize = newXSize * 100 / cvW;
-
- emit magnifierResized_Signal(newPercentSize);
-
- event->ignore();
- return;
- }
-
- if (event->pos().x() >= size().width() - mResizeItem->width() - 20 &&
- event->pos().x() < size().width() - 20 &&
- event->pos().y() >= size().height() - mResizeItem->height() - 20 &&
- event->pos().y() < size().height() - - 20 &&
- isCusrsorAlreadyStored == false
- )
- {
- mOldCursor = cursor();
- isCusrsorAlreadyStored = true;
- setCursor(mResizeCursor);
- }
-
- }
- else
- event->ignore();
-}
-
-
-void UBMagnifier::mouseReleaseEvent(QMouseEvent * event)
-{
- if(m_isInteractive)
- {
- mShouldMoveWidget = false;
- mShouldResizeWidget = false;
-
- if (event->pos().x() >= size().width() - sClosePixmap->width() &&
- event->pos().x() < size().width()&&
- event->pos().y() >= size().height() / 2 + sClosePixmap->height() * 1 &&
- event->pos().y() < size().height() / 2 + sClosePixmap->height() * 2)
- {
- event->accept();
- emit magnifierClose_Signal();
- }
- else
- if (event->pos().x() >= size().width() - sIncreasePixmap->width() &&
- event->pos().x() < size().width()&&
- event->pos().y() >= size().height() / 2 + sIncreasePixmap->height() * 2.5 &&
- event->pos().y() < size().height() / 2 + sIncreasePixmap->height() * 3.5)
- {
- event->accept();
- emit magnifierZoomIn_Signal();
- }
- else
- if (event->pos().x() >= size().width() - sDecreasePixmap->width() &&
- event->pos().x() < size().width()&&
- event->pos().y() >= size().height() / 2 + sDecreasePixmap->height() * 3.6 &&
- event->pos().y() < size().height() / 2 + sDecreasePixmap->height() * 4.6)
- {
- event->accept();
- emit magnifierZoomOut_Signal();
- }
- else
- QWidget::mouseReleaseEvent(event); // don't propgate to parent, the widget is deleted in UBApplication::boardController->removeTool
- }
- else
- event->ignore();
-
-}
-
-void UBMagnifier::slot_refresh()
-{
- if(!(updPointGrab.isNull()))
- grabPoint(updPointGrab);
-
- if(isCusrsorAlreadyStored)
- {
- QPoint globalCursorPos = QCursor::pos();
- QPoint cursorPos = mapFromGlobal(globalCursorPos);
- if (cursorPos.x() < size().width() - mResizeItem->width() - 20 ||
- cursorPos.x() > size().width() - 20 ||
- cursorPos.y() < size().height() - mResizeItem->height() - 20 ||
- cursorPos.y() > size().height() - - 20
- )
- {
- isCusrsorAlreadyStored = false;
- setCursor(mOldCursor);
- }
- }
-}
-
-void UBMagnifier::grabPoint()
-{
- QMatrix transM = UBApplication::boardController->controlView()->matrix();
- QPointF itemPos = gView->mapFromGlobal(updPointGrab);
-
- qreal zWidth = width() / (params.zoom * transM.m11());
- qreal zWidthHalf = zWidth / 2;
- qreal zHeight = height() / (params.zoom * transM.m22());
- qreal zHeightHalf = zHeight / 2;
-
-
- QPointF pfScLtF(UBApplication::boardController->controlView()->mapToScene(QPoint(itemPos.x(), itemPos.y())));
-
- float x = pfScLtF.x() - zWidthHalf;
- float y = pfScLtF.y() - zHeightHalf;
-
- QPointF leftTop(x,y);
- QPointF rightBottom(x + zWidth, y + zHeight);
- QRectF srcRect(leftTop, rightBottom);
-
- QPixmap newPixMap(QSize(width(), height()));
- QPainter painter(&newPixMap);
-
- UBApplication::boardController->activeScene()->render(&painter, QRectF(0,0,width(),height()), srcRect);
- painter.end();
-
- pMap.fill(Qt::transparent);
- pMap = newPixMap.scaled(QSize(width(), height()));
- pMap.setMask(bmpMask);
-
- update();
-}
-
-void UBMagnifier::grabPoint(const QPoint &pGrab)
-{
- QMatrix transM = UBApplication::boardController->controlView()->matrix();
- updPointGrab = pGrab;
- QPointF itemPos = gView->mapFromGlobal(pGrab);
-
- qreal zWidth = width() / (params.zoom * transM.m11());
- qreal zWidthHalf = zWidth / 2;
- qreal zHeight = height() / (params.zoom * transM.m22());
- qreal zHeightHalf = zHeight / 2;
-
-
- QPointF pfScLtF(UBApplication::boardController->controlView()->mapToScene(QPoint(itemPos.x(), itemPos.y())));
-
- float x = pfScLtF.x() - zWidthHalf;
- float y = pfScLtF.y() - zHeightHalf;
-
- QPointF leftTop(x,y);
- QPointF rightBottom(x + zWidth, y + zHeight);
- QRectF srcRect(leftTop, rightBottom);
-
- QPixmap newPixMap(QSize(width(), height()));
- QPainter painter(&newPixMap);
-
- UBApplication::boardController->activeScene()->render(&painter, QRectF(0,0,width(),height()), srcRect);
- painter.end();
-
- // pMap.fill(Qt::transparent);
- pMap = newPixMap;
- pMap.setMask(bmpMask);
-
- update();
-}
-
-
-
-// from global
-void UBMagnifier::grabNMove(const QPoint &pGrab, const QPoint &pMove, bool needGrab, bool needMove)
-{
- updPointGrab = pGrab;
- updPointMove = pMove;
-
- if(needGrab)
- grabPoint(pGrab);
-
- if(needMove)
- {
- QPoint movePos = mView->mapFromGlobal(pMove);
- move(movePos.x() - width()/2, movePos.y() - height()/2);
- // move(itemPos.x(), itemPos.y());
- }
-}
-
-void UBMagnifier::setGrabView(QWidget *view)
-{
- gView = view;
- mRefreshTimer.setInterval(40);
- mRefreshTimer.start();
-}
-
+
+
+
+#include <QtGui>
+#include "UBMagnifer.h"
+
+#include "core/UBApplication.h"
+#include "board/UBBoardController.h"
+#include "domain/UBGraphicsScene.h"
+#include "board/UBBoardView.h"
+
+#include "core/memcheck.h"
+
+
+UBMagnifier::UBMagnifier(QWidget *parent, bool isInteractive)
+ : QWidget(parent, parent ? Qt::Widget : Qt::Tool | (Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint))
+ , mShouldMoveWidget(false)
+ , mShouldResizeWidget(false)
+ , borderPen(Qt::darkGray)
+ , gView(0)
+ , mView(0)
+{
+ isCusrsorAlreadyStored = false;
+ setMouseTracking(true);
+
+ //--------------------------------------------------//
+
+ QPixmap pix(":/images/cursors/resize.png");
+ QTransform tr;
+ tr.rotate(45);
+ mResizeCursor = QCursor(pix.transformed(tr, Qt::SmoothTransformation), pix.width() / 2, pix.height() / 2);
+
+ //--------------------------------------------------//
+
+ params.sizePercentFromScene = 20;
+ m_isInteractive = isInteractive;
+ sClosePixmap = new QPixmap(":/images/close.svg");
+ sIncreasePixmap = new QPixmap(":/images/increase.svg");
+ sDecreasePixmap = new QPixmap(":/images/decrease.svg");
+ mResizeItem = new QPixmap(":/images/resize.svg");
+ sChangeModePixmap = new QPixmap();
+
+ setDrawingMode(UBSettings::settings()->magnifierDrawingMode->get().toInt());
+
+ if (parent)
+ {
+ setAttribute(Qt::WA_NoMousePropagation);
+ }
+ else
+ {
+ // standalone window
+ // !!!! Should be included into Windows after QT recompilation
+#ifndef Q_WS_WIN
+// setAttribute(Qt::WA_TranslucentBackground);
+ setAttribute(Qt::WA_MacAlwaysShowToolWindow);
+#endif
+#ifdef Q_WS_MAC
+ setAttribute(Qt::WA_MacAlwaysShowToolWindow);
+ setAttribute(Qt::WA_MacNonActivatingToolWindow);
+ setAttribute(Qt::WA_MacNoShadow);
+#endif
+ }
+
+ connect(&mRefreshTimer, SIGNAL(timeout()), this, SLOT(slot_refresh()));
+}
+
+UBMagnifier::~UBMagnifier()
+{
+ if(sClosePixmap)
+ {
+ delete sClosePixmap;
+ sClosePixmap = NULL;
+ }
+
+ if(sIncreasePixmap)
+ {
+ delete sIncreasePixmap;
+ sIncreasePixmap = NULL;
+ }
+
+ if(sDecreasePixmap)
+ {
+ delete sDecreasePixmap;
+ sDecreasePixmap = NULL;
+ }
+
+ if (sChangeModePixmap)
+ {
+ delete sChangeModePixmap;
+ sChangeModePixmap = NULL;
+ }
+}
+
+void UBMagnifier::setSize(qreal percentFromScene)
+{
+ if(gView == NULL || mView == NULL) return;
+
+ // calculate object size
+ params.sizePercentFromScene = percentFromScene;
+ QSize sceneSize = mView->size();
+ qreal size = params.sizePercentFromScene * sceneSize.width() / 100;
+
+ QRect currGeom = geometry();
+ if (circular == mDrawingMode)
+ {
+ if(currGeom.width() == currGeom.height())
+ {
+ QPoint newPos = mView->mapFromGlobal(updPointMove);
+ setGeometry(newPos.x() - size / 2, newPos.y() - size / 2, size, size);
+ }
+ else
+ setGeometry(0, 0, size, size);
+ }
+ else if (rectangular == mDrawingMode)
+ {
+ QPoint newPos = mView->mapFromGlobal(updPointMove);
+ setGeometry(newPos.x() - size / 2, newPos.y() - size / 2 / 3, size, size/3);
+ }
+
+ calculateButtonsPositions();
+ createMask();
+
+}
+
+void UBMagnifier::createMask()
+{
+ if(gView == NULL || mView == NULL) return;
+
+ // calculate object size
+ QSize sceneSize = mView->size();
+ qreal isize = params.sizePercentFromScene * sceneSize.width() / 100;
+
+ QImage mask_img(width(), height(), QImage::Format_Mono);
+ mask_img.fill(0xff);
+ QPainter mask_ptr(&mask_img);
+ mask_ptr.setBrush( QBrush( QColor(0, 0, 0) ) );
+
+ if (circular == mDrawingMode)
+ mask_ptr.drawEllipse(QPointF(isize/2, isize/2), isize / 2 - sClosePixmap->width(), isize / 2 - sClosePixmap->width());
+ else if (rectangular == mDrawingMode)
+ mask_ptr.drawRoundedRect(QRect(sClosePixmap->width(), sClosePixmap->width(), size().width() - 2*sClosePixmap->width(), size().height() - 2*sClosePixmap->width()), sClosePixmap->width()/2, sClosePixmap->width()/2);
+
+ bmpMask = QBitmap::fromImage(mask_img);
+
+ pMap = QPixmap(width(), height());
+ pMap.fill(Qt::transparent);
+ pMap.setMask(bmpMask);
+}
+
+void UBMagnifier::setZoom(qreal zoom)
+{
+ params.zoom = zoom;
+}
+
+
+void UBMagnifier::calculateButtonsPositions()
+{
+ m_iButtonInterval = 5;
+ mResizeItemButtonRect = QRect(size().width() - 1.5*mResizeItem->width() - m_iButtonInterval, size().height() - 1.5*mResizeItem->height() - m_iButtonInterval, mResizeItem->width(), mResizeItem->height());
+ sClosePixmapButtonRect = QRect(mResizeItemButtonRect.x() - sChangeModePixmap->width() - 3*m_iButtonInterval, size().height() - sChangeModePixmap->height(), sChangeModePixmap->width(), sChangeModePixmap->height());
+ sChangeModePixmapButtonRect = QRect(sClosePixmapButtonRect.x() - sChangeModePixmap->width() - m_iButtonInterval, size().height() - sChangeModePixmap->height(), sChangeModePixmap->width(), sChangeModePixmap->height());
+ sDecreasePixmapButtonRect = QRect(sChangeModePixmapButtonRect.x() - sChangeModePixmap->width() - m_iButtonInterval, size().height() - sDecreasePixmap->height(), sDecreasePixmap->width(), sDecreasePixmap->height());
+ sIncreasePixmapButtonRect = QRect(sDecreasePixmapButtonRect.x() - sChangeModePixmap->width() - m_iButtonInterval, size().height() - sIncreasePixmap->height(), sIncreasePixmap->width(), sIncreasePixmap->height());
+}
+
+void UBMagnifier::paintEvent(QPaintEvent * event)
+{
+ Q_UNUSED(event);
+ QPainter painter(this);
+
+ painter.setRenderHint(QPainter::Antialiasing);
+ painter.setPen(Qt::NoPen);
+
+ if (m_isInteractive)
+ {
+ painter.setBrush(QColor(127, 127, 127, 127));
+ painter.drawRoundedRect(QRectF(size().width() / 2, size().height() / 2, ( size().width() - sClosePixmap->width() ) / 2, ( size().height() - sClosePixmap->width() ) / 2), 15, 15);
+ }
+
+ painter.setBrush(QColor(190, 190, 190, 255));
+ if (circular == mDrawingMode)
+ {
+ painter.drawEllipse(QPoint(size().width() / 2, size().height() / 2), ( size().width() - sClosePixmap->width() ) / 2, ( size().height() - sClosePixmap->height() ) / 2);
+ }
+ else if (rectangular == mDrawingMode)
+ {
+ QRect r = QRect(sClosePixmap->width()/2, sClosePixmap->width()/2, size().width()- sClosePixmap->width(), size().height() - sClosePixmap->width());
+ painter.drawRoundedRect(r, sClosePixmap->width()/2, sClosePixmap->width()/2);
+ }
+
+ painter.drawPixmap(0, 0, pMap);
+
+ if (m_isInteractive)
+ {
+ painter.setBrush(QColor(190, 190, 190, 255));
+ painter.drawPixmap(sClosePixmapButtonRect.topLeft(), *sClosePixmap);
+ painter.drawPixmap(sIncreasePixmapButtonRect.topLeft(), *sIncreasePixmap);
+ painter.drawPixmap(sDecreasePixmapButtonRect.topLeft(), *sDecreasePixmap);
+ painter.drawPixmap(sChangeModePixmapButtonRect.topLeft(), *sChangeModePixmap);
+ painter.drawPixmap(mResizeItemButtonRect.topLeft(), *mResizeItem);
+ }
+}
+
+void UBMagnifier::mousePressEvent ( QMouseEvent * event )
+{
+ if(m_isInteractive)
+ {
+
+ QWidget::mousePressEvent(event);
+
+ if (event->pos().x() >= size().width() - mResizeItem->width() - 14 &&
+ event->pos().x() < size().width() - 14 &&
+ event->pos().y() >= size().height() - mResizeItem->height() - 14 &&
+ event->pos().y() < size().height() - - 14)
+ {
+ mShouldResizeWidget = true;
+ }
+ else
+ {
+ mShouldMoveWidget = !event->isAccepted() && (event->buttons() & Qt::LeftButton);
+ }
+
+ mMousePressPos = event->pos();
+ mMousePressDelta = (qreal)updPointGrab.x() + (qreal)size().width() / 2 - (qreal)event->globalPos().x();
+
+ event->accept();
+
+ update();
+ }
+ else
+ event->ignore();
+}
+
+void UBMagnifier::mouseMoveEvent ( QMouseEvent * event )
+{
+ if(m_isInteractive)
+ {
+ if(mShouldMoveWidget && (event->buttons() & Qt::LeftButton))
+ {
+ move(pos() - mMousePressPos + event->pos());
+ event->accept();
+
+ QWidget::mouseMoveEvent(event);
+ emit magnifierMoved_Signal(QPoint(this->pos().x() + size().width() / 2, this->pos().y() + size().height() / 2 ));
+ return;
+ }
+
+ if(mShouldResizeWidget && (event->buttons() & Qt::LeftButton))
+ {
+
+ QPoint currGlobalPos = event->globalPos();
+ qreal cvW = mView->width();
+
+ qreal newXSize = ( currGlobalPos.x() + mMousePressDelta - updPointGrab.x() ) * 2;
+ qreal newPercentSize = newXSize * 100 / cvW;
+
+ emit magnifierResized_Signal(newPercentSize);
+
+ event->ignore();
+ return;
+ }
+
+ if (mResizeItemButtonRect.contains(event->pos())&&
+ isCusrsorAlreadyStored == false
+ )
+ {
+ mOldCursor = cursor();
+ isCusrsorAlreadyStored = true;
+ setCursor(mResizeCursor);
+ }
+
+ }
+ else
+ event->ignore();
+}
+
+
+void UBMagnifier::mouseReleaseEvent(QMouseEvent * event)
+{
+ if(m_isInteractive)
+ {
+ mShouldMoveWidget = false;
+ mShouldResizeWidget = false;
+
+ if (sClosePixmapButtonRect.contains(event->pos()))
+ {
+ event->accept();
+ emit magnifierClose_Signal();
+ }
+ else
+ if (sIncreasePixmapButtonRect.contains(event->pos()))
+ {
+ event->accept();
+ emit magnifierZoomIn_Signal();
+ }
+ else
+ if (sDecreasePixmapButtonRect.contains(event->pos()))
+ {
+ event->accept();
+ emit magnifierZoomOut_Signal();
+ }
+ else
+ if (sChangeModePixmapButtonRect.contains(event->pos()))
+ {
+ event->accept();
+ emit magnifierDrawingModeChange_Signal(static_cast<int>(mDrawingMode+1)%modesCount);
+ }
+ else
+ QWidget::mouseReleaseEvent(event); // don't propgate to parent, the widget is deleted in UBApplication::boardController->removeTool
+ }
+ else
+ event->ignore();
+
+}
+
+void UBMagnifier::slot_refresh()
+{
+ if(!(updPointGrab.isNull()))
+ grabPoint(updPointGrab);
+
+ if(isCusrsorAlreadyStored)
+ {
+ QPoint globalCursorPos = QCursor::pos();
+ QPoint cursorPos = mapFromGlobal(globalCursorPos);
+ if (cursorPos.x() < size().width() - mResizeItem->width() - 14 ||
+ cursorPos.x() > size().width() - 14 ||
+ cursorPos.y() < size().height() - mResizeItem->height() - 14 ||
+ cursorPos.y() > size().height() - - 14
+ )
+ {
+ isCusrsorAlreadyStored = false;
+ setCursor(mOldCursor);
+ }
+ }
+}
+
+void UBMagnifier::grabPoint()
+{
+ QMatrix transM = UBApplication::boardController->controlView()->matrix();
+ QPointF itemPos = gView->mapFromGlobal(updPointGrab);
+
+ qreal zWidth = width() / (params.zoom * transM.m11());
+ qreal zWidthHalf = zWidth / 2;
+ qreal zHeight = height() / (params.zoom * transM.m22());
+ qreal zHeightHalf = zHeight / 2;
+
+
+ QPointF pfScLtF(UBApplication::boardController->controlView()->mapToScene(QPoint(itemPos.x(), itemPos.y())));
+
+ float x = pfScLtF.x() - zWidthHalf;
+ float y = pfScLtF.y() - zHeightHalf;
+
+ QPointF leftTop(x,y);
+ QPointF rightBottom(x + zWidth, y + zHeight);
+ QRectF srcRect(leftTop, rightBottom);
+
+ QPixmap newPixMap(QSize(width(), height()));
+ QPainter painter(&newPixMap);
+
+ UBApplication::boardController->activeScene()->render(&painter, QRectF(0,0,width(),height()), srcRect);
+ painter.end();
+
+ pMap.fill(Qt::transparent);
+ pMap = newPixMap.scaled(QSize(width(), height()));
+ pMap.setMask(bmpMask);
+
+ update();
+}
+
+void UBMagnifier::grabPoint(const QPoint &pGrab)
+{
+ QMatrix transM = UBApplication::boardController->controlView()->matrix();
+ updPointGrab = pGrab;
+ QPointF itemPos = gView->mapFromGlobal(pGrab);
+
+ qreal zWidth = width() / (params.zoom * transM.m11());
+ qreal zWidthHalf = zWidth / 2;
+ qreal zHeight = height() / (params.zoom * transM.m22());
+ qreal zHeightHalf = zHeight / 2;
+
+
+ QPointF pfScLtF(UBApplication::boardController->controlView()->mapToScene(QPoint(itemPos.x(), itemPos.y())));
+
+ float x = pfScLtF.x() - zWidthHalf;
+ float y = pfScLtF.y() - zHeightHalf;
+
+ QPointF leftTop(x,y);
+ QPointF rightBottom(x + zWidth, y + zHeight);
+ QRectF srcRect(leftTop, rightBottom);
+
+ QPixmap newPixMap(QSize(width(), height()));
+ QPainter painter(&newPixMap);
+
+ UBApplication::boardController->activeScene()->render(&painter, QRectF(0,0,width(),height()), srcRect);
+ painter.end();
+
+ // pMap.fill(Qt::transparent);
+ pMap = newPixMap;
+ pMap.setMask(bmpMask);
+
+ update();
+}
+
+
+
+// from global
+void UBMagnifier::grabNMove(const QPoint &pGrab, const QPoint &pMove, bool needGrab, bool needMove)
+{
+ QPoint pointToGrab = pGrab;
+ updPointGrab = pointToGrab;
+ updPointMove = pMove;
+
+ if(needGrab)
+ grabPoint(pointToGrab);
+
+ if(needMove)
+ {
+ QPoint movePos = mView->mapFromGlobal(pMove);
+ move(movePos.x() - width()/2, movePos.y() - height()/2);
+ // move(itemPos.x(), itemPos.y());
+ }
+}
+
+void UBMagnifier::setGrabView(QWidget *view)
+{
+ gView = view;
+ mRefreshTimer.setInterval(40);
+ mRefreshTimer.start();
+}
+
+void UBMagnifier::setDrawingMode(int mode)
+{
+ mDrawingMode = static_cast<DrawingMode>(mode);
+
+ QString sMode;
+
+ if (circular == mDrawingMode)
+ {
+ sMode = "roundeRrectangle";
+ resize(width(), width());
+ }
+
+ if (rectangular == mDrawingMode)
+ {
+ sMode = "circle";
+ resize(width(), height()/3);
+
+ if (mView)
+ {
+ qreal newPercentSize = size().width()/3 * 100 / mView->width();
+ emit magnifierResized_Signal(newPercentSize);
+ }
+ }
+
+ sChangeModePixmap->load(":/images/"+sMode+".svg");
+
+ calculateButtonsPositions();
+ if (mView && gView)
+ UBApplication::boardController->controlView()->scene()->moveMagnifier();
+
+ createMask();
+
+ UBSettings::settings()->magnifierDrawingMode->set(mode);
+}
diff --git a/Sankore-3.1/src/gui/UBMagnifer.h b/Sankore-3.1/src/gui/UBMagnifer.h
index 9e92692..fbb6c1b 100644
--- a/Sankore-3.1/src/gui/UBMagnifer.h
+++ b/Sankore-3.1/src/gui/UBMagnifer.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,87 +18,110 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBMAGNIFIER_H
-#define UBMAGNIFIER_H
-
-#include <QtGui>
-
-class UBMagnifierParams
-{
-public :
- int x;
- int y;
- qreal zoom;
- qreal sizePercentFromScene;
-};
-
-class UBMagnifier : public QWidget
-{
- Q_OBJECT
-
-public:
- UBMagnifier(QWidget *parent = 0, bool isInteractive = false);
- ~UBMagnifier();
-
- void setSize(qreal percentFromScene);
- void setZoom(qreal zoom);
-
- void setGrabView(QWidget *view);
- void setMoveView(QWidget *view) {mView = view;}
-
- void grabPoint();
- void grabPoint(const QPoint &point);
- void grabNMove(const QPoint &pGrab, const QPoint &pMove, bool needGrab = true, bool needMove = true);
-
- UBMagnifierParams params;
-
-signals:
- void magnifierMoved_Signal(QPoint newPos);
- void magnifierClose_Signal();
- void magnifierZoomIn_Signal();
- void magnifierZoomOut_Signal();
- void magnifierResized_Signal(qreal newPercentSize);
-
-public slots:
- void slot_refresh();
-
-protected:
- void paintEvent(QPaintEvent *);
-
- virtual void mousePressEvent ( QMouseEvent * event );
- virtual void mouseMoveEvent ( QMouseEvent * event );
- virtual void mouseReleaseEvent ( QMouseEvent * event );
-
- QPoint mMousePressPos;
- qreal mMousePressDelta;
- bool mShouldMoveWidget;
- bool mShouldResizeWidget;
-
-
- QPixmap *sClosePixmap;
- QPixmap *sIncreasePixmap;
- QPixmap *sDecreasePixmap;
- QPixmap *mResizeItem;
-
- bool isCusrsorAlreadyStored;
- QCursor mOldCursor;
- QCursor mResizeCursor;
-
-private:
- QTimer mRefreshTimer;
- bool m_isInteractive;
-
- QPoint updPointGrab;
- QPoint updPointMove;
-
- QPixmap pMap;
- QBitmap bmpMask;
- QPen borderPen;
-
- QWidget *gView;
- QWidget *mView;
-};
-
-#endif // UBMAGNIFIER_H
+
+
+
+#ifndef UBMAGNIFIER_H
+#define UBMAGNIFIER_H
+
+#include <QtGui>
+
+class UBMagnifierParams
+{
+public :
+ int x;
+ int y;
+ qreal zoom;
+ qreal sizePercentFromScene;
+};
+
+class UBMagnifier : public QWidget
+{
+ Q_OBJECT
+
+public:
+ enum DrawingMode
+ {
+ circular = 0,
+ rectangular,
+ modesCount // should me last.
+ };
+
+public:
+ UBMagnifier(QWidget *parent = 0, bool isInteractive = false);
+ ~UBMagnifier();
+
+ void setSize(qreal percentFromScene);
+ void createMask();
+ void setZoom(qreal zoom);
+
+ void setGrabView(QWidget *view);
+ void setMoveView(QWidget *view) {mView = view;}
+ void setDrawingMode(int mode);
+
+ void grabPoint();
+ void grabPoint(const QPoint &point);
+ void grabNMove(const QPoint &pGrab, const QPoint &pMove, bool needGrab = true, bool needMove = true);
+
+ UBMagnifierParams params;
+
+signals:
+ void magnifierMoved_Signal(QPoint newPos);
+ void magnifierClose_Signal();
+ void magnifierZoomIn_Signal();
+ void magnifierZoomOut_Signal();
+ void magnifierResized_Signal(qreal newPercentSize);
+ void magnifierDrawingModeChange_Signal(int mode);
+
+public slots:
+ void slot_refresh();
+
+private:
+ void calculateButtonsPositions();
+
+protected:
+ void paintEvent(QPaintEvent *);
+
+ virtual void mousePressEvent ( QMouseEvent * event );
+ virtual void mouseMoveEvent ( QMouseEvent * event );
+ virtual void mouseReleaseEvent ( QMouseEvent * event );
+
+ QPoint mMousePressPos;
+ qreal mMousePressDelta;
+ bool mShouldMoveWidget;
+ bool mShouldResizeWidget;
+
+ int m_iButtonInterval;
+ QPixmap *sClosePixmap;
+ QRect sClosePixmapButtonRect;
+ QPixmap *sIncreasePixmap;
+ QRect sIncreasePixmapButtonRect;
+ QPixmap *sDecreasePixmap;
+ QRect sDecreasePixmapButtonRect;
+ QPixmap *sChangeModePixmap;
+ QRect sChangeModePixmapButtonRect;
+ QPixmap *mResizeItem;
+ QRect mResizeItemButtonRect;
+
+ bool isCusrsorAlreadyStored;
+ QCursor mOldCursor;
+ QCursor mResizeCursor;
+
+private:
+ DrawingMode mDrawingMode;
+
+ QTimer mRefreshTimer;
+ bool m_isInteractive;
+
+ QPoint updPointGrab;
+ QPoint updPointMove;
+
+ QPixmap pMap;
+ QBitmap bmpMask;
+ QPen borderPen;
+
+ QWidget *gView;
+ QWidget *mView;
+};
+
+#endif // UBMAGNIFIER_H
diff --git a/Sankore-3.1/src/gui/UBMainWindow.cpp b/Sankore-3.1/src/gui/UBMainWindow.cpp
index 8634a2d..61f77f9 100644
--- a/Sankore-3.1/src/gui/UBMainWindow.cpp
+++ b/Sankore-3.1/src/gui/UBMainWindow.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,12 +20,17 @@
*/
+
#include <QtGui>
#include "UBMainWindow.h"
#include "core/UBApplication.h"
#include "core/UBApplicationController.h"
#include "board/UBBoardController.h"
+// work around for handling tablet events on MAC OS with Qt 4.8.0 and above
+#if defined(Q_WS_MACX)
+#include "board/UBBoardView.h"
+#endif
#include "core/memcheck.h"
@@ -144,6 +149,34 @@ void UBMainWindow::closeEvent(QCloseEvent *event)
emit closeEvent_Signal(event);
}
+// work around for handling tablet events on MAC OS with Qt 4.8.0 and above
+#if defined(Q_WS_MACX)
+bool UBMainWindow::event(QEvent *event)
+{
+ bool bRes = QMainWindow::event(event);
+
+ if (NULL != UBApplication::boardController)
+ {
+ UBBoardView *controlV = UBApplication::boardController->controlView();
+ if (controlV && controlV->isVisible())
+ {
+ switch (event->type())
+ {
+ case QEvent::TabletEnterProximity:
+ case QEvent::TabletLeaveProximity:
+ case QEvent::TabletMove:
+ case QEvent::TabletPress:
+ case QEvent::TabletRelease:
+ {
+ return controlV->directTabletEvent(event);
+ }
+ }
+ }
+ }
+ return bRes;
+}
+#endif
+
void UBMainWindow::onExportDone()
{
// HACK : When opening the file save dialog during the document exportation,
diff --git a/Sankore-3.1/src/gui/UBMainWindow.h b/Sankore-3.1/src/gui/UBMainWindow.h
index e902169..c5cbc9b 100644
--- a/Sankore-3.1/src/gui/UBMainWindow.h
+++ b/Sankore-3.1/src/gui/UBMainWindow.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBMAINWINDOW_H_
#define UBMAINWINDOW_H_
@@ -82,6 +83,10 @@ class UBMainWindow : public QMainWindow, public Ui::MainWindow
QWidget *mDocumentsWidget;
private:
+// work around for handling tablet events on MAC OS with Qt 4.8.0 and above
+#if defined(Q_WS_MACX)
+ bool event(QEvent *event);
+#endif
UBDownloadWidget* mpDownloadWidget;
};
diff --git a/Sankore-3.1/src/gui/UBMessageWindow.cpp b/Sankore-3.1/src/gui/UBMessageWindow.cpp
index 475e6dc..16b467f 100644
--- a/Sankore-3.1/src/gui/UBMessageWindow.cpp
+++ b/Sankore-3.1/src/gui/UBMessageWindow.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBMessageWindow.h"
#include "UBSpinningWheel.h"
diff --git a/Sankore-3.1/src/gui/UBMessageWindow.h b/Sankore-3.1/src/gui/UBMessageWindow.h
index 257522e..33e7d4d 100644
--- a/Sankore-3.1/src/gui/UBMessageWindow.h
+++ b/Sankore-3.1/src/gui/UBMessageWindow.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBMESSAGEWINDOW_H_
#define UBMESSAGEWINDOW_H_
diff --git a/Sankore-3.1/src/gui/UBMessagesDialog.cpp b/Sankore-3.1/src/gui/UBMessagesDialog.cpp
index 7def0b3..09fd904 100644
--- a/Sankore-3.1/src/gui/UBMessagesDialog.cpp
+++ b/Sankore-3.1/src/gui/UBMessagesDialog.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBMessagesDialog.h"
UBMessagesDialog::UBMessagesDialog(QString windowTitle, QWidget *parent)
diff --git a/Sankore-3.1/src/gui/UBMessagesDialog.h b/Sankore-3.1/src/gui/UBMessagesDialog.h
index d3b8738..cefce27 100644
--- a/Sankore-3.1/src/gui/UBMessagesDialog.h
+++ b/Sankore-3.1/src/gui/UBMessagesDialog.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UB_MESSAGES_DIALOG_H_
#define UB_MESSAGES_DIALOG_H_
diff --git a/Sankore-3.1/src/gui/UBMousePressFilter.cpp b/Sankore-3.1/src/gui/UBMousePressFilter.cpp
index db3a63d..a1a74e9 100644
--- a/Sankore-3.1/src/gui/UBMousePressFilter.cpp
+++ b/Sankore-3.1/src/gui/UBMousePressFilter.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBMousePressFilter.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/gui/UBMousePressFilter.h b/Sankore-3.1/src/gui/UBMousePressFilter.h
index 211c163..4dc6f90 100644
--- a/Sankore-3.1/src/gui/UBMousePressFilter.h
+++ b/Sankore-3.1/src/gui/UBMousePressFilter.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBMOUSEPRESSFILTER_H_
#define UBMOUSEPRESSFILTER_H_
diff --git a/Sankore-3.1/src/gui/UBNavigatorPalette.cpp b/Sankore-3.1/src/gui/UBNavigatorPalette.cpp
index c679368..cb8be62 100644
--- a/Sankore-3.1/src/gui/UBNavigatorPalette.cpp
+++ b/Sankore-3.1/src/gui/UBNavigatorPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,135 +18,136 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBNavigatorPalette.h"
-#include "core/UBApplication.h"
-#include "board/UBBoardController.h"
-
-#include "core/memcheck.h"
-
-/**
- * \brief Constructor
- * @param parent as the parent widget
- * @param name as the object name
- */
-UBNavigatorPalette::UBNavigatorPalette(QWidget *parent, const char *name):
- UBDockPalette(eUBDockPaletteType_LEFT, parent, name)
- , mNavigator(NULL)
- , mLayout(NULL)
- , mHLayout(NULL)
- , mPageNbr(NULL)
- , mClock(NULL)
-{
- // Build the gui
- mLayout = new QVBoxLayout(this);
- mLayout->setContentsMargins(customMargin(), customMargin(), 2*border() + customMargin(), customMargin());
- setLayout(mLayout);
-
- mNavigator = new UBDocumentNavigator(this);
- mNavigator->setStyleSheet(QString("background-color : transparent;"));
- mLayout->addWidget(mNavigator, 1);
-
- mHLayout = new QHBoxLayout();
- mLayout->addLayout(mHLayout, 0);
-
- mPageNbr = new QLabel(this);
- mClock = new QLabel(this);
- mHLayout->addWidget(mPageNbr);
- mHLayout->addWidget(mClock);
-
- // Configure the page number indicator
- mPageNbr->setStyleSheet(QString("QLabel { color: white; background-color: transparent; border: none; font-family: Arial; font-weight: bold; font-size: 20px }"));
- setPageNumber(0, 0);
- mPageNbr->setAlignment(Qt::AlignHCenter);
-
- // Configure the clock
- mClock->setStyleSheet(QString("QLabel {color: white; background-color: transparent; text-align: center; font-family: Arial; font-weight: bold; font-size: 20px}"));
- mTimeFormat = QLocale::system().timeFormat(QLocale::ShortFormat);
- mClock->setAlignment(Qt::AlignHCenter);
-
- //strip seconds
- mTimeFormat = mTimeFormat.remove(":ss");
- mTimeFormat = mTimeFormat.remove(":s");
- mTimerID = startTimer(1000);
-
-}
-
-/**
- * \brief Destructor
- */
-UBNavigatorPalette::~UBNavigatorPalette()
-{
- killTimer(mTimerID);
-
- if(NULL != mClock)
- {
- delete mClock;
- mClock = NULL;
- }
- if(NULL != mPageNbr)
- {
- delete mPageNbr;
- mPageNbr = NULL;
- }
- if(NULL != mHLayout)
- {
- delete mHLayout;
- mHLayout = NULL;
- }
- if(NULL != mLayout)
- {
- delete mLayout;
- mLayout = NULL;
- }
- if(NULL != mNavigator)
- {
- delete mNavigator;
- mNavigator = NULL;
- }
-}
-
-/**
- * \brief Set the current document in the navigator
- * @param document as the given document
- */
-
-/**
- * \brief Refresh the thumbnails widget
- */
-void UBNavigatorPalette::refresh()
-{
-}
-
-/**
- * \brief Handle the resize event
- * @param event as the resize event
- */
-void UBNavigatorPalette::resizeEvent(QResizeEvent *event)
-{
- UBDockPalette::resizeEvent(event);
- if(NULL != mNavigator)
- {
- mNavigator->setMinimumHeight(height() - 2*border());
- }
-}
-
-void UBNavigatorPalette::timerEvent(QTimerEvent *event)
-{
- Q_UNUSED(event);
- updateTime();
-}
-
-void UBNavigatorPalette::updateTime()
-{
- if (mClock)
- {
- mClock->setText(QLocale::system().toString (QTime::currentTime(), mTimeFormat));
- }
-}
-
-void UBNavigatorPalette::setPageNumber(int current, int total)
-{
- mPageNbr->setText(QString("%1 / %2").arg(current).arg(total));
-}
+
+
+
+#include "UBNavigatorPalette.h"
+#include "core/UBApplication.h"
+#include "board/UBBoardController.h"
+
+#include "core/memcheck.h"
+
+/**
+ * \brief Constructor
+ * @param parent as the parent widget
+ * @param name as the object name
+ */
+UBNavigatorPalette::UBNavigatorPalette(QWidget *parent, const char *name):
+ UBDockPalette(eUBDockPaletteType_LEFT, parent, name)
+ , mNavigator(NULL)
+ , mLayout(NULL)
+ , mHLayout(NULL)
+ , mPageNbr(NULL)
+ , mClock(NULL)
+{
+ // Build the gui
+ mLayout = new QVBoxLayout(this);
+ mLayout->setContentsMargins(customMargin(), customMargin(), 2*border() + customMargin(), customMargin());
+ setLayout(mLayout);
+
+ mNavigator = new UBDocumentNavigator(this);
+ mNavigator->setStyleSheet(QString("background-color : transparent;"));
+ mLayout->addWidget(mNavigator, 1);
+
+ mHLayout = new QHBoxLayout();
+ mLayout->addLayout(mHLayout, 0);
+
+ mPageNbr = new QLabel(this);
+ mClock = new QLabel(this);
+ mHLayout->addWidget(mPageNbr);
+ mHLayout->addWidget(mClock);
+
+ // Configure the page number indicator
+ mPageNbr->setStyleSheet(QString("QLabel { color: white; background-color: transparent; border: none; font-family: Arial; font-weight: bold; font-size: 20px }"));
+ setPageNumber(0, 0);
+ mPageNbr->setAlignment(Qt::AlignHCenter);
+
+ // Configure the clock
+ mClock->setStyleSheet(QString("QLabel {color: white; background-color: transparent; text-align: center; font-family: Arial; font-weight: bold; font-size: 20px}"));
+ mTimeFormat = QLocale::system().timeFormat(QLocale::ShortFormat);
+ mClock->setAlignment(Qt::AlignHCenter);
+
+ //strip seconds
+ mTimeFormat = mTimeFormat.remove(":ss");
+ mTimeFormat = mTimeFormat.remove(":s");
+ mTimerID = startTimer(1000);
+
+}
+
+/**
+ * \brief Destructor
+ */
+UBNavigatorPalette::~UBNavigatorPalette()
+{
+ killTimer(mTimerID);
+
+ if(NULL != mClock)
+ {
+ delete mClock;
+ mClock = NULL;
+ }
+ if(NULL != mPageNbr)
+ {
+ delete mPageNbr;
+ mPageNbr = NULL;
+ }
+ if(NULL != mHLayout)
+ {
+ delete mHLayout;
+ mHLayout = NULL;
+ }
+ if(NULL != mLayout)
+ {
+ delete mLayout;
+ mLayout = NULL;
+ }
+ if(NULL != mNavigator)
+ {
+ delete mNavigator;
+ mNavigator = NULL;
+ }
+}
+
+/**
+ * \brief Set the current document in the navigator
+ * @param document as the given document
+ */
+
+/**
+ * \brief Refresh the thumbnails widget
+ */
+void UBNavigatorPalette::refresh()
+{
+}
+
+/**
+ * \brief Handle the resize event
+ * @param event as the resize event
+ */
+void UBNavigatorPalette::resizeEvent(QResizeEvent *event)
+{
+ UBDockPalette::resizeEvent(event);
+ if(NULL != mNavigator)
+ {
+ mNavigator->setMinimumHeight(height() - 2*border());
+ }
+}
+
+void UBNavigatorPalette::timerEvent(QTimerEvent *event)
+{
+ Q_UNUSED(event);
+ updateTime();
+}
+
+void UBNavigatorPalette::updateTime()
+{
+ if (mClock)
+ {
+ mClock->setText(QLocale::system().toString (QTime::currentTime(), mTimeFormat));
+ }
+}
+
+void UBNavigatorPalette::setPageNumber(int current, int total)
+{
+ mPageNbr->setText(QString("%1 / %2").arg(current).arg(total));
+}
diff --git a/Sankore-3.1/src/gui/UBNavigatorPalette.h b/Sankore-3.1/src/gui/UBNavigatorPalette.h
index 8f52b3f..b09cd08 100644
--- a/Sankore-3.1/src/gui/UBNavigatorPalette.h
+++ b/Sankore-3.1/src/gui/UBNavigatorPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,55 +18,56 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBNAVIGATORPALETTE_H
-#define UBNAVIGATORPALETTE_H
-
-#include <QVBoxLayout>
-#include <QHBoxLayout>
-#include <QMouseEvent>
-#include <QResizeEvent>
-#include <QTimerEvent>
-#include <QLabel>
-#include <QString>
-
-#include "UBDockPalette.h"
-#include "UBDocumentNavigator.h"
-#include "document/UBDocumentProxy.h"
-
-
-class UBNavigatorPalette : public UBDockPalette
-{
- Q_OBJECT
-public:
- UBNavigatorPalette(QWidget* parent=0, const char* name="navigatorPalette");
- ~UBNavigatorPalette();
-
- void setDocument(UBDocumentProxy* document);
- void refresh();
-
-public slots:
- void setPageNumber(int current, int total);
-
-protected:
- virtual void resizeEvent(QResizeEvent *event);
- virtual void timerEvent(QTimerEvent *event);
-
-private:
- void updateTime();
-
- /** The thumbnails navigator widget */
- UBDocumentNavigator* mNavigator;
- /** The layout */
- QVBoxLayout* mLayout;
- QHBoxLayout* mHLayout;
- QLabel* mPageNbr;
- QLabel* mClock;
- QString mTimeFormat;
- int mTimerID;
-
-};
-
-
-#endif // UBNAVIGATORPALETTE_H
+
+
+
+#ifndef UBNAVIGATORPALETTE_H
+#define UBNAVIGATORPALETTE_H
+
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QMouseEvent>
+#include <QResizeEvent>
+#include <QTimerEvent>
+#include <QLabel>
+#include <QString>
+
+#include "UBDockPalette.h"
+#include "UBDocumentNavigator.h"
+#include "document/UBDocumentProxy.h"
+
+
+class UBNavigatorPalette : public UBDockPalette
+{
+ Q_OBJECT
+public:
+ UBNavigatorPalette(QWidget* parent=0, const char* name="navigatorPalette");
+ ~UBNavigatorPalette();
+
+ void setDocument(UBDocumentProxy* document);
+ void refresh();
+
+public slots:
+ void setPageNumber(int current, int total);
+
+protected:
+ virtual void resizeEvent(QResizeEvent *event);
+ virtual void timerEvent(QTimerEvent *event);
+
+private:
+ void updateTime();
+
+ /** The thumbnails navigator widget */
+ UBDocumentNavigator* mNavigator;
+ /** The layout */
+ QVBoxLayout* mLayout;
+ QHBoxLayout* mHLayout;
+ QLabel* mPageNbr;
+ QLabel* mClock;
+ QString mTimeFormat;
+ int mTimerID;
+
+};
+
+
+#endif // UBNAVIGATORPALETTE_H
diff --git a/Sankore-3.1/src/gui/UBPageNavigationWidget.cpp b/Sankore-3.1/src/gui/UBPageNavigationWidget.cpp
index 4b7f512..aff64b2 100644
--- a/Sankore-3.1/src/gui/UBPageNavigationWidget.cpp
+++ b/Sankore-3.1/src/gui/UBPageNavigationWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,162 +18,160 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#include "UBPageNavigationWidget.h"
-#include "core/UBApplication.h"
-
-#include "board/UBBoardController.h"
-
-#include "document/UBDocumentContainer.h"
-
-#include "globals/UBGlobals.h"
-
-#include "core/memcheck.h"
-
-/**
- * \brief Constructor
- * @param parent as the parent widget
- * @param name as the object name
- */
-UBPageNavigationWidget::UBPageNavigationWidget(QWidget *parent, const char *name):UBDockPaletteWidget(parent)
- , mNavigator(NULL)
- , mLayout(NULL)
- , mHLayout(NULL)
- , mPageNbr(NULL)
- , mClock(NULL)
-{
- setObjectName(name);
- mName = "PageNavigator";
- mVisibleState = true;
-
- SET_STYLE_SHEET();
-
- mIconToRight = QPixmap(":images/pages_open.png");
- mIconToLeft = QPixmap(":images/pages_close.png");
-
- // Build the gui
- mLayout = new QVBoxLayout(this);
- setLayout(mLayout);
-
- mNavigator = new UBDocumentNavigator(this);
- mLayout->addWidget(mNavigator, 1);
-
- mHLayout = new QHBoxLayout();
- mLayout->addLayout(mHLayout, 0);
-
- mPageNbr = new QLabel(this);
- mClock = new QLabel(this);
- mHLayout->addWidget(mPageNbr);
- mHLayout->addWidget(mClock);
-
- // Configure the page number indicator
- mPageNbr->setStyleSheet(QString("QLabel { color: white; background-color: transparent; border: none; font-family: Arial; font-weight: bold; font-size: 20px }"));
- setPageNumber(0, 0);
- mPageNbr->setAlignment(Qt::AlignHCenter);
-
- // Configure the clock
- mClock->setStyleSheet(QString("QLabel {color: white; background-color: transparent; text-align: center; font-family: Arial; font-weight: bold; font-size: 20px}"));
- mTimeFormat = QLocale::system().timeFormat(QLocale::ShortFormat);
- mClock->setAlignment(Qt::AlignHCenter);
-
- //strip seconds
- mTimeFormat = mTimeFormat.remove(":ss");
- mTimeFormat = mTimeFormat.remove(":s");
- mTimerID = startTimer(1000);
-
-}
-
-/**
- * \brief Destructor
- */
-UBPageNavigationWidget::~UBPageNavigationWidget()
-{
- killTimer(mTimerID);
-
- if(NULL != mClock)
- {
- delete mClock;
- mClock = NULL;
- }
- if(NULL != mPageNbr)
- {
- delete mPageNbr;
- mPageNbr = NULL;
- }
- if(NULL != mHLayout)
- {
- delete mHLayout;
- mHLayout = NULL;
- }
- if(NULL != mLayout)
- {
- delete mLayout;
- mLayout = NULL;
- }
- if(NULL != mNavigator)
- {
- delete mNavigator;
- mNavigator = NULL;
- }
-}
-
-
-/**
- * \brief Refresh the thumbnails widget
- */
-void UBPageNavigationWidget::refresh()
-{
- // TOLIK!!!
- // mNavigator->setDocument(UBApplication::boardController->activeDocument());
-}
-
-/**
- * \brief Notify a timer event
- * @param event as the timer event
- */
-void UBPageNavigationWidget::timerEvent(QTimerEvent *event)
-{
- Q_UNUSED(event);
- updateTime();
-}
-
-/**
- * \brief Update the current time
- */
-void UBPageNavigationWidget::updateTime()
-{
- if (mClock)
- {
- mClock->setText(QLocale::system().toString (QTime::currentTime(), mTimeFormat));
- }
-}
-
-/**
- * \brief Set the page number
- * @param current as the current page
- * @param total as the total number of pages
- */
-void UBPageNavigationWidget::setPageNumber(int current, int total)
-{
- mPageNbr->setText(QString("%1 / %2").arg(current).arg(UBDocumentContainer::sceneIndexFromPage(total)));
-}
-
-/**
- * \brief Get the custom margin value
- * @return the custom margin value
- */
-int UBPageNavigationWidget::customMargin()
-{
- return 5;
-}
-
-/**
- * \brief Get the border value
- * @return the border value
- */
-int UBPageNavigationWidget::border()
-{
- return 15;
-}
-
+
+
+
+#include "UBPageNavigationWidget.h"
+#include "core/UBApplication.h"
+
+#include "board/UBBoardController.h"
+
+#include "document/UBDocumentContainer.h"
+
+#include "globals/UBGlobals.h"
+
+#include "core/memcheck.h"
+
+/**
+ * \brief Constructor
+ * @param parent as the parent widget
+ * @param name as the object name
+ */
+UBPageNavigationWidget::UBPageNavigationWidget(QWidget *parent, const char *name):UBDockPaletteWidget(parent)
+ , mNavigator(NULL)
+ , mLayout(NULL)
+ , mHLayout(NULL)
+ , mPageNbr(NULL)
+ , mClock(NULL)
+{
+ setObjectName(name);
+ mName = "PageNavigator";
+ mVisibleState = true;
+
+ SET_STYLE_SHEET();
+
+ // Build the gui
+ mLayout = new QVBoxLayout(this);
+ setLayout(mLayout);
+
+ mNavigator = new UBDocumentNavigator(this);
+ mLayout->addWidget(mNavigator, 1);
+
+ mHLayout = new QHBoxLayout();
+ mLayout->addLayout(mHLayout, 0);
+
+ mPageNbr = new QLabel(this);
+ mClock = new QLabel(this);
+ mHLayout->addWidget(mPageNbr);
+ mHLayout->addWidget(mClock);
+
+ // Configure the page number indicator
+ mPageNbr->setStyleSheet(QString("QLabel { color: white; background-color: transparent; border: none; font-family: Arial; font-weight: bold; font-size: 20px }"));
+ setPageNumber(0, 0);
+ mPageNbr->setAlignment(Qt::AlignHCenter);
+
+ // Configure the clock
+ mClock->setStyleSheet(QString("QLabel {color: white; background-color: transparent; text-align: center; font-family: Arial; font-weight: bold; font-size: 20px}"));
+ mTimeFormat = QLocale::system().timeFormat(QLocale::ShortFormat);
+ mClock->setAlignment(Qt::AlignHCenter);
+
+ //strip seconds
+ mTimeFormat = mTimeFormat.remove(":ss");
+ mTimeFormat = mTimeFormat.remove(":s");
+ mTimerID = startTimer(1000);
+
+}
+
+/**
+ * \brief Destructor
+ */
+UBPageNavigationWidget::~UBPageNavigationWidget()
+{
+ killTimer(mTimerID);
+
+ if(NULL != mClock)
+ {
+ delete mClock;
+ mClock = NULL;
+ }
+ if(NULL != mPageNbr)
+ {
+ delete mPageNbr;
+ mPageNbr = NULL;
+ }
+ if(NULL != mHLayout)
+ {
+ delete mHLayout;
+ mHLayout = NULL;
+ }
+ if(NULL != mLayout)
+ {
+ delete mLayout;
+ mLayout = NULL;
+ }
+ if(NULL != mNavigator)
+ {
+ delete mNavigator;
+ mNavigator = NULL;
+ }
+}
+
+
+/**
+ * \brief Refresh the thumbnails widget
+ */
+void UBPageNavigationWidget::refresh()
+{
+ // TOLIK!!!
+ // mNavigator->setDocument(UBApplication::boardController->activeDocument());
+}
+
+/**
+ * \brief Notify a timer event
+ * @param event as the timer event
+ */
+void UBPageNavigationWidget::timerEvent(QTimerEvent *event)
+{
+ Q_UNUSED(event);
+ updateTime();
+}
+
+/**
+ * \brief Update the current time
+ */
+void UBPageNavigationWidget::updateTime()
+{
+ if (mClock)
+ {
+ mClock->setText(QLocale::system().toString (QTime::currentTime(), mTimeFormat));
+ }
+}
+
+/**
+ * \brief Set the page number
+ * @param current as the current page
+ * @param total as the total number of pages
+ */
+void UBPageNavigationWidget::setPageNumber(int current, int total)
+{
+ mPageNbr->setText(QString("%1 / %2").arg(current).arg(UBDocumentContainer::sceneIndexFromPage(total)));
+}
+
+/**
+ * \brief Get the custom margin value
+ * @return the custom margin value
+ */
+int UBPageNavigationWidget::customMargin()
+{
+ return 5;
+}
+
+/**
+ * \brief Get the border value
+ * @return the border value
+ */
+int UBPageNavigationWidget::border()
+{
+ return 15;
+}
+
diff --git a/Sankore-3.1/src/gui/UBPageNavigationWidget.h b/Sankore-3.1/src/gui/UBPageNavigationWidget.h
index d1f85db..ec83dc4 100644
--- a/Sankore-3.1/src/gui/UBPageNavigationWidget.h
+++ b/Sankore-3.1/src/gui/UBPageNavigationWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,62 +18,65 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBPAGENAVIGATIONWIDGET_H
-#define UBPAGENAVIGATIONWIDGET_H
-
-#include <QVBoxLayout>
-#include <QHBoxLayout>
-#include <QMouseEvent>
-#include <QResizeEvent>
-#include <QTimerEvent>
-#include <QLabel>
-#include <QString>
-
-#include "UBDocumentNavigator.h"
-#include "UBDockPaletteWidget.h"
-#include "document/UBDocumentProxy.h"
-
-class UBPageNavigationWidget : public UBDockPaletteWidget
-{
- Q_OBJECT
-public:
- UBPageNavigationWidget(QWidget* parent=0, const char* name="UBPageNavigationWidget");
- ~UBPageNavigationWidget();
- //void setDocument(UBDocumentProxy* document);
- void refresh();
-
- bool visibleInMode(eUBDockPaletteWidgetMode mode)
- {
- return mode == eUBDockPaletteWidget_BOARD;
- }
-
-signals:
- void resizeRequest(QResizeEvent* event);
-
-public slots:
- void setPageNumber(int current, int total);
-
-protected:
- virtual void timerEvent(QTimerEvent *event);
-
-
-private:
- void updateTime();
- int customMargin();
- int border();
-
- /** The thumbnails navigator widget */
- UBDocumentNavigator* mNavigator;
- /** The layout */
- QVBoxLayout* mLayout;
- QHBoxLayout* mHLayout;
- QLabel* mPageNbr;
- QLabel* mClock;
- QString mTimeFormat;
- int mTimerID;
-
-};
-
-#endif // UBPAGENAVIGATIONWIDGET_H
+
+
+
+#ifndef UBPAGENAVIGATIONWIDGET_H
+#define UBPAGENAVIGATIONWIDGET_H
+
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QMouseEvent>
+#include <QResizeEvent>
+#include <QTimerEvent>
+#include <QLabel>
+#include <QString>
+
+#include "UBDocumentNavigator.h"
+#include "UBDockPaletteWidget.h"
+#include "document/UBDocumentProxy.h"
+
+class UBPageNavigationWidget : public UBDockPaletteWidget
+{
+ Q_OBJECT
+public:
+ UBPageNavigationWidget(QWidget* parent=0, const char* name="UBPageNavigationWidget");
+ ~UBPageNavigationWidget();
+ //void setDocument(UBDocumentProxy* document);
+ void refresh();
+
+ bool visibleInMode(eUBDockPaletteWidgetMode mode)
+ {
+ return mode == eUBDockPaletteWidget_BOARD;
+ }
+ QPixmap iconToLeft() const {return QPixmap(":images/pages_close.png");}
+ QPixmap iconToRight() const {return QPixmap(":images/pages_open.png");}
+
+signals:
+ void resizeRequest(QResizeEvent* event);
+
+public slots:
+ void setPageNumber(int current, int total);
+
+protected:
+ virtual void timerEvent(QTimerEvent *event);
+
+
+private:
+ void updateTime();
+ int customMargin();
+ int border();
+
+ /** The thumbnails navigator widget */
+ UBDocumentNavigator* mNavigator;
+ /** The layout */
+ QVBoxLayout* mLayout;
+ QHBoxLayout* mHLayout;
+ QLabel* mPageNbr;
+ QLabel* mClock;
+ QString mTimeFormat;
+ int mTimerID;
+
+};
+
+#endif // UBPAGENAVIGATIONWIDGET_H
diff --git a/Sankore-3.1/src/gui/UBPropertyPalette.cpp b/Sankore-3.1/src/gui/UBPropertyPalette.cpp
index 41f953b..b085b35 100644
--- a/Sankore-3.1/src/gui/UBPropertyPalette.cpp
+++ b/Sankore-3.1/src/gui/UBPropertyPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBPropertyPalette.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/gui/UBPropertyPalette.h b/Sankore-3.1/src/gui/UBPropertyPalette.h
index 629a419..1388bad 100644
--- a/Sankore-3.1/src/gui/UBPropertyPalette.h
+++ b/Sankore-3.1/src/gui/UBPropertyPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBPROPERTYPALETTE_H
#define UBPROPERTYPALETTE_H
diff --git a/Sankore-3.1/src/gui/UBResources.cpp b/Sankore-3.1/src/gui/UBResources.cpp
index 3a28cee..02e23bf 100644
--- a/Sankore-3.1/src/gui/UBResources.cpp
+++ b/Sankore-3.1/src/gui/UBResources.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBResources.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/gui/UBResources.h b/Sankore-3.1/src/gui/UBResources.h
index b9ecffd..02c798b 100644
--- a/Sankore-3.1/src/gui/UBResources.h
+++ b/Sankore-3.1/src/gui/UBResources.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBRESOURCES_H_
#define UBRESOURCES_H_
diff --git a/Sankore-3.1/src/gui/UBRightPalette.cpp b/Sankore-3.1/src/gui/UBRightPalette.cpp
index 0ed0779..b23c181 100644
--- a/Sankore-3.1/src/gui/UBRightPalette.cpp
+++ b/Sankore-3.1/src/gui/UBRightPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "core/UBApplication.h"
#include "board/UBBoardController.h"
@@ -38,17 +39,21 @@ UBRightPalette::UBRightPalette(QWidget *parent, const char *name):
mCollapseWidth = 150;
bool isCollapsed = false;
if(mCurrentMode == eUBDockPaletteWidget_BOARD){
- mLastWidth = UBSettings::settings()->rightLibPaletteBoardModeWidth->get().toInt();
- isCollapsed = UBSettings::settings()->rightLibPaletteBoardModeIsCollapsed->get().toBool();
+ mLastWidth = UBSettings::settings()->rightLibPaletteBoardModeWidth->get().toInt();
+ isCollapsed = UBSettings::settings()->rightLibPaletteBoardModeIsCollapsed->get().toBool();
+ }
+ else if(mCurrentMode == eUBDockPaletteWidget_DESKTOP){
+ mLastWidth = UBSettings::settings()->rightLibPaletteDesktopModeWidth->get().toInt();
+ isCollapsed = UBSettings::settings()->rightLibPaletteDesktopModeIsCollapsed->get().toBool();
}
- else{
- mLastWidth = UBSettings::settings()->rightLibPaletteDesktopModeWidth->get().toInt();
- isCollapsed = UBSettings::settings()->rightLibPaletteDesktopModeIsCollapsed->get().toBool();
+ else if(mCurrentMode == eUBDockPaletteWidget_WEB){
+ mLastWidth = UBSettings::settings()->rightLibPaletteWebModeWidth->get().toInt();
+ isCollapsed = UBSettings::settings()->rightLibPaletteWebModeIsCollapsed->get().toBool();
}
if(isCollapsed)
- resize(0,parentWidget()->height());
+ resize(0,parentWidget()->height());
else
- resize(mLastWidth, parentWidget()->height());
+ resize(mLastWidth, parentWidget()->height());
}
/**
@@ -76,18 +81,23 @@ void UBRightPalette::mouseMoveEvent(QMouseEvent *event)
*/
void UBRightPalette::resizeEvent(QResizeEvent *event)
{
- int newWidth = width();
- if(mCurrentMode == eUBDockPaletteWidget_BOARD){
- if(newWidth > mCollapseWidth)
- UBSettings::settings()->rightLibPaletteBoardModeWidth->set(newWidth);
- UBSettings::settings()->rightLibPaletteBoardModeIsCollapsed->set(newWidth == 0);
- }
- else{
- if(newWidth > mCollapseWidth)
- UBSettings::settings()->rightLibPaletteDesktopModeWidth->set(newWidth);
- UBSettings::settings()->rightLibPaletteDesktopModeIsCollapsed->set(newWidth == 0);
- }
- UBDockPalette::resizeEvent(event);
+ int newWidth = width();
+ if(mCurrentMode == eUBDockPaletteWidget_BOARD){
+ if(newWidth > mCollapseWidth)
+ UBSettings::settings()->rightLibPaletteBoardModeWidth->set(newWidth);
+ UBSettings::settings()->rightLibPaletteBoardModeIsCollapsed->set(newWidth == 0);
+ }
+ else if (mCurrentMode == eUBDockPaletteWidget_DESKTOP){
+ if(newWidth > mCollapseWidth)
+ UBSettings::settings()->rightLibPaletteDesktopModeWidth->set(newWidth);
+ UBSettings::settings()->rightLibPaletteDesktopModeIsCollapsed->set(newWidth == 0);
+ }
+ else if (mCurrentMode == eUBDockPaletteWidget_WEB){
+ if(newWidth > mCollapseWidth)
+ UBSettings::settings()->rightLibPaletteWebModeWidth->set(newWidth);
+ UBSettings::settings()->rightLibPaletteWebModeIsCollapsed->set(newWidth == 0);
+ }
+ UBDockPalette::resizeEvent(event);
emit resized();
}
@@ -103,19 +113,39 @@ void UBRightPalette::updateMaxWidth()
bool UBRightPalette::switchMode(eUBDockPaletteWidgetMode mode)
{
- int newModeWidth;
- if(mode == eUBDockPaletteWidget_BOARD){
- mLastWidth = UBSettings::settings()->rightLibPaletteBoardModeWidth->get().toInt();
- newModeWidth = mLastWidth;
- if(UBSettings::settings()->rightLibPaletteBoardModeIsCollapsed->get().toBool())
- newModeWidth = 0;
- }
- else{
- mLastWidth = UBSettings::settings()->rightLibPaletteDesktopModeWidth->get().toInt();
- newModeWidth = mLastWidth;
- if(UBSettings::settings()->rightLibPaletteDesktopModeIsCollapsed->get().toBool())
- newModeWidth = 0;
- }
- resize(newModeWidth,height());
- return UBDockPalette::switchMode(mode);
+ int newModeWidth;
+ if(mode == eUBDockPaletteWidget_BOARD){
+ mLastWidth = UBSettings::settings()->rightLibPaletteBoardModeWidth->get().toInt();
+ newModeWidth = mLastWidth;
+ if(UBSettings::settings()->rightLibPaletteBoardModeIsCollapsed->get().toBool())
+ newModeWidth = 0;
+ }
+ else if (mode == eUBDockPaletteWidget_DESKTOP){
+ mLastWidth = UBSettings::settings()->rightLibPaletteDesktopModeWidth->get().toInt();
+ newModeWidth = mLastWidth;
+ if(UBSettings::settings()->rightLibPaletteDesktopModeIsCollapsed->get().toBool())
+ newModeWidth = 0;
+ }
+ else if (mode == eUBDockPaletteWidget_WEB){
+ mLastWidth = UBSettings::settings()->rightLibPaletteWebModeWidth->get().toInt();
+ newModeWidth = mLastWidth;
+ if(UBSettings::settings()->rightLibPaletteWebModeIsCollapsed->get().toBool())
+ newModeWidth = 0;
+ }
+ // HACK to force the reoganization of tabs
+ if(newModeWidth == 0)
+ resize(1,height());
+ resize(newModeWidth,height());
+ return UBDockPalette::switchMode(mode);
+}
+
+
+void UBRightPalette::showEvent(QShowEvent* event)
+{
+ UBDockPalette::showEvent(event);
+}
+
+void UBRightPalette::hideEvent(QHideEvent* event)
+{
+ UBDockPalette::hideEvent(event);
}
diff --git a/Sankore-3.1/src/gui/UBRightPalette.h b/Sankore-3.1/src/gui/UBRightPalette.h
index 6dae301..d0fab65 100644
--- a/Sankore-3.1/src/gui/UBRightPalette.h
+++ b/Sankore-3.1/src/gui/UBRightPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBRIGHTPALETTE_H
#define UBRIGHTPALETTE_H
@@ -40,6 +41,8 @@ protected:
void updateMaxWidth();
void mouseMoveEvent(QMouseEvent *event);
void resizeEvent(QResizeEvent *event);
+ void showEvent(QShowEvent* event);
+ void hideEvent(QHideEvent* event);
};
diff --git a/Sankore-3.1/src/gui/UBRubberBand.cpp b/Sankore-3.1/src/gui/UBRubberBand.cpp
index 8d02686..ee9d430 100644
--- a/Sankore-3.1/src/gui/UBRubberBand.cpp
+++ b/Sankore-3.1/src/gui/UBRubberBand.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBRubberBand.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/gui/UBRubberBand.h b/Sankore-3.1/src/gui/UBRubberBand.h
index 0a14e11..931639e 100644
--- a/Sankore-3.1/src/gui/UBRubberBand.h
+++ b/Sankore-3.1/src/gui/UBRubberBand.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBRUBBERBAND_H_
#define UBRUBBERBAND_H_
diff --git a/Sankore-3.1/src/gui/UBScreenMirror.cpp b/Sankore-3.1/src/gui/UBScreenMirror.cpp
index 60db723..285c5ec 100644
--- a/Sankore-3.1/src/gui/UBScreenMirror.cpp
+++ b/Sankore-3.1/src/gui/UBScreenMirror.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBScreenMirror.h"
#include "core/UBSettings.h"
diff --git a/Sankore-3.1/src/gui/UBScreenMirror.h b/Sankore-3.1/src/gui/UBScreenMirror.h
index 68d2464..1ab9fba 100644
--- a/Sankore-3.1/src/gui/UBScreenMirror.h
+++ b/Sankore-3.1/src/gui/UBScreenMirror.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBSCREENMIRROR_H_
#define UBSCREENMIRROR_H_
diff --git a/Sankore-3.1/src/gui/UBSpinningWheel.cpp b/Sankore-3.1/src/gui/UBSpinningWheel.cpp
index 524bab3..828293f 100644
--- a/Sankore-3.1/src/gui/UBSpinningWheel.cpp
+++ b/Sankore-3.1/src/gui/UBSpinningWheel.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBSpinningWheel.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/gui/UBSpinningWheel.h b/Sankore-3.1/src/gui/UBSpinningWheel.h
index fabbced..5dfec9c 100644
--- a/Sankore-3.1/src/gui/UBSpinningWheel.h
+++ b/Sankore-3.1/src/gui/UBSpinningWheel.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBSPINNINGWHEEL_H_
#define UBSPINNINGWHEEL_H_
diff --git a/Sankore-3.1/src/gui/UBStartupHintsPalette.cpp b/Sankore-3.1/src/gui/UBStartupHintsPalette.cpp
new file mode 100644
index 0000000..8a83199
--- /dev/null
+++ b/Sankore-3.1/src/gui/UBStartupHintsPalette.cpp
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+#include <QVBoxLayout>
+#include <QLabel>
+#include <QPainter>
+#include <QMouseEvent>
+#include <QCheckBox>
+#include <QWebFrame>
+#include "UBStartupHintsPalette.h"
+
+#include "globals/UBGlobals.h"
+#include "core/UBSettings.h"
+
+
+
+
+
+UBStartupHintsPalette::UBStartupHintsPalette(QWidget *parent) :
+ UBFloatingPalette(Qt::TopRightCorner,parent)
+{
+ setObjectName("UBStartupHintsPalette");
+ if(UBSettings::settings()->appStartupHintsEnabled->get().toBool()){
+ setFixedSize(700,450);
+ mLayout = new QVBoxLayout();
+ mLayout->setContentsMargins(10,28,10,10);
+ setLayout(mLayout);
+ QString url = UBSettings::settings()->applicationStartupHintsDirectory() + "/index.html";
+ mpWebView = new QWebView(this);
+ mpSankoreAPI = new UBWidgetUniboardAPI(0);
+ mpWebView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", mpSankoreAPI);
+ connect(mpWebView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared()));
+ mpWebView->setUrl(QUrl::fromLocalFile(url));
+ mpWebView->setAcceptDrops(false);
+ mLayout->addWidget(mpWebView);
+ mButtonLayout = new QHBoxLayout();
+ mLayout->addLayout(mButtonLayout);
+ mShowNextTime = new QCheckBox(tr("Visible next time"),this);
+ mShowNextTime->setCheckState(Qt::Checked);
+ connect(mShowNextTime,SIGNAL(stateChanged(int)),this,SLOT(onShowNextTimeStateChanged(int)));
+ mButtonLayout->addStretch();
+ mButtonLayout->addWidget(mShowNextTime);
+ }
+ else
+ hide();
+}
+
+UBStartupHintsPalette::~UBStartupHintsPalette()
+{
+// DELETEPTR(mButtonLayout);
+// DELETEPTR(mLayout);
+}
+
+void UBStartupHintsPalette::paintEvent(QPaintEvent *event)
+{
+ UBFloatingPalette::paintEvent(event);
+
+ QPainter painter(this);
+ painter.drawPixmap(0, 0, QPixmap(":/images/close.svg"));
+}
+
+
+void UBStartupHintsPalette::close()
+{
+ hide();
+}
+
+
+void UBStartupHintsPalette::mouseReleaseEvent(QMouseEvent * event)
+{
+ if (event->pos().x() >= 0 && event->pos().x() < QPixmap(":/images/close.svg").width()
+ && event->pos().y() >= 0 && event->pos().y() < QPixmap(":/images/close.svg").height())
+ {
+ event->accept();
+ close();
+ }
+
+ UBFloatingPalette::mouseReleaseEvent(event);
+}
+
+void UBStartupHintsPalette::onShowNextTimeStateChanged(int state)
+{
+ UBSettings::settings()->appStartupHintsEnabled->setBool(state == Qt::Checked);
+}
+
+void UBStartupHintsPalette::showEvent(QShowEvent *event)
+{
+ Q_UNUSED(event);
+ adjustSizeAndPosition();
+ move((parentWidget()->width() - width()) / 2, (parentWidget()->height() - height()) / 5);
+}
+
+
+int UBStartupHintsPalette::border()
+{
+ return 40;
+}
+
+void UBStartupHintsPalette::javaScriptWindowObjectCleared()
+{
+ mpWebView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", mpSankoreAPI);
+}
diff --git a/Sankore-3.1/src/gui/UBStartupHintsPalette.h b/Sankore-3.1/src/gui/UBStartupHintsPalette.h
new file mode 100644
index 0000000..07f4a22
--- /dev/null
+++ b/Sankore-3.1/src/gui/UBStartupHintsPalette.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+#ifndef UBSTARTUPTIPSPALETTE_H
+#define UBSTARTUPTIPSPALETTE_H
+
+class QCheckBox;
+class QVBoxLayout;
+class QHBoxLayout;
+
+#include <QWebView>
+
+#include "UBFloatingPalette.h"
+#include "api/UBWidgetUniboardAPI.h"
+
+class UBStartupHintsPalette : public UBFloatingPalette
+{
+ Q_OBJECT;
+public:
+ UBStartupHintsPalette(QWidget *parent = 0);
+ ~UBStartupHintsPalette();
+
+
+signals:
+
+public slots:
+
+protected:
+ virtual void paintEvent(QPaintEvent *event);
+ virtual void mouseReleaseEvent(QMouseEvent * event);
+ virtual void showEvent(QShowEvent *event);
+
+private:
+ void close();
+ int border();
+ QCheckBox* mShowNextTime;
+ QVBoxLayout* mLayout;
+ QHBoxLayout* mButtonLayout;
+ UBWidgetUniboardAPI *mpSankoreAPI;
+ QWebView* mpWebView;
+
+private slots:
+ void onShowNextTimeStateChanged(int state);
+ void javaScriptWindowObjectCleared();
+};
+
+#endif // UBSTARTUPTIPSPALETTE_H
diff --git a/Sankore-3.1/src/gui/UBStylusPalette.cpp b/Sankore-3.1/src/gui/UBStylusPalette.cpp
index f171daf..1cf47b6 100644
--- a/Sankore-3.1/src/gui/UBStylusPalette.cpp
+++ b/Sankore-3.1/src/gui/UBStylusPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBStylusPalette.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/gui/UBStylusPalette.h b/Sankore-3.1/src/gui/UBStylusPalette.h
index 70a803c..b354266 100644
--- a/Sankore-3.1/src/gui/UBStylusPalette.h
+++ b/Sankore-3.1/src/gui/UBStylusPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBSTYLUSPALLETTE_H_
#define UBSTYLUSPALLETTE_H_
diff --git a/Sankore-3.1/src/gui/UBTeacherGuideWidget.cpp b/Sankore-3.1/src/gui/UBTeacherGuideWidget.cpp
index 8cc05fa..207ff21 100644
--- a/Sankore-3.1/src/gui/UBTeacherGuideWidget.cpp
+++ b/Sankore-3.1/src/gui/UBTeacherGuideWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QDebug>
#include <QLabel>
#include <QVBoxLayout>
@@ -272,8 +273,8 @@ void UBTeacherGuideEditionWidget::onActiveSceneChanged()
void UBTeacherGuideEditionWidget::cleanData()
{
- mpPageTitle->setText("");
- mpComment->setText("");
+ mpPageTitle->resetText();
+ mpComment->resetText();
QList<QTreeWidgetItem*> children = mpAddAnActionItem->takeChildren();
children << mpAddAMediaItem->takeChildren();
children << mpAddALinkItem->takeChildren();
@@ -931,7 +932,7 @@ void UBTeacherGuidePageZeroWidget::fillComboBoxes()
QStringList licences;
licences << tr("Attribution-ShareAlike CC BY-SA")
<< tr("Attribution CC BY")
- << tr("Attribution-NoDerivs CC BY-ND")
+ << tr("Attribution-NoDerivs CC BY-ND")
<< tr("Attribution-NonCommercial CC BY-NC")
<< tr("Attribution-NonCommercial-NoDerivs CC BY-NC-ND")
<< tr("Attribution-NonCommercial-ShareAlike CC BY-NC-SA")
@@ -1167,8 +1168,8 @@ bool UBTeacherGuidePageZeroWidget::isModified()
void UBTeacherGuidePageZeroWidget::resizeEvent(QResizeEvent* ev)
{
- emit resized();
- QWidget::resizeEvent(ev);
+ emit resized();
+ QWidget::resizeEvent(ev);
}
/***************************************************************************
@@ -1208,54 +1209,54 @@ UBTeacherGuideWidget::~UBTeacherGuideWidget()
void UBTeacherGuideWidget::onActiveSceneChanged()
{
if (UBApplication::boardController->currentPage() == 0) {
- if(mpPageZeroWidget->isModified())
- mpPageZeroWidget->switchToMode(tUBTGZeroPageMode_PRESENTATION);
- else
- mpPageZeroWidget->switchToMode(tUBTGZeroPageMode_EDITION);
+ if(mpPageZeroWidget->isModified())
+ mpPageZeroWidget->switchToMode(tUBTGZeroPageMode_PRESENTATION);
+ else
+ mpPageZeroWidget->switchToMode(tUBTGZeroPageMode_EDITION);
setCurrentWidget(mpPageZeroWidget);
}
else{
- if(mpEditionWidget->isModified()){
+ if(mpEditionWidget->isModified()){
mCurrentData = mpEditionWidget->getData();
mpPresentationWidget->showData(mCurrentData);
- setCurrentWidget(mpPresentationWidget);
- }
- else
- setCurrentWidget(mpEditionWidget);
+ setCurrentWidget(mpPresentationWidget);
+ }
+ else
+ setCurrentWidget(mpEditionWidget);
}
}
void UBTeacherGuideWidget::onTriggeredAction(bool checked)
{
- Q_UNUSED(checked);
- if(!mKeyboardActionFired)
- showPresentationMode();
- mKeyboardActionFired=false;
+ Q_UNUSED(checked);
+ if(!mKeyboardActionFired)
+ showPresentationMode();
+ mKeyboardActionFired=false;
}
void UBTeacherGuideWidget::onTriggeredKeyboardAction(bool checked)
{
- Q_UNUSED(checked);
- mKeyboardActionFired = true;
+ Q_UNUSED(checked);
+ mKeyboardActionFired = true;
}
void UBTeacherGuideWidget::connectToStylusPalette()
{
- connect(UBApplication::mainWindow->actionPen, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionEraser, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionMarker, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionPointer, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionPlay, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionZoomIn, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionZoomOut, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionPen, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionEraser, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionMarker, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionPointer, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionPlay, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionZoomIn, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionZoomOut, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
connect(UBApplication::mainWindow->actionCapture, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionHand, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionLine, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionText, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionSelector, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
- connect(UBApplication::mainWindow->actionVirtualKeyboard, SIGNAL(triggered(bool)), this, SLOT(onTriggeredKeyboardAction(bool)));
+ connect(UBApplication::mainWindow->actionHand, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionLine, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionText, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionSelector, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));
+ connect(UBApplication::mainWindow->actionVirtualKeyboard, SIGNAL(triggered(bool)), this, SLOT(onTriggeredKeyboardAction(bool)));
}
void UBTeacherGuideWidget::showPresentationMode()
@@ -1287,4 +1288,3 @@ bool UBTeacherGuideWidget::isModified()
else
return mpEditionWidget->isModified();
}
-
diff --git a/Sankore-3.1/src/gui/UBTeacherGuideWidget.h b/Sankore-3.1/src/gui/UBTeacherGuideWidget.h
index 4e2c4f4..ed9e006 100644
--- a/Sankore-3.1/src/gui/UBTeacherGuideWidget.h
+++ b/Sankore-3.1/src/gui/UBTeacherGuideWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBTEACHERGUIDEWIDGET_H
#define UBTEACHERGUIDEWIDGET_H
diff --git a/Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.cpp b/Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.cpp
index 92e84b9..87c0c72 100644
--- a/Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.cpp
+++ b/Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QTreeWidget>
#include <QVBoxLayout>
#include <QComboBox>
@@ -172,11 +173,11 @@ void UBTGAdaptableText::showEvent(QShowEvent* e)
{
Q_UNUSED(e);
if(!mIsUpdatingSize && !hasFocus() && mHasPlaceHolder && toPlainText().isEmpty() && !isReadOnly()){
- setTextColor(QColor(Qt::lightGray));
- setPlainText(mPlaceHolderText);
+ setTextColor(QColor(Qt::lightGray));
+ setPlainText(mPlaceHolderText);
}
else
- // If the teacherguide is collapsed, don't updated the size. Or set the size as the expanded size
+ // If the teacherguide is collapsed, don't updated the size. Or set the size as the expanded size
onTextChanged();
}
@@ -193,16 +194,16 @@ void UBTGAdaptableText::onTextChanged()
{
qreal documentSize = document()->size().height();
if(height() == documentSize + mBottomMargin){
- return;
+ return;
}
mIsUpdatingSize = true;
if(documentSize < mMinimumHeight){
- setFixedHeight(mMinimumHeight);
+ setFixedHeight(mMinimumHeight);
}
else{
- setFixedHeight(documentSize+mBottomMargin);
+ setFixedHeight(documentSize+mBottomMargin);
}
updateGeometry();
@@ -223,6 +224,19 @@ void UBTGAdaptableText::setInitialText(const QString& text)
onTextChanged();
}
+void UBTGAdaptableText::resetText()
+{
+ if(mHasPlaceHolder && !mPlaceHolderText.isEmpty()){
+ setTextColor(QColor(Qt::lightGray));
+ setText(mPlaceHolderText);
+ }
+ else{
+ setText("");
+ setTextColor(QColor(Qt::black));
+ }
+ onTextChanged();
+}
+
void UBTGAdaptableText::showText(const QString & text)
{
setText(text);
@@ -238,45 +252,71 @@ void UBTGAdaptableText::bottomMargin(int newValue)
void UBTGAdaptableText::focusInEvent(QFocusEvent* e)
{
- if(isReadOnly()){
- e->ignore();
- }
- managePlaceholder(true);
- QTextEdit::focusInEvent(e);
+ if(isReadOnly()){
+ e->ignore();
+ }
+ managePlaceholder(true);
+ QTextEdit::focusInEvent(e);
}
void UBTGAdaptableText::focusOutEvent(QFocusEvent* e)
{
- managePlaceholder(false);
- QTextEdit::focusOutEvent(e);
+ managePlaceholder(false);
+ QTextEdit::focusOutEvent(e);
+}
+
+void UBTGAdaptableText::insertFromMimeData(const QMimeData *source)
+{
+ QMimeData editedMimeData;
+ QTextDocument textDoc;
+ QString plainText;
+
+ if (source->hasHtml())
+ {
+ textDoc.setHtml(source->html());
+ plainText += textDoc.toPlainText();
+ }
+ if (source->hasText())
+ if (textDoc.toPlainText() != source->text())
+ plainText += source->text();
+ if (source->hasUrls())
+ {
+ foreach(QUrl url, source->urls())
+ {
+ plainText += url.toString();
+ }
+ }
+
+ editedMimeData.setText(plainText);
+ QTextEdit::insertFromMimeData(&editedMimeData);
}
void UBTGAdaptableText::managePlaceholder(bool focus)
{
- if(focus){
- if(toPlainText() == mPlaceHolderText){
- setTextColor(QColor(Qt::black));
- setPlainText("");
- }
- setCursorToTheEnd();
- }
- else{
- if(toPlainText().isEmpty()){
- setTextColor(QColor(Qt::lightGray));
- setPlainText(mPlaceHolderText);
- }
- }
+ if(focus){
+ if(toPlainText() == mPlaceHolderText){
+ setTextColor(QColor(Qt::black));
+ setPlainText("");
+ setCursorToTheEnd();
+ }
+ }
+ else{
+ if(toPlainText().isEmpty()){
+ setTextColor(QColor(Qt::lightGray));
+ setPlainText(mPlaceHolderText);
+ }
+ }
}
void UBTGAdaptableText::setCursorToTheEnd()
{
- QTextDocument* doc = document();
- if(NULL != doc){
- QTextBlock block = doc->lastBlock();
- QTextCursor cursor(doc);
- cursor.setPosition(block.position() + block.length() - 1);
- setTextCursor(cursor);
- }
+ QTextDocument* doc = document();
+ if(NULL != doc){
+ QTextBlock block = doc->lastBlock();
+ QTextCursor cursor(doc);
+ cursor.setPosition(block.position() + block.length() - 1);
+ setTextCursor(cursor);
+ }
}
/***************************************************************************
@@ -287,10 +327,10 @@ UBDraggableWeb::UBDraggableWeb(QString& relativePath, QWidget* parent): QWebView
, mDragStarted(false)
{
- if(!relativePath.startsWith("file://"))
- mRelativePath = QUrl::fromLocalFile(relativePath).toString();
- else
- mRelativePath = relativePath;
+ if(!relativePath.startsWith("file://"))
+ mRelativePath = QUrl::fromLocalFile(relativePath).toString();
+ else
+ mRelativePath = relativePath;
//NOOP
}
@@ -437,7 +477,7 @@ tUBGEElementNode* UBTGMediaWidget::saveData()
tUBGEElementNode* result = new tUBGEElementNode();
QString relativePath = mMediaPath;
relativePath = relativePath.replace(UBApplication::boardController->selectedDocument()->persistencePath()+"/","");
- result->name = "media";
+ result->name = "media";
result->attributes.insert("title",mpTitle->text());
result->attributes.insert("relativePath",relativePath);
result->attributes.insert("mediaType",mMediaType);
@@ -536,9 +576,9 @@ void UBTGMediaWidget::createWorkWidget(bool forceFlashMediaType)
mpMediaLayout = new QHBoxLayout(mpWorkWidget);
mpWorkWidget->setLayout(mpMediaLayout);
}
-
+
mpMediaLayout->addStretch(1);
-
+
if(mpMediaLabelWidget){
mpMediaLabelWidget->setFixedHeight(mMediaWidgetHeight);
mpMediaLabelWidget->setParent(mpWorkWidget);
@@ -597,7 +637,7 @@ void UBTGMediaWidget::mousePressEvent(QMouseEvent *event)
QMimeData *mimeData = new QMimeData();
QList<QUrl> urlList;
#ifdef Q_WS_WIN
- urlList << QUrl::fromLocalFile(mMediaPath);
+ urlList << QUrl::fromLocalFile(mMediaPath);
#else
urlList << QUrl(mMediaPath);
#endif
@@ -643,11 +683,11 @@ UBTGUrlWidget::~UBTGUrlWidget()
void UBTGUrlWidget::onUrlEditionFinished()
{
- QString url = mpUrl->text();
- if(url.length() && !url.startsWith("http://") && !url.startsWith("https://") && !url.startsWith("ftp://") && !url.startsWith("sftp://") && !url.startsWith("http://")){
- mpUrl->setText("http://" + mpUrl->text());
- setFocus();
- }
+ QString url = mpUrl->text();
+ if(url.length() && !url.startsWith("http://") && !url.startsWith("https://") && !url.startsWith("ftp://") && !url.startsWith("sftp://") && !url.startsWith("http://")){
+ mpUrl->setText("http://" + mpUrl->text());
+ setFocus();
+ }
}
void UBTGUrlWidget::initializeWithDom(QDomElement element)
diff --git a/Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.h b/Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.h
index 367f9f9..ba944dd 100644
--- a/Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.h
+++ b/Sankore-3.1/src/gui/UBTeacherGuideWidgetsTools.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBTEACHERGUIDEWIDGETSTOOLS_H
#define UBTEACHERGUIDEWIDGETSTOOLS_H
@@ -102,6 +103,7 @@ class UBTGAdaptableText : public QTextEdit
public:
explicit UBTGAdaptableText(QTreeWidgetItem* widget = 0, QWidget *parent = 0, const char* name = "UBTGAdaptableText");
void showText(const QString & text);
+ void resetText();
void bottomMargin(int newValue);
void setPlaceHolderText(QString text);
QString text();
@@ -117,6 +119,7 @@ protected:
void showEvent(QShowEvent* e);
void focusInEvent(QFocusEvent* e);
void focusOutEvent(QFocusEvent* e);
+ virtual void insertFromMimeData(const QMimeData *source);
private:
void setCursorToTheEnd();
diff --git a/Sankore-3.1/src/gui/UBThumbnailView.cpp b/Sankore-3.1/src/gui/UBThumbnailView.cpp
index ebdfa89..e77c940 100644
--- a/Sankore-3.1/src/gui/UBThumbnailView.cpp
+++ b/Sankore-3.1/src/gui/UBThumbnailView.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBThumbnailView.h"
#include "domain/UBGraphicsScene.h"
diff --git a/Sankore-3.1/src/gui/UBThumbnailView.h b/Sankore-3.1/src/gui/UBThumbnailView.h
index 183c187..1e58548 100644
--- a/Sankore-3.1/src/gui/UBThumbnailView.h
+++ b/Sankore-3.1/src/gui/UBThumbnailView.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBTHUMBNAILVIEW_H_
#define UBTHUMBNAILVIEW_H_
diff --git a/Sankore-3.1/src/gui/UBThumbnailWidget.cpp b/Sankore-3.1/src/gui/UBThumbnailWidget.cpp
index f8eb1b0..4605d5e 100644
--- a/Sankore-3.1/src/gui/UBThumbnailWidget.cpp
+++ b/Sankore-3.1/src/gui/UBThumbnailWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,922 +18,988 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <QString>
-#include <QCursor>
-
-#include "UBThumbnailWidget.h"
-#include "UBRubberBand.h"
-#include "UBMainWindow.h"
-
-#include "board/UBBoardController.h"
-
-#include "core/UBSettings.h"
-#include "core/UBApplication.h"
-
-#include "document/UBDocumentProxy.h"
-#include "document/UBDocumentController.h"
-
-#include "core/memcheck.h"
-
-UBThumbnailWidget::UBThumbnailWidget(QWidget* parent)
- : QGraphicsView(parent)
- , mThumbnailWidth(UBSettings::defaultThumbnailWidth)
- , mSpacing(UBSettings::thumbnailSpacing)
- , mLastSelectedThumbnail(0)
- , mSelectionSpan(0)
- , mPrevLassoRect(QRect())
- , mLassoRectItem(0)
-
-{
- // By default, the drag is possible
- bCanDrag = true;
- setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing);
- setFrameShape(QFrame::NoFrame);
- setScene(&mThumbnailsScene);
-
- setAlignment(Qt::AlignLeft | Qt::AlignTop);
-
- connect(&mThumbnailsScene, SIGNAL(selectionChanged()), this, SLOT(sceneSelectionChanged()));
-}
-
-
-UBThumbnailWidget::~UBThumbnailWidget()
-{
- disconnect(&mThumbnailsScene, SIGNAL(selectionChanged()));
-}
-
-
-void UBThumbnailWidget::setThumbnailWidth(qreal pThumbnailWidth)
-{
- mThumbnailWidth = pThumbnailWidth;
-
- refreshScene();
-}
-
-
-void UBThumbnailWidget::setSpacing(qreal pSpacing)
-{
- mSpacing = pSpacing;
-
- refreshScene();
-}
-
-
-void UBThumbnailWidget::setGraphicsItems(const QList<QGraphicsItem*>& pGraphicsItems
- , const QList<QUrl>& pItemsPaths
- , const QStringList pLabels
- , const QString& pMimeType)
-{
- mGraphicItems = pGraphicsItems;
- mItemsPaths = pItemsPaths;
- mMimeType = pMimeType;
- mLabels = pLabels;
-
- foreach(QGraphicsItem* it, mThumbnailsScene.items())
- {
- mThumbnailsScene.removeItem(it, true);
- }
-
- // set lasso to 0 as it has been cleared as well
- mLassoRectItem = 0;
-
- foreach (QGraphicsItem* item, pGraphicsItems)
- {
- if (item->scene() != &mThumbnailsScene)
- {
- mThumbnailsScene.addItem(item);
- }
- }
-
- mLabelsItems.clear();
-
- foreach (const QString label, pLabels)
- {
- QFontMetrics fm(font());
- UBThumbnailTextItem *labelItem =
- new UBThumbnailTextItem(label); // deleted while replace or by the scene destruction
-
- mThumbnailsScene.addItem(labelItem);
- mLabelsItems << labelItem;
- }
-
- refreshScene();
-
- mLastSelectedThumbnail = 0;
-}
-
-
-void UBThumbnailWidget::refreshScene()
-{
- int nbColumns = (geometry().width() - mSpacing) / (mThumbnailWidth + mSpacing);
-
- int labelSpacing = 0;
-
- if (mLabelsItems.size() > 0)
- {
- QFontMetrics fm(mLabelsItems.at(0)->font());
- labelSpacing = UBSettings::thumbnailSpacing + fm.height(); // TODO UB 4.x where is 20 from ??? configure ?? compute based on mSpacing ?? JBA Is it the font height?
- }
- nbColumns = qMax(nbColumns, 1);
-
- qreal thumbnailHeight = mThumbnailWidth / UBSettings::minScreenRatio;
-
- for (int i = 0; i < mGraphicItems.size(); i++)
- {
- QGraphicsItem* item = mGraphicItems.at(i);
-
- qreal scaleWidth = mThumbnailWidth / item->boundingRect().width();
- qreal scaleHeight = thumbnailHeight / item->boundingRect().height();
-
- qreal scaleFactor = qMin(scaleWidth, scaleHeight);
-
- //bitmap should not be stretched
- UBThumbnail* pix = dynamic_cast<UBThumbnail*>(item);
- if (pix)
- scaleFactor = qMin(scaleFactor, 1.0);
-
- QTransform transform;
- transform.scale(scaleFactor, scaleFactor);
-
- item->setTransform(transform);
-
- item->setFlag(QGraphicsItem::ItemIsSelectable, true);
-
- int columnIndex = i % nbColumns;
- int rowIndex = i / nbColumns;
-
- if (pix)
- {
- pix->setColumn(columnIndex);
- pix->setRow(rowIndex);
- }
-
- int w = item->boundingRect().width();
- int h = item->boundingRect().height();
- QPointF pos(
- mSpacing + (mThumbnailWidth - w * scaleFactor) / 2 + columnIndex * (mThumbnailWidth + mSpacing),
- mSpacing + rowIndex * (thumbnailHeight + mSpacing + labelSpacing) + (thumbnailHeight - h * scaleFactor) / 2);
-
- item->setPos(pos);
-
- if (mLabelsItems.size() > i)
- {
- QFontMetrics fm(mLabelsItems.at(i)->font(), this);
- QString elidedText = fm.elidedText(mLabels.at(i), Qt::ElideRight, mThumbnailWidth);
-
- mLabelsItems.at(i)->setPlainText(elidedText);
- mLabelsItems.at(i)->setWidth(fm.width(elidedText) + 2 * mLabelsItems.at(i)->document()->documentMargin());
-
- pos.setY(pos.y() + (thumbnailHeight + h * scaleFactor) / 2 + 5);
- qreal labelWidth = fm.width(elidedText);
- pos.setX(mSpacing + (mThumbnailWidth - labelWidth) / 2 + columnIndex * (mThumbnailWidth + mSpacing));
- mLabelsItems.at(i)->setPos(pos);
- }
- }
-
- QScrollBar *vertScrollBar = verticalScrollBar();
- int scrollBarThickness = 0;
- if (vertScrollBar && vertScrollBar->isVisible())
- scrollBarThickness = vertScrollBar->width();
-
- setSceneRect(0, 0,
- geometry().width() - scrollBarThickness,
- mSpacing + ((((mGraphicItems.size() - 1) / nbColumns) + 1) * (thumbnailHeight + mSpacing + labelSpacing)));
-}
-
-
-QList<QGraphicsItem*> UBThumbnailWidget::selectedItems()
-{
- QList<QGraphicsItem*> sortedSelectedItems = mThumbnailsScene.selectedItems();
- qSort(sortedSelectedItems.begin(), sortedSelectedItems.end(), thumbnailLessThan);
- return sortedSelectedItems;
-}
-
-
-void UBThumbnailWidget::mousePressEvent(QMouseEvent *event)
-{
- mClickTime = QTime::currentTime();
- mMousePressPos = event->pos();
-
- UBSceneThumbnailPixmap* sceneItem = dynamic_cast<UBSceneThumbnailPixmap*>(itemAt(mMousePressPos));
- if(sceneItem==NULL)
- {
- event->ignore();
- return;
- }
- //if(sceneItem){
- // int pageIndex = UBDocumentContainer::pageFromSceneIndex(sceneItem->sceneIndex());
- // if(pageIndex == 0){
- // event->ignore();
- // return;
- // }
- //}
-
- mMousePressScenePos = mapToScene(mMousePressPos);
- QGraphicsItem* underlyingItem = itemAt(mMousePressPos);
- UBThumbnail *previousSelectedThumbnail = mLastSelectedThumbnail;
-
- if (!dynamic_cast<UBThumbnail*>(underlyingItem))
- {
- deleteLasso();
-
- UBRubberBand rubberBand(QRubberBand::Rectangle);
- QStyleOption option;
- option.initFrom(&rubberBand);
-
- mPrevLassoRect = QRect();
- mLassoRectItem = new QGraphicsRectItem(0, scene());
-
-#ifdef Q_WS_MAC
- // The following code must stay in synch with <Qt installation folder>\src\gui\styles\qmacstyle_mac.mm
- QColor strokeColor;
- strokeColor.setHsvF(0, 0, 0.86, 1.0);
- mLassoRectItem->setPen(QPen(strokeColor));
- QColor fillColor(option.palette.color(QPalette::Disabled, QPalette::Highlight));
- fillColor.setHsvF(0, 0, 0.53, 0.25);
- mLassoRectItem->setBrush(fillColor);
-#else
- // The following code must stay in synch with <Qt installation folder>\src\gui\styles\qwindowsxpstyle.cpp
- QColor highlight = option.palette.color(QPalette::Active, QPalette::Highlight);
- mLassoRectItem->setPen(highlight.darker(120));
- QColor dimHighlight(qMin(highlight.red() / 2 + 110, 255),
- qMin(highlight.green() / 2 + 110, 255),
- qMin(highlight.blue() / 2 + 110, 255),
- 127);
- mLassoRectItem->setBrush(dimHighlight);
-#endif
-
- mLassoRectItem->setZValue(10000);
- mLassoRectItem->setRect(QRectF(mMousePressScenePos, QSizeF()));
-
- if (Qt::ControlModifier & event->modifiers() || Qt::ShiftModifier & event->modifiers())
- {
- // mSelectedThumbnailItems = selectedItems().toSet();
- return;
- }
-
- mSelectedThumbnailItems.clear();
- mPreviouslyIncrementalSelectedItemsX.clear();
- mPreviouslyIncrementalSelectedItemsY.clear();
- QGraphicsView::mousePressEvent(event);
- }
- else if (Qt::ShiftModifier & event->modifiers())
- {
- if (previousSelectedThumbnail)
- {
- QGraphicsItem* previousSelectedItem = dynamic_cast<QGraphicsItem*>(previousSelectedThumbnail);
- if (previousSelectedItem)
- {
- int index1 = mGraphicItems.indexOf(previousSelectedItem);
- int index2 = mGraphicItems.indexOf(underlyingItem);
- if (-1 == index2)
- {
- mSelectedThumbnailItems = selectedItems().toSet();
- return;
- }
- mSelectionSpan = index2 - index1;
- selectItems(qMin(index1, index2), mSelectionSpan < 0 ? - mSelectionSpan + 1 : mSelectionSpan + 1);
- return;
- }
- }
- }
- else
- {
- mLastSelectedThumbnail = dynamic_cast<UBThumbnail*>(underlyingItem);
- if (!underlyingItem->isSelected())
- {
- int index = mGraphicItems.indexOf(underlyingItem);
- selectItemAt(index, Qt::ControlModifier & event->modifiers());
- }
- else
- {
- QGraphicsView::mousePressEvent(event);
- }
- if (!mLastSelectedThumbnail && mGraphicItems.count() > 0)
- mLastSelectedThumbnail = dynamic_cast<UBThumbnail*>(mGraphicItems.at(0));
- mSelectionSpan = 0;
- return;
- }
-}
-
-
-void UBThumbnailWidget::mouseMoveEvent(QMouseEvent *event)
-{
- int distance = (mMousePressPos - event->pos()).manhattanLength();
-
- if (0 == (event->buttons() & Qt::LeftButton) || distance < QApplication::startDragDistance())
- return;
-
- if (mLassoRectItem)
- {
- bSelectionInProgress = true;
- int incrementLassoMinWidth = 2;
- QPointF currentScenePos = mapToScene(event->pos());
- QRectF lassoRect(
- qMin(mMousePressScenePos.x(), currentScenePos.x()), qMin(mMousePressScenePos.y(), currentScenePos.y()),
- qAbs(mMousePressScenePos.x() - currentScenePos.x()), qAbs(mMousePressScenePos.y() - currentScenePos.y()));
- if (QPoint() == prevMoveMousePos)
- prevMoveMousePos = currentScenePos;
- QRectF incrementXSelection(
- qMin(prevMoveMousePos.x(), currentScenePos.x()), qMin(mMousePressScenePos.y(), currentScenePos.y()),
- qAbs(prevMoveMousePos.x() - currentScenePos.x())+incrementLassoMinWidth, qAbs(mMousePressScenePos.y() - currentScenePos.y()));
- QRectF incrementYSelection(
- qMin(mMousePressScenePos.x(), currentScenePos.x()), qMin(prevMoveMousePos.y(), currentScenePos.y()),
- qAbs(mMousePressScenePos.x() - currentScenePos.x()), qAbs(prevMoveMousePos.y() - currentScenePos.y())+incrementLassoMinWidth);
-
- prevMoveMousePos = currentScenePos;
- mLassoRectItem->setRect(lassoRect);
-
- QSet<QGraphicsItem*> lassoSelectedThumbnailItems;
-
- QSet<QGraphicsItem*> toUnset;
- QSet<QGraphicsItem*> toSet;
-
- // for horizontal moving
- QSet<QGraphicsItem*> incSelectedItemsX = scene()->items(incrementXSelection, Qt::IntersectsItemBoundingRect).toSet();
- foreach (QGraphicsItem *lassoSelectedItem, incSelectedItemsX)
- {
- if (lassoSelectedItem)
- {
- UBSceneThumbnailPixmap *thumbnailItem = dynamic_cast<UBSceneThumbnailPixmap*>(lassoSelectedItem);
- if (thumbnailItem)
- lassoSelectedThumbnailItems += lassoSelectedItem;
- }
- }
-
- if(lassoRect.width() < mPrevLassoRect.width())
- {
- if (!lassoSelectedThumbnailItems.contains(mPreviouslyIncrementalSelectedItemsX))
- toUnset += mPreviouslyIncrementalSelectedItemsX - lassoSelectedThumbnailItems;
-
- }
- mPreviouslyIncrementalSelectedItemsX = lassoSelectedThumbnailItems;
-
- toSet += lassoSelectedThumbnailItems + mPreviouslyIncrementalSelectedItemsX;
-
-
- lassoSelectedThumbnailItems.clear();
-
- // for vertical moving
-
- QSet<QGraphicsItem*> incSelectedItemsY = scene()->items(incrementYSelection, Qt::IntersectsItemBoundingRect).toSet();
- foreach (QGraphicsItem *lassoSelectedItem, incSelectedItemsY)
- {
- if (lassoSelectedItem)
- {
- UBSceneThumbnailPixmap *thumbnailItem = dynamic_cast<UBSceneThumbnailPixmap*>(lassoSelectedItem);
-
- if (thumbnailItem)
- lassoSelectedThumbnailItems += lassoSelectedItem;
- }
- }
-
- if(lassoRect.height() < mPrevLassoRect.height())
- {
- if (!lassoSelectedThumbnailItems.contains(mPreviouslyIncrementalSelectedItemsY))
- toUnset += mPreviouslyIncrementalSelectedItemsY - lassoSelectedThumbnailItems;
-
- }
- mPreviouslyIncrementalSelectedItemsY = lassoSelectedThumbnailItems;
-
-
- toSet += lassoSelectedThumbnailItems + mPreviouslyIncrementalSelectedItemsY;
-
-
- toSet -= toUnset;
-
- foreach (QGraphicsItem *item, toSet)
- {
- item->setSelected(true);
- }
-
- foreach (QGraphicsItem *item, toUnset)
- {
- item->setSelected(false);
- }
-
- mSelectedThumbnailItems += lassoSelectedThumbnailItems;
- mPrevLassoRect = lassoRect;
-
- if (Qt::ControlModifier & event->modifiers())
- {
- for (int i = 0; i < mSelectedThumbnailItems.count()-1; i++)
- {
- mSelectedThumbnailItems.values().at(i)->setSelected(true);
- }
- }
- }
- else
- {
- bSelectionInProgress = false;
- if (0 == selectedItems().size())
- return;
-
- if(bCanDrag)
- {
- QDrag *drag = new QDrag(this);
- QMimeData *mime = new QMimeData();
-
- if (mMimeType.length() > 0)
- mime->setData(mMimeType, QByteArray()); // trick the d&d system to register our own mime type
-
- drag->setMimeData(mime);
-
- QList<QUrl> qlElements;
-
- foreach (QGraphicsItem* item, selectedItems())
- {
- if (mGraphicItems.contains(item))
- {
- if (mGraphicItems.indexOf(item) <= mItemsPaths.size()){
- qlElements << mItemsPaths.at(mGraphicItems.indexOf(item));
- }
- }
- }
-
- if (qlElements.size() > 0){
- mime->setUrls(qlElements);
- drag->setMimeData(mime);
- drag->exec(Qt::CopyAction);
- }
- }
- }
-
- QGraphicsView::mouseMoveEvent(event);
-}
-
-
-void UBThumbnailWidget::mouseReleaseEvent(QMouseEvent *event)
-{
- int elapsedTimeSincePress = mClickTime.elapsed();
- prevMoveMousePos = QPoint();
- deleteLasso();
- QGraphicsView::mouseReleaseEvent(event);
-
- if(elapsedTimeSincePress < STARTDRAGTIME) {
- emit mouseClick(itemAt(event->pos()), 0);
- }
-}
-
-
-void UBThumbnailWidget::keyPressEvent(QKeyEvent *event)
-{
- if (mLastSelectedThumbnail)
- {
- QGraphicsItem *lastSelectedGraphicsItem = dynamic_cast<QGraphicsItem*>(mLastSelectedThumbnail);
- if (!lastSelectedGraphicsItem) return;
- int startSelectionIndex = mGraphicItems.indexOf(lastSelectedGraphicsItem);
- int previousSelectedThumbnailIndex = startSelectionIndex + mSelectionSpan;
-
- switch (event->key())
- {
- case Qt::Key_Down:
- case Qt::Key_Up:
- {
- if (rowCount() <= 1) break;
- if (Qt::ShiftModifier & event->modifiers())
- {
- int endSelectionIndex;
- if (Qt::Key_Down == event->key())
- {
- endSelectionIndex = previousSelectedThumbnailIndex + columnCount();
- if (endSelectionIndex >= mGraphicItems.count()) break;
- }
- else
- {
- endSelectionIndex = previousSelectedThumbnailIndex - columnCount();
- if (endSelectionIndex < 0) break;
- }
-
- int startIndex = startSelectionIndex < endSelectionIndex ? startSelectionIndex : endSelectionIndex;
- int count = startSelectionIndex < endSelectionIndex ? endSelectionIndex - startSelectionIndex + 1 : startSelectionIndex - endSelectionIndex + 1;
- mSelectionSpan = startSelectionIndex < endSelectionIndex ? (count - 1) : - (count - 1);
- selectItems(startIndex, count);
- }
- else
- {
- int toSelectIndex;
- if (Qt::Key_Down == event->key())
- {
- toSelectIndex = previousSelectedThumbnailIndex + columnCount();
- if (toSelectIndex >= mGraphicItems.count()) break;
- }
- else
- {
- toSelectIndex = previousSelectedThumbnailIndex - columnCount();
- if (toSelectIndex < 0) break;
- }
-
- selectItemAt(toSelectIndex, Qt::ControlModifier & event->modifiers());
- mSelectionSpan = 0;
- }
- }
- break;
-
- case Qt::Key_Left:
- case Qt::Key_Right:
- {
- QGraphicsItem *previousSelectedItem = mGraphicItems.at(previousSelectedThumbnailIndex);
- UBThumbnail *previousSelectedThumbnail = dynamic_cast<UBThumbnail*>(previousSelectedItem);
- if (!previousSelectedThumbnail) break;
-
- if (Qt::Key_Left == event->key())
- {
- if (0 == previousSelectedThumbnail->column()) break;
- }
- else
- {
- if (previousSelectedThumbnail->column() == columnCount() - 1 ||
- previousSelectedThumbnailIndex == mGraphicItems.count() - 1) break;
- }
-
- if (Qt::ShiftModifier & event->modifiers())
- {
- int endSelectionIndex;
- if (Qt::Key_Left == event->key())
- {
- endSelectionIndex = previousSelectedThumbnailIndex - 1;
- if (endSelectionIndex < 0) break;
- }
- else
- {
- endSelectionIndex = previousSelectedThumbnailIndex + 1;
- if (endSelectionIndex >= mGraphicItems.count()) break;
- }
-
- int startIndex = startSelectionIndex < endSelectionIndex ? startSelectionIndex : endSelectionIndex;
- int count = startSelectionIndex < endSelectionIndex ? endSelectionIndex - startSelectionIndex + 1 : startSelectionIndex - endSelectionIndex + 1;
- mSelectionSpan = startSelectionIndex < endSelectionIndex ? (count - 1) : - (count - 1);
- selectItems(startIndex, count);
- }
- else
- {
- if (Qt::Key_Left == event->key())
- selectItemAt(previousSelectedThumbnailIndex - 1, Qt::ControlModifier & event->modifiers());
- else
- selectItemAt(previousSelectedThumbnailIndex + 1, Qt::ControlModifier & event->modifiers());
-
- mSelectionSpan = 0;
- }
- }
- break;
-
- case Qt::Key_Home:
- {
- if (Qt::ShiftModifier & event->modifiers())
- {
- mSelectionSpan = - startSelectionIndex;
- selectItems(0, startSelectionIndex + 1);
- }
- else
- {
- selectItemAt(0, Qt::ControlModifier & event->modifiers());
- mSelectionSpan = 0;
- }
- }
- break;
-
- case Qt::Key_End:
- {
- if (Qt::ShiftModifier & event->modifiers())
- {
- mSelectionSpan = mGraphicItems.count() - startSelectionIndex - 1;
- selectItems(startSelectionIndex, mSelectionSpan + 1);
- }
- else
- {
- selectItemAt(mGraphicItems.count() - 1, Qt::ControlModifier & event->modifiers());
- mSelectionSpan = 0;
- }
- }
- break;
- case Qt::Key_A:
- {
- if (Qt::ControlModifier & event->modifiers())
- selectAll();
- }
- break;
- }
- }
- QGraphicsView::keyPressEvent(event);
-}
-
-
-void UBThumbnailWidget::focusInEvent(QFocusEvent *event)
-{
- Q_UNUSED(event);
-
- if (0 == selectedItems().count() && mGraphicItems.count() > 0 && Qt::TabFocusReason == event->reason())
- {
- selectItemAt(0);
- mSelectionSpan = 0;
- }
-}
-
-
-void UBThumbnailWidget::resizeEvent(QResizeEvent *event)
-{
- Q_UNUSED(event);
-
- refreshScene();
-
- emit resized();
-}
-
-
-void UBThumbnailWidget::sceneSelectionChanged()
-{
- emit selectionChanged();
-}
-
-
-void UBThumbnailWidget::selectItemAt(int pIndex, bool extend)
-{
- QGraphicsItem* itemToSelect = 0;
-
- if (pIndex >= 0 && pIndex < mGraphicItems.size())
- itemToSelect = mGraphicItems.at(pIndex);
-
- foreach (QGraphicsItem* item, items())
- {
- if (item == itemToSelect)
- {
- mLastSelectedThumbnail = dynamic_cast<UBThumbnail*>(item);
- item->setSelected(true);
- ensureVisible(item);
- }
- else if (!extend)
- {
- item->setSelected(false);
- }
- }
-}
-
-void UBThumbnailWidget::unselectItemAt(int pIndex)
-{
- if (pIndex >= 0 && pIndex < mGraphicItems.size())
- {
- QGraphicsItem *itemToUnselect = mGraphicItems.at(pIndex);
- itemToUnselect->setSelected(false);
- }
-}
-
-
-void UBThumbnailWidget::selectItems(int startIndex, int count)
-{
- for (int i = 0; i < mGraphicItems.count(); i++)
- {
- mGraphicItems.at(i)->setSelected(i >= startIndex && i < startIndex + count);
- }
-}
-
-
-void UBThumbnailWidget::selectAll()
-{
- foreach (QGraphicsItem* item, mGraphicItems)
- {
- item->setSelected(true);
- }
-}
-
-int UBThumbnailWidget::rowCount() const
-{
- UBThumbnail *lastThumbnail = dynamic_cast<UBThumbnail*>(mGraphicItems.last());
- return lastThumbnail ? lastThumbnail->row() + 1 : 0;
-}
-
-int UBThumbnailWidget::columnCount() const
-{
- UBThumbnail *lastThumbnail = dynamic_cast<UBThumbnail*>(mGraphicItems.last());
- if (!lastThumbnail) return 0;
- int lastRow = lastThumbnail->row();
- int lastColumn = lastThumbnail->column();
- return lastRow > 0 ? (mGraphicItems.count() - lastColumn - 1) / lastRow : mGraphicItems.count();
-}
-
-
-void UBThumbnailWidget::mouseDoubleClickEvent(QMouseEvent * event)
-{
- QGraphicsItem* item = itemAt(event->pos());
-
- if (item)
- {
- int index = mGraphicItems.indexOf(item);
- emit mouseDoubleClick(item, index);
- }
-}
-
-
-bool UBThumbnailWidget::thumbnailLessThan(QGraphicsItem* item1, QGraphicsItem* item2)
-{
- UBThumbnail *thumbnail1 = dynamic_cast<UBThumbnail*>(item1);
- UBThumbnail *thumbnail2 = dynamic_cast<UBThumbnail*>(item2);
- if (thumbnail1 && thumbnail2)
- {
- if (thumbnail1->row() != thumbnail2->row())
- return thumbnail1->row() < thumbnail2->row();
- else
- return thumbnail1->column() < thumbnail2->column();
- }
- return false;
-}
-
-void UBThumbnailWidget::deleteLasso()
-{
- if (mLassoRectItem && scene())
- {
- scene()->removeItem(mLassoRectItem);
- delete mLassoRectItem;
- mLassoRectItem = 0;
- }
-}
-
-
-UBThumbnail::UBThumbnail()
- : mAddedToScene(false)
-{
- mSelectionItem = new QGraphicsRectItem(0, 0, 0, 0);
- mSelectionItem->setPen(QPen(UBSettings::treeViewBackgroundColor, 8));
- // TODO UB 4.x fix nasty dependencies : 8 is a bit less than half of UBThumbnailWidget.mSpacing
-}
-
-UBThumbnail::~UBThumbnail()
-{
- if (mSelectionItem && !mAddedToScene)
- delete mSelectionItem;
-}
-
-
-UBSceneThumbnailNavigPixmap::UBSceneThumbnailNavigPixmap(const QPixmap& pix, UBDocumentProxy* proxy, int pSceneIndex)
- : UBSceneThumbnailPixmap(pix, proxy, pSceneIndex)
- , bButtonsVisible(false)
- , bCanDelete(false)
- , bCanMoveUp(false)
- , bCanMoveDown(false)
- , bCanDuplicate(false)
-{
- if(0 <= UBDocumentContainer::pageFromSceneIndex(pSceneIndex)){
- setAcceptsHoverEvents(true);
- setFlag(QGraphicsItem::ItemIsSelectable, true);
- }
-}
-
-UBSceneThumbnailNavigPixmap::~UBSceneThumbnailNavigPixmap()
-{
-
-}
-
-void UBSceneThumbnailNavigPixmap::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
-{
- event->accept();
- updateButtonsState();
- update();
-}
-
-void UBSceneThumbnailNavigPixmap::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
-{
- event->accept();
- bButtonsVisible = false;
- update();
-}
-
-void UBSceneThumbnailNavigPixmap::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
-{
- Q_UNUSED(option);
- Q_UNUSED(widget);
-
- UBSceneThumbnailPixmap::paint(painter, option, widget);
- if(bButtonsVisible)
- {
- if(bCanDelete)
- painter->drawPixmap(0, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/close.svg"));
- else
- painter->drawPixmap(0, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/closeDisabled.svg"));
- if(bCanDuplicate)
- painter->drawPixmap(BUTTONSIZE + BUTTONSPACING, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/duplicate.svg"));
- else
- painter->drawPixmap(BUTTONSIZE + BUTTONSPACING, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/duplicateDisabled.svg"));
- if(bCanMoveUp)
- painter->drawPixmap(2*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/moveUp.svg"));
- else
- painter->drawPixmap(2*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/moveUpDisabled.svg"));
- if(bCanMoveDown)
- painter->drawPixmap(3*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/menu.svg"));
- else
- painter->drawPixmap(3*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/menuDisabled.svg"));
- }
-}
-
-void UBSceneThumbnailNavigPixmap::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- QPointF p = event->pos();
-
- // Here we check the position of the click and verify if it has to trig an action or not.
- if(bCanDelete && p.x() >= 0 && p.x() <= BUTTONSIZE && p.y() >= 0 && p.y() <= BUTTONSIZE)
- deletePage();
- if(bCanDuplicate && p.x() >= BUTTONSIZE + BUTTONSPACING && p.x() <= 2*BUTTONSIZE + BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE)
- duplicatePage();
- if(bCanMoveUp && p.x() >= 2*(BUTTONSIZE + BUTTONSPACING) && p.x() <= 3*BUTTONSIZE + 2*BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE)
- moveUpPage();
- if(bCanMoveDown && p.x() >= 3*(BUTTONSIZE + BUTTONSPACING) && p.x() <= 4*BUTTONSIZE + 3*BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE)
- moveDownPage();
-
- event->accept();
-}
-
-void UBSceneThumbnailNavigPixmap::updateButtonsState()
-{
-
- bCanDelete = false;
- bCanMoveUp = false;
- bCanMoveDown = false;
- bCanDuplicate = false;
-
- if(proxy()){
- int pageIndex = UBDocumentContainer::pageFromSceneIndex(sceneIndex());
- UBDocumentController* documentController = UBApplication::documentController;
- bCanDelete = documentController->pageCanBeDeleted(pageIndex);
- bCanMoveUp = documentController->pageCanBeMovedUp(pageIndex);
- bCanMoveDown = documentController->pageCanBeMovedDown(pageIndex);
- bCanDuplicate = documentController->pageCanBeDuplicated(pageIndex);
- }
-
- if(bCanDelete || bCanMoveUp || bCanMoveDown || bCanDuplicate)
- bButtonsVisible = true;
-}
-
-void UBSceneThumbnailNavigPixmap::deletePage()
-{
- if(UBApplication::mainWindow->yesNoQuestion(QObject::tr("Remove Page"), QObject::tr("Are you sure you want to remove 1 page from the selected document '%0'?").arg(UBApplication::documentController->selectedDocument()->metaData(UBSettings::documentName).toString()))){
- UBApplication::boardController->deleteScene(sceneIndex());
- }
-}
-
-void UBSceneThumbnailNavigPixmap::duplicatePage()
-{
- UBApplication::boardController->duplicateScene(sceneIndex());
-}
-
-void UBSceneThumbnailNavigPixmap::moveUpPage()
-{
- if (sceneIndex()!=0)
- UBApplication::boardController->moveSceneToIndex(sceneIndex(), sceneIndex() - 1);
-}
-
-void UBSceneThumbnailNavigPixmap::moveDownPage()
-{
- if (sceneIndex() < UBApplication::boardController->selectedDocument()->pageCount()-1)
- UBApplication::boardController->moveSceneToIndex(sceneIndex(), sceneIndex() + 1);
-}
-
-void UBImgTextThumbnailElement::Place(int row, int col, qreal width, qreal height)
-{
- int labelSpacing = 0;
- if(this->caption)
- {
- QFontMetrics fm(this->caption->font());
- labelSpacing = UBSettings::thumbnailSpacing + fm.height();
- }
- if(this->thumbnail)
- {
- int w = this->thumbnail->boundingRect().width();
- int h = this->thumbnail->boundingRect().height();
-
- qreal scaleWidth = width / w;
- qreal scaleHeight = height / h;
- qreal scaleFactor = qMin(scaleWidth, scaleHeight);
- UBThumbnail* pix = dynamic_cast<UBThumbnail*>(this->thumbnail);
-
- QTransform transform;
- transform.scale(scaleFactor, scaleFactor);
-
- // Apply the scaling
- this->thumbnail->setTransform(transform);
- this->thumbnail->setFlag(QGraphicsItem::ItemIsSelectable, true);
-
- if(pix)
- {
- pix->setColumn(col);
- pix->setRow(row);
- }
-
- QPointF pos(border + (width - w * scaleFactor) / 2 + col * (width + border),
- border + row * (height + border + labelSpacing) + (height - h * scaleFactor) / 2);
-
- this->thumbnail->setPos(pos);
-
- if(this->caption)
- {
- QFontMetrics fm(this->caption->font());
- QString elidedText = fm.elidedText(this->caption->toPlainText(), Qt::ElideRight, width);
-
- this->caption->setPlainText(elidedText);
- this->caption->setWidth(fm.width(elidedText) + 2 * this->caption->document()->documentMargin());
- pos.setY(pos.y() + (height + h * scaleFactor) / 2 + 5); // What is this 5 ??
- qreal labelWidth = fm.width(elidedText);
- pos.setX(border + (width - labelWidth) / 2 + col * (width + border));
- this->caption->setPos(pos);
- }
- }
-}
+
+
+#include <QString>
+#include <QCursor>
+
+#include "UBThumbnailWidget.h"
+#include "UBRubberBand.h"
+#include "UBMainWindow.h"
+
+#include "board/UBBoardController.h"
+
+#include "core/UBSettings.h"
+#include "core/UBApplication.h"
+
+#include "document/UBDocumentProxy.h"
+#include "document/UBDocumentController.h"
+
+#include "core/memcheck.h"
+
+UBThumbnailWidget::UBThumbnailWidget(QWidget* parent)
+ : QGraphicsView(parent)
+ , mThumbnailWidth(UBSettings::defaultThumbnailWidth)
+ , mSpacing(UBSettings::thumbnailSpacing)
+ , mLastSelectedThumbnail(0)
+ , mSelectionSpan(0)
+ , mPrevLassoRect(QRect())
+ , mLassoRectItem(0)
+
+{
+ // By default, the drag is possible
+ bCanDrag = true;
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing);
+ setFrameShape(QFrame::NoFrame);
+ setScene(&mThumbnailsScene);
+
+ setAlignment(Qt::AlignLeft | Qt::AlignTop);
+
+ connect(&mThumbnailsScene, SIGNAL(selectionChanged()), this, SLOT(sceneSelectionChanged()));
+}
+
+
+UBThumbnailWidget::~UBThumbnailWidget()
+{
+ disconnect(&mThumbnailsScene, SIGNAL(selectionChanged()));
+}
+
+
+void UBThumbnailWidget::setThumbnailWidth(qreal pThumbnailWidth)
+{
+ mThumbnailWidth = pThumbnailWidth;
+
+ refreshScene();
+}
+
+
+void UBThumbnailWidget::setSpacing(qreal pSpacing)
+{
+ mSpacing = pSpacing;
+
+ refreshScene();
+}
+
+
+void UBThumbnailWidget::setGraphicsItems(const QList<QGraphicsItem*>& pGraphicsItems
+ , const QList<QUrl>& pItemsPaths
+ , const QStringList pLabels
+ , const QString& pMimeType)
+{
+ Q_ASSERT(pItemsPaths.count() == pLabels.count());
+ mGraphicItems = pGraphicsItems;
+ mItemsPaths = pItemsPaths;
+ mMimeType = pMimeType;
+ mLabels = pLabels;
+
+ foreach(QGraphicsItem* it, mThumbnailsScene.items())
+ {
+ mThumbnailsScene.removeItem(it, true);
+ }
+
+ // set lasso to 0 as it has been cleared as well
+ mLassoRectItem = 0;
+
+
+ mLabelsItems.clear();
+
+ foreach (const QString label, pLabels)
+ {
+ QFontMetrics fm(font());
+ UBThumbnailTextItem *labelItem =
+ new UBThumbnailTextItem(label); // deleted while replace or by the scene destruction
+
+ mThumbnailsScene.addItem(labelItem);
+ mLabelsItems << labelItem;
+ }
+
+ for (int i = 0; i < pGraphicsItems.count(); i++)
+ {
+ QGraphicsItem *item = pGraphicsItems.at(i);
+
+ UBSceneThumbnailPixmap *navigPixmap = dynamic_cast<UBSceneThumbnailPixmap *>(item);
+ if (navigPixmap)
+ {
+ navigPixmap->setLabel(mLabelsItems.at(i));
+ if (navigPixmap->isSelected())
+ mLabelsItems.at(i)->highlight(true);
+ }
+
+ if (item->scene() != &mThumbnailsScene)
+ mThumbnailsScene.addItem(item);
+ }
+
+ refreshScene();
+
+ mLastSelectedThumbnail = 0;
+}
+
+
+void UBThumbnailWidget::refreshScene()
+{
+ int nbColumns = (geometry().width() - mSpacing) / (mThumbnailWidth + mSpacing);
+
+ int labelSpacing = 0;
+
+ if (mLabelsItems.size() > 0)
+ {
+ QFontMetrics fm(mLabelsItems.at(0)->font());
+ labelSpacing = UBSettings::thumbnailSpacing + fm.height(); // TODO UB 4.x where is 20 from ??? configure ?? compute based on mSpacing ?? JBA Is it the font height?
+ }
+ nbColumns = qMax(nbColumns, 1);
+
+ qreal thumbnailHeight = mThumbnailWidth / UBSettings::minScreenRatio;
+
+ for (int i = 0; i < mGraphicItems.size(); i++)
+ {
+ QGraphicsItem* item = mGraphicItems.at(i);
+
+ qreal scaleWidth = mThumbnailWidth / item->boundingRect().width();
+ qreal scaleHeight = thumbnailHeight / item->boundingRect().height();
+
+ qreal scaleFactor = qMin(scaleWidth, scaleHeight);
+
+ //bitmap should not be stretched
+ UBThumbnail* pix = dynamic_cast<UBThumbnail*>(item);
+ if (pix)
+ scaleFactor = qMin(scaleFactor, 1.0);
+
+ QTransform transform;
+ transform.scale(scaleFactor, scaleFactor);
+
+ item->setTransform(transform);
+
+ item->setFlag(QGraphicsItem::ItemIsSelectable, true);
+
+ int columnIndex = i % nbColumns;
+ int rowIndex = i / nbColumns;
+
+ if (pix)
+ {
+ pix->setColumn(columnIndex);
+ pix->setRow(rowIndex);
+ }
+
+ int w = item->boundingRect().width();
+ int h = item->boundingRect().height();
+ QPointF pos(
+ mSpacing + (mThumbnailWidth - w * scaleFactor) / 2 + columnIndex * (mThumbnailWidth + mSpacing),
+ mSpacing + rowIndex * (thumbnailHeight + mSpacing + labelSpacing) + (thumbnailHeight - h * scaleFactor) / 2);
+
+ item->setPos(pos);
+
+ if (mLabelsItems.size() > i)
+ {
+ QFontMetrics fm(mLabelsItems.at(i)->font(), this);
+ QString elidedText = fm.elidedText(mLabels.at(i), Qt::ElideRight, mThumbnailWidth);
+
+ mLabelsItems.at(i)->setPlainText(elidedText);
+ mLabelsItems.at(i)->setWidth(fm.width(elidedText) + 2 * mLabelsItems.at(i)->document()->documentMargin());
+
+ pos.setY(pos.y() + (thumbnailHeight + h * scaleFactor) / 2 + 5);
+ qreal labelWidth = fm.width(elidedText);
+ pos.setX(mSpacing + (mThumbnailWidth - labelWidth) / 2 + columnIndex * (mThumbnailWidth + mSpacing));
+ mLabelsItems.at(i)->setPos(pos);
+ mLabelsItems.at(i)->highlight(false);
+ }
+ }
+
+ QScrollBar *vertScrollBar = verticalScrollBar();
+ int scrollBarThickness = 0;
+ if (vertScrollBar && vertScrollBar->isVisible())
+ scrollBarThickness = vertScrollBar->width();
+
+ setSceneRect(0, 0,
+ geometry().width() - scrollBarThickness,
+ mSpacing + ((((mGraphicItems.size() - 1) / nbColumns) + 1) * (thumbnailHeight + mSpacing + labelSpacing)));
+
+
+ if (UBApplication::boardController)
+ {
+ int page = UBApplication::boardController->currentPage();
+ if (mLabelsItems.count() > page && mGraphicItems.count() > page)
+ mLabelsItems.at(page)->highlight(mGraphicItems.at(page)->isSelected());
+ }
+}
+
+
+QList<QGraphicsItem*> UBThumbnailWidget::selectedItems()
+{
+ QList<QGraphicsItem*> sortedSelectedItems = mThumbnailsScene.selectedItems();
+ qSort(sortedSelectedItems.begin(), sortedSelectedItems.end(), thumbnailLessThan);
+ return sortedSelectedItems;
+}
+
+
+void UBThumbnailWidget::mousePressEvent(QMouseEvent *event)
+{
+ mClickTime = QTime::currentTime();
+ mMousePressPos = event->pos();
+
+ UBSceneThumbnailPixmap* sceneItem = dynamic_cast<UBSceneThumbnailPixmap*>(itemAt(mMousePressPos));
+ if(sceneItem==NULL)
+ {
+ event->ignore();
+ return;
+ }
+ //if(sceneItem){
+ // int pageIndex = UBDocumentContainer::pageFromSceneIndex(sceneItem->sceneIndex());
+ // if(pageIndex == 0){
+ // event->ignore();
+ // return;
+ // }
+ //}
+
+ mMousePressScenePos = mapToScene(mMousePressPos);
+ QGraphicsItem* underlyingItem = itemAt(mMousePressPos);
+ UBThumbnail *previousSelectedThumbnail = mLastSelectedThumbnail;
+
+ if (!dynamic_cast<UBThumbnail*>(underlyingItem))
+ {
+ deleteLasso();
+
+ UBRubberBand rubberBand(QRubberBand::Rectangle);
+ QStyleOption option;
+ option.initFrom(&rubberBand);
+
+ mPrevLassoRect = QRect();
+ mLassoRectItem = new QGraphicsRectItem(0, scene());
+
+#ifdef Q_WS_MAC
+ // The following code must stay in synch with <Qt installation folder>\src\gui\styles\qmacstyle_mac.mm
+ QColor strokeColor;
+ strokeColor.setHsvF(0, 0, 0.86, 1.0);
+ mLassoRectItem->setPen(QPen(strokeColor));
+ QColor fillColor(option.palette.color(QPalette::Disabled, QPalette::Highlight));
+ fillColor.setHsvF(0, 0, 0.53, 0.25);
+ mLassoRectItem->setBrush(fillColor);
+#else
+ // The following code must stay in synch with <Qt installation folder>\src\gui\styles\qwindowsxpstyle.cpp
+ QColor highlight = option.palette.color(QPalette::Active, QPalette::Highlight);
+ mLassoRectItem->setPen(highlight.darker(120));
+ QColor dimHighlight(qMin(highlight.red() / 2 + 110, 255),
+ qMin(highlight.green() / 2 + 110, 255),
+ qMin(highlight.blue() / 2 + 110, 255),
+ 127);
+ mLassoRectItem->setBrush(dimHighlight);
+#endif
+
+ mLassoRectItem->setZValue(10000);
+ mLassoRectItem->setRect(QRectF(mMousePressScenePos, QSizeF()));
+
+ if (Qt::ControlModifier & event->modifiers() || Qt::ShiftModifier & event->modifiers())
+ {
+ // mSelectedThumbnailItems = selectedItems().toSet();
+ return;
+ }
+
+ mSelectedThumbnailItems.clear();
+ mPreviouslyIncrementalSelectedItemsX.clear();
+ mPreviouslyIncrementalSelectedItemsY.clear();
+ QGraphicsView::mousePressEvent(event);
+ }
+ else if (Qt::ShiftModifier & event->modifiers())
+ {
+ if (previousSelectedThumbnail)
+ {
+ QGraphicsItem* previousSelectedItem = dynamic_cast<QGraphicsItem*>(previousSelectedThumbnail);
+ if (previousSelectedItem)
+ {
+ int index1 = mGraphicItems.indexOf(previousSelectedItem);
+ int index2 = mGraphicItems.indexOf(underlyingItem);
+ if (-1 == index2)
+ {
+ mSelectedThumbnailItems = selectedItems().toSet();
+ return;
+ }
+ mSelectionSpan = index2 - index1;
+ selectItems(qMin(index1, index2), mSelectionSpan < 0 ? - mSelectionSpan + 1 : mSelectionSpan + 1);
+ return;
+ }
+ }
+ }
+ else
+ {
+ mLastSelectedThumbnail = dynamic_cast<UBThumbnail*>(underlyingItem);
+ if (!underlyingItem->isSelected())
+ {
+ int index = mGraphicItems.indexOf(underlyingItem);
+ selectItemAt(index, Qt::ControlModifier & event->modifiers());
+ }
+ else
+ {
+ QGraphicsView::mousePressEvent(event);
+ }
+ if (!mLastSelectedThumbnail && mGraphicItems.count() > 0)
+ mLastSelectedThumbnail = dynamic_cast<UBThumbnail*>(mGraphicItems.at(0));
+ mSelectionSpan = 0;
+ return;
+ }
+}
+
+
+void UBThumbnailWidget::mouseMoveEvent(QMouseEvent *event)
+{
+ int distance = (mMousePressPos - event->pos()).manhattanLength();
+
+ if (0 == (event->buttons() & Qt::LeftButton) || distance < QApplication::startDragDistance())
+ return;
+
+ if (mLassoRectItem)
+ {
+ bSelectionInProgress = true;
+ int incrementLassoMinWidth = 2;
+ QPointF currentScenePos = mapToScene(event->pos());
+ QRectF lassoRect(
+ qMin(mMousePressScenePos.x(), currentScenePos.x()), qMin(mMousePressScenePos.y(), currentScenePos.y()),
+ qAbs(mMousePressScenePos.x() - currentScenePos.x()), qAbs(mMousePressScenePos.y() - currentScenePos.y()));
+ if (QPoint() == prevMoveMousePos)
+ prevMoveMousePos = currentScenePos;
+ QRectF incrementXSelection(
+ qMin(prevMoveMousePos.x(), currentScenePos.x()), qMin(mMousePressScenePos.y(), currentScenePos.y()),
+ qAbs(prevMoveMousePos.x() - currentScenePos.x())+incrementLassoMinWidth, qAbs(mMousePressScenePos.y() - currentScenePos.y()));
+ QRectF incrementYSelection(
+ qMin(mMousePressScenePos.x(), currentScenePos.x()), qMin(prevMoveMousePos.y(), currentScenePos.y()),
+ qAbs(mMousePressScenePos.x() - currentScenePos.x()), qAbs(prevMoveMousePos.y() - currentScenePos.y())+incrementLassoMinWidth);
+
+ prevMoveMousePos = currentScenePos;
+ mLassoRectItem->setRect(lassoRect);
+
+ QSet<QGraphicsItem*> lassoSelectedThumbnailItems;
+
+ QSet<QGraphicsItem*> toUnset;
+ QSet<QGraphicsItem*> toSet;
+
+ // for horizontal moving
+ QSet<QGraphicsItem*> incSelectedItemsX = scene()->items(incrementXSelection, Qt::IntersectsItemBoundingRect).toSet();
+ foreach (QGraphicsItem *lassoSelectedItem, incSelectedItemsX)
+ {
+ if (lassoSelectedItem)
+ {
+ UBSceneThumbnailPixmap *thumbnailItem = dynamic_cast<UBSceneThumbnailPixmap*>(lassoSelectedItem);
+ if (thumbnailItem)
+ lassoSelectedThumbnailItems += lassoSelectedItem;
+ }
+ }
+
+ if(lassoRect.width() < mPrevLassoRect.width())
+ {
+ if (!lassoSelectedThumbnailItems.contains(mPreviouslyIncrementalSelectedItemsX))
+ toUnset += mPreviouslyIncrementalSelectedItemsX - lassoSelectedThumbnailItems;
+
+ }
+ mPreviouslyIncrementalSelectedItemsX = lassoSelectedThumbnailItems;
+
+ toSet += lassoSelectedThumbnailItems + mPreviouslyIncrementalSelectedItemsX;
+
+
+ lassoSelectedThumbnailItems.clear();
+
+ // for vertical moving
+
+ QSet<QGraphicsItem*> incSelectedItemsY = scene()->items(incrementYSelection, Qt::IntersectsItemBoundingRect).toSet();
+ foreach (QGraphicsItem *lassoSelectedItem, incSelectedItemsY)
+ {
+ if (lassoSelectedItem)
+ {
+ UBSceneThumbnailPixmap *thumbnailItem = dynamic_cast<UBSceneThumbnailPixmap*>(lassoSelectedItem);
+
+ if (thumbnailItem)
+ lassoSelectedThumbnailItems += lassoSelectedItem;
+ }
+ }
+
+ if(lassoRect.height() < mPrevLassoRect.height())
+ {
+ if (!lassoSelectedThumbnailItems.contains(mPreviouslyIncrementalSelectedItemsY))
+ toUnset += mPreviouslyIncrementalSelectedItemsY - lassoSelectedThumbnailItems;
+
+ }
+ mPreviouslyIncrementalSelectedItemsY = lassoSelectedThumbnailItems;
+
+
+ toSet += lassoSelectedThumbnailItems + mPreviouslyIncrementalSelectedItemsY;
+
+
+ toSet -= toUnset;
+
+ foreach (QGraphicsItem *item, toSet)
+ {
+ item->setSelected(true);
+ }
+
+ foreach (QGraphicsItem *item, toUnset)
+ {
+ item->setSelected(false);
+ }
+
+ mSelectedThumbnailItems += lassoSelectedThumbnailItems;
+ mPrevLassoRect = lassoRect;
+
+ if (Qt::ControlModifier & event->modifiers())
+ {
+ for (int i = 0; i < mSelectedThumbnailItems.count()-1; i++)
+ {
+ mSelectedThumbnailItems.values().at(i)->setSelected(true);
+ }
+ }
+ }
+ else
+ {
+ bSelectionInProgress = false;
+ if (0 == selectedItems().size())
+ return;
+
+ if(bCanDrag)
+ {
+ QDrag *drag = new QDrag(this);
+ QMimeData *mime = new QMimeData();
+
+ if (mMimeType.length() > 0)
+ mime->setData(mMimeType, QByteArray()); // trick the d&d system to register our own mime type
+
+ drag->setMimeData(mime);
+
+ QList<QUrl> qlElements;
+
+ foreach (QGraphicsItem* item, selectedItems())
+ {
+ if (mGraphicItems.contains(item))
+ {
+ if (mGraphicItems.indexOf(item) <= mItemsPaths.size()){
+ qlElements << mItemsPaths.at(mGraphicItems.indexOf(item));
+ }
+ }
+ }
+
+ if (qlElements.size() > 0){
+ mime->setUrls(qlElements);
+ drag->setMimeData(mime);
+ drag->exec(Qt::CopyAction);
+ }
+ }
+ }
+
+ QGraphicsView::mouseMoveEvent(event);
+}
+
+
+void UBThumbnailWidget::mouseReleaseEvent(QMouseEvent *event)
+{
+ int elapsedTimeSincePress = mClickTime.elapsed();
+ prevMoveMousePos = QPoint();
+ deleteLasso();
+ QGraphicsView::mouseReleaseEvent(event);
+
+ if(elapsedTimeSincePress < STARTDRAGTIME) {
+ emit mouseClick(itemAt(event->pos()), 0);
+ }
+}
+
+
+void UBThumbnailWidget::keyPressEvent(QKeyEvent *event)
+{
+ if (mLastSelectedThumbnail)
+ {
+ QGraphicsItem *lastSelectedGraphicsItem = dynamic_cast<QGraphicsItem*>(mLastSelectedThumbnail);
+ if (!lastSelectedGraphicsItem) return;
+ int startSelectionIndex = mGraphicItems.indexOf(lastSelectedGraphicsItem);
+ int previousSelectedThumbnailIndex = startSelectionIndex + mSelectionSpan;
+
+ switch (event->key())
+ {
+ case Qt::Key_Down:
+ case Qt::Key_Up:
+ {
+ if (rowCount() <= 1) break;
+ if (Qt::ShiftModifier & event->modifiers())
+ {
+ int endSelectionIndex;
+ if (Qt::Key_Down == event->key())
+ {
+ endSelectionIndex = previousSelectedThumbnailIndex + columnCount();
+ if (endSelectionIndex >= mGraphicItems.count()) break;
+ }
+ else
+ {
+ endSelectionIndex = previousSelectedThumbnailIndex - columnCount();
+ if (endSelectionIndex < 0) break;
+ }
+
+ int startIndex = startSelectionIndex < endSelectionIndex ? startSelectionIndex : endSelectionIndex;
+ int count = startSelectionIndex < endSelectionIndex ? endSelectionIndex - startSelectionIndex + 1 : startSelectionIndex - endSelectionIndex + 1;
+ mSelectionSpan = startSelectionIndex < endSelectionIndex ? (count - 1) : - (count - 1);
+ selectItems(startIndex, count);
+ }
+ else
+ {
+ int toSelectIndex;
+ if (Qt::Key_Down == event->key())
+ {
+ toSelectIndex = previousSelectedThumbnailIndex + columnCount();
+ if (toSelectIndex >= mGraphicItems.count()) break;
+ }
+ else
+ {
+ toSelectIndex = previousSelectedThumbnailIndex - columnCount();
+ if (toSelectIndex < 0) break;
+ }
+
+ selectItemAt(toSelectIndex, Qt::ControlModifier & event->modifiers());
+ mSelectionSpan = 0;
+ }
+ }
+ break;
+
+ case Qt::Key_Left:
+ case Qt::Key_Right:
+ {
+ QGraphicsItem *previousSelectedItem = mGraphicItems.at(previousSelectedThumbnailIndex);
+ UBThumbnail *previousSelectedThumbnail = dynamic_cast<UBThumbnail*>(previousSelectedItem);
+ if (!previousSelectedThumbnail) break;
+
+ if (Qt::Key_Left == event->key())
+ {
+ if (0 == previousSelectedThumbnail->column()) break;
+ }
+ else
+ {
+ if (previousSelectedThumbnail->column() == columnCount() - 1 ||
+ previousSelectedThumbnailIndex == mGraphicItems.count() - 1) break;
+ }
+
+ if (Qt::ShiftModifier & event->modifiers())
+ {
+ int endSelectionIndex;
+ if (Qt::Key_Left == event->key())
+ {
+ endSelectionIndex = previousSelectedThumbnailIndex - 1;
+ if (endSelectionIndex < 0) break;
+ }
+ else
+ {
+ endSelectionIndex = previousSelectedThumbnailIndex + 1;
+ if (endSelectionIndex >= mGraphicItems.count()) break;
+ }
+
+ int startIndex = startSelectionIndex < endSelectionIndex ? startSelectionIndex : endSelectionIndex;
+ int count = startSelectionIndex < endSelectionIndex ? endSelectionIndex - startSelectionIndex + 1 : startSelectionIndex - endSelectionIndex + 1;
+ mSelectionSpan = startSelectionIndex < endSelectionIndex ? (count - 1) : - (count - 1);
+ selectItems(startIndex, count);
+ }
+ else
+ {
+ if (Qt::Key_Left == event->key())
+ selectItemAt(previousSelectedThumbnailIndex - 1, Qt::ControlModifier & event->modifiers());
+ else
+ selectItemAt(previousSelectedThumbnailIndex + 1, Qt::ControlModifier & event->modifiers());
+
+ mSelectionSpan = 0;
+ }
+ }
+ break;
+
+ case Qt::Key_Home:
+ {
+ if (Qt::ShiftModifier & event->modifiers())
+ {
+ mSelectionSpan = - startSelectionIndex;
+ selectItems(0, startSelectionIndex + 1);
+ }
+ else
+ {
+ selectItemAt(0, Qt::ControlModifier & event->modifiers());
+ mSelectionSpan = 0;
+ }
+ }
+ break;
+
+ case Qt::Key_End:
+ {
+ if (Qt::ShiftModifier & event->modifiers())
+ {
+ mSelectionSpan = mGraphicItems.count() - startSelectionIndex - 1;
+ selectItems(startSelectionIndex, mSelectionSpan + 1);
+ }
+ else
+ {
+ selectItemAt(mGraphicItems.count() - 1, Qt::ControlModifier & event->modifiers());
+ mSelectionSpan = 0;
+ }
+ }
+ break;
+ case Qt::Key_A:
+ {
+ if (Qt::ControlModifier & event->modifiers())
+ selectAll();
+ }
+ break;
+ }
+ }
+ QGraphicsView::keyPressEvent(event);
+}
+
+
+void UBThumbnailWidget::focusInEvent(QFocusEvent *event)
+{
+ Q_UNUSED(event);
+
+ if (0 == selectedItems().count() && mGraphicItems.count() > 0 && Qt::TabFocusReason == event->reason())
+ {
+ selectItemAt(0);
+ mSelectionSpan = 0;
+ }
+}
+
+
+void UBThumbnailWidget::resizeEvent(QResizeEvent *event)
+{
+ Q_UNUSED(event);
+
+ refreshScene();
+
+ emit resized();
+}
+
+
+void UBThumbnailWidget::sceneSelectionChanged()
+{
+ emit selectionChanged();
+}
+
+
+void UBThumbnailWidget::selectItemAt(int pIndex, bool extend)
+{
+ QGraphicsItem* itemToSelect = 0;
+
+ if (pIndex >= 0 && pIndex < mGraphicItems.size())
+ itemToSelect = mGraphicItems.at(pIndex);
+
+ if (!extend)
+ foreach (QGraphicsItem* item, items())
+ {
+ UBThumbnail *thumb = dynamic_cast<UBThumbnail*>(item);
+ if (thumb && thumb->label())
+ thumb->label()->highlight(false);
+
+ item->setSelected(false);
+ }
+
+ mLastSelectedThumbnail = dynamic_cast<UBThumbnail*>(itemToSelect);
+ itemToSelect->setSelected(true);
+ ensureVisible(itemToSelect);
+ }
+
+void UBThumbnailWidget::unselectItemAt(int pIndex)
+{
+ if (pIndex >= 0 && pIndex < mGraphicItems.size())
+ {
+ QGraphicsItem *itemToUnselect = mGraphicItems.at(pIndex);
+ itemToUnselect->setSelected(false);
+ }
+}
+
+
+void UBThumbnailWidget::selectItems(int startIndex, int count)
+{
+ for (int i = 0; i < mGraphicItems.count(); i++)
+ {
+ mGraphicItems.at(i)->setSelected(i >= startIndex && i < startIndex + count);
+ }
+}
+
+
+void UBThumbnailWidget::selectAll()
+{
+ foreach (QGraphicsItem* item, mGraphicItems)
+ {
+ item->setSelected(true);
+ }
+}
+
+int UBThumbnailWidget::rowCount() const
+{
+ UBThumbnail *lastThumbnail = dynamic_cast<UBThumbnail*>(mGraphicItems.last());
+ return lastThumbnail ? lastThumbnail->row() + 1 : 0;
+}
+
+int UBThumbnailWidget::columnCount() const
+{
+ UBThumbnail *lastThumbnail = dynamic_cast<UBThumbnail*>(mGraphicItems.last());
+ if (!lastThumbnail) return 0;
+ int lastRow = lastThumbnail->row();
+ int lastColumn = lastThumbnail->column();
+ return lastRow > 0 ? (mGraphicItems.count() - lastColumn - 1) / lastRow : mGraphicItems.count();
+}
+
+
+void UBThumbnailWidget::mouseDoubleClickEvent(QMouseEvent * event)
+{
+ QGraphicsItem* item = itemAt(event->pos());
+
+ if (item)
+ {
+ int index = mGraphicItems.indexOf(item);
+ emit mouseDoubleClick(item, index);
+ }
+}
+
+
+bool UBThumbnailWidget::thumbnailLessThan(QGraphicsItem* item1, QGraphicsItem* item2)
+{
+ UBThumbnail *thumbnail1 = dynamic_cast<UBThumbnail*>(item1);
+ UBThumbnail *thumbnail2 = dynamic_cast<UBThumbnail*>(item2);
+ if (thumbnail1 && thumbnail2)
+ {
+ if (thumbnail1->row() != thumbnail2->row())
+ return thumbnail1->row() < thumbnail2->row();
+ else
+ return thumbnail1->column() < thumbnail2->column();
+ }
+ return false;
+}
+
+void UBThumbnailWidget::deleteLasso()
+{
+ if (mLassoRectItem && scene())
+ {
+ scene()->removeItem(mLassoRectItem);
+ delete mLassoRectItem;
+ mLassoRectItem = 0;
+ }
+}
+
+
+UBThumbnail::UBThumbnail()
+ : mAddedToScene(false)
+ , mLabel(NULL)
+{
+ mSelectionItem = new QGraphicsRectItem(0, 0, 0, 0);
+ mSelectionItem->setPen(QPen(UBSettings::treeViewBackgroundColor, 8));
+ // TODO UB 4.x fix nasty dependencies : 8 is a bit less than half of UBThumbnailWidget.mSpacing
+}
+
+UBThumbnail::~UBThumbnail()
+{
+ if (mSelectionItem && !mAddedToScene)
+ delete mSelectionItem;
+}
+
+void UBThumbnail::itemChange(QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const QVariant &value)
+{
+ Q_UNUSED(value);
+
+ if ((change == QGraphicsItem::ItemSelectedHasChanged
+ || change == QGraphicsItem::ItemTransformHasChanged
+ || change == QGraphicsItem::ItemPositionHasChanged)
+ && item->scene())
+ {
+ if (item->isSelected())
+ {
+ if (!mSelectionItem->scene())
+ {
+ item->scene()->addItem(mSelectionItem);
+ mSelectionItem->setZValue(item->zValue() - 1);
+ // UBGraphicsItem::assignZValue(mSelectionItem, item->zValue() - 1);
+ mAddedToScene = true;
+ }
+
+ mSelectionItem->setRect(
+ item->sceneBoundingRect().x() - 5,
+ item->sceneBoundingRect().y() - 5,
+ item->sceneBoundingRect().width() + 10,
+ item->sceneBoundingRect().height() + 10);
+
+ mSelectionItem->show();
+ }
+ else
+ {
+ mSelectionItem->hide();
+ }
+ if (mLabel)
+ mLabel->highlight(item->isSelected());
+ }
+}
+
+UBSceneThumbnailPixmap::~UBSceneThumbnailPixmap()
+{
+ //NOOP
+}
+
+
+UBSceneThumbnailNavigPixmap::UBSceneThumbnailNavigPixmap(const QPixmap& pix, UBDocumentProxy* proxy, int pSceneIndex)
+ : UBSceneThumbnailPixmap(pix, proxy, pSceneIndex)
+ , bButtonsVisible(false)
+ , bCanDelete(false)
+ , bCanMoveUp(false)
+ , bCanMoveDown(false)
+ , bCanDuplicate(false)
+{
+ if(0 <= UBDocumentContainer::pageFromSceneIndex(pSceneIndex)){
+ setAcceptsHoverEvents(true);
+ setFlag(QGraphicsItem::ItemIsSelectable, true);
+ }
+}
+
+UBSceneThumbnailNavigPixmap::~UBSceneThumbnailNavigPixmap()
+{
+
+}
+
+void UBSceneThumbnailNavigPixmap::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
+{
+ event->accept();
+ updateButtonsState();
+ update();
+}
+
+void UBSceneThumbnailNavigPixmap::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
+{
+ event->accept();
+ bButtonsVisible = false;
+ update();
+}
+
+void UBSceneThumbnailNavigPixmap::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+
+ UBSceneThumbnailPixmap::paint(painter, option, widget);
+ if(bButtonsVisible)
+ {
+ if(bCanDelete)
+ painter->drawPixmap(0, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/close.svg"));
+ else
+ painter->drawPixmap(0, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/closeDisabled.svg"));
+ if(bCanDuplicate)
+ painter->drawPixmap(BUTTONSIZE + BUTTONSPACING, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/duplicate.svg"));
+ else
+ painter->drawPixmap(BUTTONSIZE + BUTTONSPACING, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/duplicateDisabled.svg"));
+ if(bCanMoveUp)
+ painter->drawPixmap(2*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/moveUp.svg"));
+ else
+ painter->drawPixmap(2*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/moveUpDisabled.svg"));
+ if(bCanMoveDown)
+ painter->drawPixmap(3*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/menu.svg"));
+ else
+ painter->drawPixmap(3*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/menuDisabled.svg"));
+ }
+}
+
+void UBSceneThumbnailNavigPixmap::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ QPointF p = event->pos();
+
+ // Here we check the position of the click and verify if it has to trig an action or not.
+ if(bCanDelete && p.x() >= 0 && p.x() <= BUTTONSIZE && p.y() >= 0 && p.y() <= BUTTONSIZE)
+ deletePage();
+ if(bCanDuplicate && p.x() >= BUTTONSIZE + BUTTONSPACING && p.x() <= 2*BUTTONSIZE + BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE)
+ duplicatePage();
+ if(bCanMoveUp && p.x() >= 2*(BUTTONSIZE + BUTTONSPACING) && p.x() <= 3*BUTTONSIZE + 2*BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE)
+ moveUpPage();
+ if(bCanMoveDown && p.x() >= 3*(BUTTONSIZE + BUTTONSPACING) && p.x() <= 4*BUTTONSIZE + 3*BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE)
+ moveDownPage();
+
+ event->accept();
+}
+
+void UBSceneThumbnailNavigPixmap::updateButtonsState()
+{
+
+ bCanDelete = false;
+ bCanMoveUp = false;
+ bCanMoveDown = false;
+ bCanDuplicate = false;
+
+ if(proxy()){
+ int pageIndex = UBDocumentContainer::pageFromSceneIndex(sceneIndex());
+ UBDocumentController* documentController = UBApplication::documentController;
+ if (!documentController->selectedDocument()) {
+ documentController->setDocument(UBApplication::boardController->selectedDocument());
+ }
+ bCanDelete = documentController->pageCanBeDeleted(pageIndex);
+ bCanMoveUp = documentController->pageCanBeMovedUp(pageIndex);
+ bCanMoveDown = documentController->pageCanBeMovedDown(pageIndex);
+ bCanDuplicate = documentController->pageCanBeDuplicated(pageIndex);
+ }
+
+ if(bCanDelete || bCanMoveUp || bCanMoveDown || bCanDuplicate)
+ bButtonsVisible = true;
+}
+
+void UBSceneThumbnailNavigPixmap::deletePage()
+{
+ if(UBApplication::mainWindow->yesNoQuestion(QObject::tr("Remove Page"), QObject::tr("Are you sure you want to remove 1 page from the selected document '%0'?").arg(UBApplication::documentController->selectedDocument()->metaData(UBSettings::documentName).toString()))){
+ UBApplication::boardController->deleteScene(sceneIndex());
+ }
+}
+
+void UBSceneThumbnailNavigPixmap::duplicatePage()
+{
+ UBApplication::boardController->duplicateScene(sceneIndex());
+}
+
+void UBSceneThumbnailNavigPixmap::moveUpPage()
+{
+ if (sceneIndex()!=0)
+ UBApplication::boardController->moveSceneToIndex(sceneIndex(), sceneIndex() - 1);
+}
+
+void UBSceneThumbnailNavigPixmap::moveDownPage()
+{
+ if (sceneIndex() < UBApplication::boardController->selectedDocument()->pageCount()-1)
+ UBApplication::boardController->moveSceneToIndex(sceneIndex(), sceneIndex() + 1);
+}
+
+void UBImgTextThumbnailElement::Place(int row, int col, qreal width, qreal height)
+{
+ int labelSpacing = 0;
+ if(this->caption)
+ {
+ QFontMetrics fm(this->caption->font());
+ labelSpacing = UBSettings::thumbnailSpacing + fm.height();
+ }
+ if(this->thumbnail)
+ {
+ int w = this->thumbnail->boundingRect().width();
+ int h = this->thumbnail->boundingRect().height();
+
+ qreal scaleWidth = width / w;
+ qreal scaleHeight = height / h;
+ qreal scaleFactor = qMin(scaleWidth, scaleHeight);
+ UBThumbnail* pix = dynamic_cast<UBThumbnail*>(this->thumbnail);
+
+ QTransform transform;
+ transform.scale(scaleFactor, scaleFactor);
+
+ // Apply the scaling
+ this->thumbnail->setTransform(transform);
+ this->thumbnail->setFlag(QGraphicsItem::ItemIsSelectable, true);
+
+ if(pix)
+ {
+ pix->setColumn(col);
+ pix->setRow(row);
+ }
+
+ QPointF pos(border + (width - w * scaleFactor) / 2 + col * (width + border),
+ border + row * (height + border + labelSpacing) + (height - h * scaleFactor) / 2);
+
+ this->thumbnail->setPos(pos);
+
+ if(this->caption)
+ {
+ QFontMetrics fm(this->caption->font());
+ QString elidedText = fm.elidedText(this->caption->toPlainText(), Qt::ElideRight, width);
+
+ this->caption->setPlainText(elidedText);
+ this->caption->setWidth(fm.width(elidedText) + 2 * this->caption->document()->documentMargin());
+ pos.setY(pos.y() + (height + h * scaleFactor) / 2 + 5); // What is this 5 ??
+ qreal labelWidth = fm.width(elidedText);
+ pos.setX(border + (width - labelWidth) / 2 + col * (width + border));
+ this->caption->setPos(pos);
+ }
+ }
+}
diff --git a/Sankore-3.1/src/gui/UBThumbnailWidget.h b/Sankore-3.1/src/gui/UBThumbnailWidget.h
index 31403c8..d34a127 100644
--- a/Sankore-3.1/src/gui/UBThumbnailWidget.h
+++ b/Sankore-3.1/src/gui/UBThumbnailWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,417 +18,378 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
-
-#ifndef UBTHUMBNAILWIDGET_H_
-#define UBTHUMBNAILWIDGET_H_
-
-#include <QtGui>
-#include <QtSvg>
-#include <QTime>
-#include <QGraphicsSceneHoverEvent>
-
-#include "frameworks/UBCoreGraphicsScene.h"
-#include "core/UBSettings.h"
-#include "domain/UBItem.h"
-
-#define STARTDRAGTIME 1000000
-#define BUTTONSIZE 48
-#define BUTTONSPACING 5
-
-class UBDocumentProxy;
-class UBThumbnailTextItem;
-class UBThumbnail;
-
-class UBThumbnailWidget : public QGraphicsView
-{
- Q_OBJECT;
-
- public:
- UBThumbnailWidget(QWidget* parent);
- virtual ~UBThumbnailWidget();
-
- QList<QGraphicsItem*> selectedItems();
- void selectItemAt(int pIndex, bool extend = false);
- void unselectItemAt(int pIndex);
-
- qreal thumbnailWidth()
- {
- return mThumbnailWidth;
- }
-
- void setBackgroundBrush(const QBrush& brush)
- {
- mThumbnailsScene.setBackgroundBrush(brush);
- }
-
- public slots:
- void setThumbnailWidth(qreal pThumbnailWidth);
- void setSpacing(qreal pSpacing);
- virtual void setGraphicsItems(const QList<QGraphicsItem*>& pGraphicsItems, const QList<QUrl>& pItemPaths, const QStringList pLabels = QStringList(), const QString& pMimeType = QString(""));
- void refreshScene();
- void sceneSelectionChanged();
-
- signals:
- void resized();
- void selectionChanged();
- void mouseDoubleClick(QGraphicsItem* item, int index);
- void mouseClick(QGraphicsItem* item, int index);
-
-
- protected:
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseMoveEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
- virtual void resizeEvent(QResizeEvent * event);
- void mouseDoubleClickEvent(QMouseEvent * event);
-
- virtual void keyPressEvent(QKeyEvent *event);
- virtual void focusInEvent(QFocusEvent *event);
-
- QList<QGraphicsItem*> mGraphicItems;
- QList<UBThumbnailTextItem*> mLabelsItems;
- QPointF mMousePressScenePos;
- QPoint mMousePressPos;
-
- protected:
- qreal spacing() { return mSpacing; }
- QList<QUrl> mItemsPaths;
- QStringList mLabels;
- bool bSelectionInProgress;
- bool bCanDrag;
-
- private:
- void selectAll();
- void selectItems(int startIndex, int count);
- int rowCount() const;
- int columnCount() const;
-
- static bool thumbnailLessThan(QGraphicsItem* item1, QGraphicsItem* item2);
-
- void deleteLasso();
-
- UBCoreGraphicsScene mThumbnailsScene;
-
- QString mMimeType;
-
- QPointF prevMoveMousePos;
-
- qreal mThumbnailWidth;
- qreal mThumbnailHeight;
- qreal mSpacing;
-
- UBThumbnail *mLastSelectedThumbnail;
- int mSelectionSpan;
- QRectF mPrevLassoRect;
- QGraphicsRectItem *mLassoRectItem;
- QSet<QGraphicsItem*> mSelectedThumbnailItems;
- QSet<QGraphicsItem*> mPreviouslyIncrementalSelectedItemsX;
- QSet<QGraphicsItem*> mPreviouslyIncrementalSelectedItemsY;
- QTime mClickTime;
-};
-
-
-class UBThumbnail
-{
- public:
- UBThumbnail();
-
- virtual ~UBThumbnail();
-
- QStyleOptionGraphicsItem muteStyleOption(const QStyleOptionGraphicsItem *option)
- {
- // Never draw the rubber band, we draw our custom selection with the DelegateFrame
- QStyleOptionGraphicsItem styleOption = QStyleOptionGraphicsItem(*option);
- styleOption.state &= ~QStyle::State_Selected;
-
- return styleOption;
- }
-
- virtual void itemChange(QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const QVariant &value)
- {
- Q_UNUSED(value);
-
- if ((change == QGraphicsItem::ItemSelectedHasChanged
- || change == QGraphicsItem::ItemTransformHasChanged
- || change == QGraphicsItem::ItemPositionHasChanged)
- && item->scene())
- {
- if (item->isSelected())
- {
- if (!mSelectionItem->scene())
- {
- item->scene()->addItem(mSelectionItem);
- mSelectionItem->setZValue(item->zValue() - 1);
-// UBGraphicsItem::assignZValue(mSelectionItem, item->zValue() - 1);
- mAddedToScene = true;
- }
-
- mSelectionItem->setRect(
- item->sceneBoundingRect().x() - 5,
- item->sceneBoundingRect().y() - 5,
- item->sceneBoundingRect().width() + 10,
- item->sceneBoundingRect().height() + 10);
-
- mSelectionItem->show();
-
- }
- else
- {
- mSelectionItem->hide();
- }
- }
- }
-
- int column() { return mColumn; }
- void setColumn(int column) { mColumn = column; }
- int row() { return mRow; }
- void setRow(int row) { mRow = row; }
-
- protected:
- QGraphicsRectItem *mSelectionItem;
- private:
- bool mAddedToScene;
-
- int mColumn;
- int mRow;
-};
-
-
-class UBThumbnailSvg : public QGraphicsSvgItem, public UBThumbnail
-{
- public:
- UBThumbnailSvg(const QString& path)
- : QGraphicsSvgItem(path)
- {
- setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
- }
-
- virtual ~UBThumbnailSvg()
- {
- // NOOP
- }
-
- virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
- {
- QStyleOptionGraphicsItem styleOption = UBThumbnail::muteStyleOption(option);
- QGraphicsSvgItem::paint(painter, &styleOption, widget);
- }
-
- virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value)
- {
- UBThumbnail::itemChange(this, change, value);
- return QGraphicsSvgItem::itemChange(change, value);
- }
-
-};
-
-
-class UBThumbnailPixmap : public QGraphicsPixmapItem, public UBThumbnail
-{
- public:
- UBThumbnailPixmap(const QPixmap& pix)
- : QGraphicsPixmapItem(pix)
- {
- setTransformationMode(Qt::SmoothTransformation); // UB 4.3 may be expensive -- make configurable
- setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
- setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
- }
-
- virtual ~UBThumbnailPixmap()
- {
- // NOOP
- }
-
- virtual QPainterPath shape () const
- {
- QPainterPath path;
- path.addRect(boundingRect());
- return path;
- }
-
-
- virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
- {
- QStyleOptionGraphicsItem styleOption = UBThumbnail::muteStyleOption(option);
- QGraphicsPixmapItem::paint(painter, &styleOption, widget);
- }
-
- virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value)
- {
- UBThumbnail::itemChange(this, change, value);
- return QGraphicsPixmapItem::itemChange(change, value);
- }
-};
-
-
-class UBSceneThumbnailPixmap : public UBThumbnailPixmap
-{
- public:
- UBSceneThumbnailPixmap(const QPixmap& pix, UBDocumentProxy* proxy, int pSceneIndex)
- : UBThumbnailPixmap(pix)
- , mProxy(proxy)
- , mSceneIndex(pSceneIndex)
- {
- // NOOP
- }
-
- virtual ~UBSceneThumbnailPixmap()
- {
- // NOOP
- }
-
- UBDocumentProxy* proxy()
- {
- return mProxy;
- }
-
- int sceneIndex()
- {
- return mSceneIndex;
- }
-
- void highlight()
- {
- //NOOP
- }
-
- private:
- UBDocumentProxy* mProxy;
- int mSceneIndex;
-};
-
-class UBSceneThumbnailNavigPixmap : public UBSceneThumbnailPixmap
-{
- public:
- UBSceneThumbnailNavigPixmap(const QPixmap& pix, UBDocumentProxy* proxy, int pSceneIndex);
- ~UBSceneThumbnailNavigPixmap();
-
- protected:
- void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
- void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
-
- private:
- void updateButtonsState();
- void deletePage();
- void duplicatePage();
- void moveUpPage();
- void moveDownPage();
-
- bool bButtonsVisible;
- bool bCanDelete;
- bool bCanMoveUp;
- bool bCanMoveDown;
- bool bCanDuplicate;
-};
-
-class UBThumbnailVideo : public UBThumbnailPixmap
-{
- public:
- UBThumbnailVideo(const QUrl &path)
- : UBThumbnailPixmap(QPixmap(":/images/movie.svg"))
- , mPath(path)
- {
- // NOOP
- }
-
- virtual ~UBThumbnailVideo()
- {
- // NOOP
- }
-
- QUrl path()
- {
- return mPath;
- }
-
- private:
-
- QUrl mPath;
-};
-
-class UBThumbnailTextItem : public QGraphicsTextItem
-{
- public:
- UBThumbnailTextItem(const QString& text)
- : QGraphicsTextItem(text)
- , mUnelidedText(text)
- , mIsHighlighted(false)
- {
- setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
- }
-
- QRectF boundingRect() const { return QRectF(QPointF(0.0, 0.0), QSize(mWidth, QFontMetricsF(font()).height() + 5));}
-
- void setWidth(qreal pWidth)
- {
- if (mWidth != pWidth)
- {
- prepareGeometryChange();
- mWidth = pWidth;
- computeText();
- }
- };
-
- qreal width() {return mWidth;}
-
- void highlight()
- {
- if (!mIsHighlighted)
- {
- mIsHighlighted = true;
- computeText();
- }
- }
-
- void computeText()
- {
- QFontMetricsF fm(font());
- QString elidedText = fm.elidedText(mUnelidedText, Qt::ElideRight, mWidth);
-
- if (mIsHighlighted)
- {
- setHtml("<span style=\"color: #6682b5\">" + elidedText + "</span>");
- }
- else
- {
- setPlainText(elidedText);
- }
- }
-
- private:
- qreal mWidth;
- QString mUnelidedText;
- bool mIsHighlighted;
-};
-
-class UBImgTextThumbnailElement
-{
-private:
- UBSceneThumbnailNavigPixmap* thumbnail;
- UBThumbnailTextItem* caption;
- int border;
-
-public:
- UBImgTextThumbnailElement(UBSceneThumbnailNavigPixmap* thumb, UBThumbnailTextItem* text): border(0)
- {
- this->thumbnail = thumb;
- this->caption = text;
- }
-
- UBSceneThumbnailNavigPixmap* getThumbnail() const { return this->thumbnail; }
- void setThumbnail(UBSceneThumbnailNavigPixmap* newGItem) { this->thumbnail = newGItem; }
-
- UBThumbnailTextItem* getCaption() const { return this->caption; }
- void setCaption(UBThumbnailTextItem* newcaption) { this->caption = newcaption; }
-
- void Place(int row, int col, qreal width, qreal height);
-
- int getBorder() const { return this->border; }
- void setBorder(int newBorder) { this->border = newBorder; }
-};
-
-
-#endif /* UBTHUMBNAILWIDGET_H_ */
+
+
+
+#ifndef UBTHUMBNAILWIDGET_H_
+#define UBTHUMBNAILWIDGET_H_
+
+#include <QtGui>
+#include <QtSvg>
+#include <QTime>
+#include <QGraphicsSceneHoverEvent>
+
+#include "frameworks/UBCoreGraphicsScene.h"
+#include "core/UBSettings.h"
+#include "domain/UBItem.h"
+
+#define STARTDRAGTIME 1000000
+#define BUTTONSIZE 48
+#define BUTTONSPACING 5
+
+class UBDocumentProxy;
+class UBThumbnailTextItem;
+class UBThumbnail;
+
+class UBThumbnailWidget : public QGraphicsView
+{
+ Q_OBJECT
+
+ public:
+ UBThumbnailWidget(QWidget* parent);
+ virtual ~UBThumbnailWidget();
+
+ QList<QGraphicsItem*> selectedItems();
+ void selectItemAt(int pIndex, bool extend = false);
+ void unselectItemAt(int pIndex);
+
+ qreal thumbnailWidth()
+ {
+ return mThumbnailWidth;
+ }
+
+ void setBackgroundBrush(const QBrush& brush)
+ {
+ mThumbnailsScene.setBackgroundBrush(brush);
+ }
+
+ public slots:
+ void setThumbnailWidth(qreal pThumbnailWidth);
+ void setSpacing(qreal pSpacing);
+ virtual void setGraphicsItems(const QList<QGraphicsItem*>& pGraphicsItems, const QList<QUrl>& pItemPaths, const QStringList pLabels = QStringList(), const QString& pMimeType = QString(""));
+ void refreshScene();
+ void sceneSelectionChanged();
+
+ signals:
+ void resized();
+ void selectionChanged();
+ void mouseDoubleClick(QGraphicsItem* item, int index);
+ void mouseClick(QGraphicsItem* item, int index);
+
+
+ protected:
+ virtual void mousePressEvent(QMouseEvent *event);
+ virtual void mouseMoveEvent(QMouseEvent *event);
+ virtual void mouseReleaseEvent(QMouseEvent *event);
+ virtual void resizeEvent(QResizeEvent * event);
+ void mouseDoubleClickEvent(QMouseEvent * event);
+
+ virtual void keyPressEvent(QKeyEvent *event);
+ virtual void focusInEvent(QFocusEvent *event);
+
+ QList<QGraphicsItem*> mGraphicItems;
+ QList<UBThumbnailTextItem*> mLabelsItems;
+ QPointF mMousePressScenePos;
+ QPoint mMousePressPos;
+
+ protected:
+ qreal spacing() { return mSpacing; }
+ QList<QUrl> mItemsPaths;
+ QStringList mLabels;
+ bool bSelectionInProgress;
+ bool bCanDrag;
+
+ private:
+ void selectAll();
+ void selectItems(int startIndex, int count);
+ int rowCount() const;
+ int columnCount() const;
+
+ static bool thumbnailLessThan(QGraphicsItem* item1, QGraphicsItem* item2);
+
+ void deleteLasso();
+
+ UBCoreGraphicsScene mThumbnailsScene;
+
+ QString mMimeType;
+
+ QPointF prevMoveMousePos;
+
+ qreal mThumbnailWidth;
+ qreal mThumbnailHeight;
+ qreal mSpacing;
+
+ UBThumbnail *mLastSelectedThumbnail;
+ int mSelectionSpan;
+ QRectF mPrevLassoRect;
+ QGraphicsRectItem *mLassoRectItem;
+ QSet<QGraphicsItem*> mSelectedThumbnailItems;
+ QSet<QGraphicsItem*> mPreviouslyIncrementalSelectedItemsX;
+ QSet<QGraphicsItem*> mPreviouslyIncrementalSelectedItemsY;
+ QTime mClickTime;
+};
+
+
+class UBThumbnail
+{
+ public:
+ UBThumbnail();
+
+ virtual ~UBThumbnail();
+
+ QStyleOptionGraphicsItem muteStyleOption(const QStyleOptionGraphicsItem *option)
+ {
+ // Never draw the rubber band, we draw our custom selection with the DelegateFrame
+ QStyleOptionGraphicsItem styleOption = QStyleOptionGraphicsItem(*option);
+ styleOption.state &= ~QStyle::State_Selected;
+
+ return styleOption;
+ }
+
+ virtual void itemChange(QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const QVariant &value);
+
+ UBThumbnailTextItem *label(){return mLabel;}
+ void setLabel(UBThumbnailTextItem *label){mLabel = label;}
+ int column() { return mColumn; }
+ void setColumn(int column) { mColumn = column; }
+ int row() { return mRow; }
+ void setRow(int row) { mRow = row; }
+
+ protected:
+ QGraphicsRectItem *mSelectionItem;
+ private:
+ bool mAddedToScene;
+
+ int mColumn;
+ int mRow;
+
+ UBThumbnailTextItem *mLabel;
+};
+
+
+class UBThumbnailSvg : public QGraphicsSvgItem, public UBThumbnail
+{
+ public:
+ UBThumbnailSvg(const QString& path)
+ : QGraphicsSvgItem(path)
+ {
+ setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
+ }
+
+ virtual ~UBThumbnailSvg()
+ {
+ // NOOP
+ }
+
+ virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+ {
+ QStyleOptionGraphicsItem styleOption = UBThumbnail::muteStyleOption(option);
+ QGraphicsSvgItem::paint(painter, &styleOption, widget);
+ }
+
+ virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value)
+ {
+ UBThumbnail::itemChange(this, change, value);
+ return QGraphicsSvgItem::itemChange(change, value);
+ }
+
+};
+
+
+class UBThumbnailPixmap : public QGraphicsPixmapItem, public UBThumbnail
+{
+ public:
+ UBThumbnailPixmap(const QPixmap& pix)
+ : QGraphicsPixmapItem(pix)
+ {
+ setTransformationMode(Qt::SmoothTransformation); // UB 4.3 may be expensive -- make configurable
+ setShapeMode(QGraphicsPixmapItem::BoundingRectShape);
+ setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
+ }
+
+ virtual ~UBThumbnailPixmap()
+ {
+ // NOOP
+ }
+
+ virtual QPainterPath shape () const
+ {
+ QPainterPath path;
+ path.addRect(boundingRect());
+ return path;
+ }
+
+
+ virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+ {
+ QStyleOptionGraphicsItem styleOption = UBThumbnail::muteStyleOption(option);
+ QGraphicsPixmapItem::paint(painter, &styleOption, widget);
+ }
+
+ virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value)
+ {
+ UBThumbnail::itemChange(this, change, value);
+ return QGraphicsPixmapItem::itemChange(change, value);
+ }
+};
+
+
+class UBSceneThumbnailPixmap : public UBThumbnailPixmap
+{
+ public:
+ UBSceneThumbnailPixmap(const QPixmap& pix, UBDocumentProxy* proxy, int pSceneIndex)
+ : UBThumbnailPixmap(pix)
+ , mProxy(proxy)
+ , mSceneIndex(pSceneIndex)
+ {
+ // NOOP
+ }
+
+ virtual ~UBSceneThumbnailPixmap();
+
+ UBDocumentProxy* proxy()
+ {
+ return mProxy;
+ }
+
+ int sceneIndex()
+ {
+ return mSceneIndex;
+ }
+
+ private:
+ UBDocumentProxy* mProxy;
+ int mSceneIndex;
+};
+
+class UBSceneThumbnailNavigPixmap : public UBSceneThumbnailPixmap
+{
+ public:
+ UBSceneThumbnailNavigPixmap(const QPixmap& pix, UBDocumentProxy* proxy, int pSceneIndex);
+ ~UBSceneThumbnailNavigPixmap();
+
+ protected:
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+ void mousePressEvent(QGraphicsSceneMouseEvent *event);
+
+ private:
+ void updateButtonsState();
+ void deletePage();
+ void duplicatePage();
+ void moveUpPage();
+ void moveDownPage();
+
+ bool bButtonsVisible;
+ bool bCanDelete;
+ bool bCanMoveUp;
+ bool bCanMoveDown;
+ bool bCanDuplicate;
+};
+
+class UBThumbnailVideo : public UBThumbnailPixmap
+{
+ public:
+ UBThumbnailVideo(const QUrl &path)
+ : UBThumbnailPixmap(QPixmap(":/images/movie.svg"))
+ , mPath(path)
+ {
+ // NOOP
+ }
+
+ virtual ~UBThumbnailVideo()
+ {
+ // NOOP
+ }
+
+ QUrl path()
+ {
+ return mPath;
+ }
+
+ private:
+
+ QUrl mPath;
+};
+
+class UBThumbnailTextItem : public QGraphicsTextItem
+{
+ public:
+ UBThumbnailTextItem(const QString& text)
+ : QGraphicsTextItem(text)
+ , mUnelidedText(text)
+ , mIsHighlighted(true)
+ {
+ setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
+ }
+
+ QRectF boundingRect() const { return QRectF(QPointF(0.0, 0.0), QSize(mWidth, QFontMetricsF(font()).height() + 5));}
+
+ void setWidth(qreal pWidth)
+ {
+ if (mWidth != pWidth)
+ {
+ prepareGeometryChange();
+ mWidth = pWidth;
+ computeText();
+ }
+ };
+
+ qreal width() {return mWidth;}
+
+ void highlight(bool enable = true)
+ {
+ mIsHighlighted = enable;
+ computeText();
+ }
+
+ void computeText()
+ {
+ QFontMetricsF fm(font());
+ QString elidedText = fm.elidedText(mUnelidedText, Qt::ElideRight, mWidth);
+
+ if (mIsHighlighted)
+ {
+ setHtml("<span style=\"color: #6682b5\">" + elidedText + "</span>");
+ }
+ else
+ {
+ setPlainText(elidedText);
+ }
+ }
+
+ private:
+ qreal mWidth;
+ QString mUnelidedText;
+ bool mIsHighlighted;
+};
+
+class UBImgTextThumbnailElement
+{
+private:
+ UBSceneThumbnailNavigPixmap* thumbnail;
+ UBThumbnailTextItem* caption;
+ int border;
+
+public:
+ UBImgTextThumbnailElement(UBSceneThumbnailNavigPixmap* thumb, UBThumbnailTextItem* text): border(0)
+ {
+ this->thumbnail = thumb;
+ this->caption = text;
+ }
+
+ UBSceneThumbnailNavigPixmap* getThumbnail() const { return this->thumbnail; }
+ void setThumbnail(UBSceneThumbnailNavigPixmap* newGItem) { this->thumbnail = newGItem; }
+
+ UBThumbnailTextItem* getCaption() const { return this->caption; }
+ void setCaption(UBThumbnailTextItem* newcaption) { this->caption = newcaption; }
+
+ void Place(int row, int col, qreal width, qreal height);
+
+ int getBorder() const { return this->border; }
+ void setBorder(int newBorder) { this->border = newBorder; }
+};
+
+
+#endif /* UBTHUMBNAILWIDGET_H_ */
diff --git a/Sankore-3.1/src/gui/UBToolWidget.cpp b/Sankore-3.1/src/gui/UBToolWidget.cpp
index 53a73e1..4f9667e 100644
--- a/Sankore-3.1/src/gui/UBToolWidget.cpp
+++ b/Sankore-3.1/src/gui/UBToolWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include "UBToolWidget.h"
#include "api/UBWidgetUniboardAPI.h"
diff --git a/Sankore-3.1/src/gui/UBToolWidget.h b/Sankore-3.1/src/gui/UBToolWidget.h
index 740ae25..699fc47 100644
--- a/Sankore-3.1/src/gui/UBToolWidget.h
+++ b/Sankore-3.1/src/gui/UBToolWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBTOOLWIDGET_H_
#define UBTOOLWIDGET_H_
diff --git a/Sankore-3.1/src/gui/UBToolbarButtonGroup.cpp b/Sankore-3.1/src/gui/UBToolbarButtonGroup.cpp
index 580832b..4a4a17f 100644
--- a/Sankore-3.1/src/gui/UBToolbarButtonGroup.cpp
+++ b/Sankore-3.1/src/gui/UBToolbarButtonGroup.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBToolbarButtonGroup.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/gui/UBToolbarButtonGroup.h b/Sankore-3.1/src/gui/UBToolbarButtonGroup.h
index 1623ca5..74398e1 100644
--- a/Sankore-3.1/src/gui/UBToolbarButtonGroup.h
+++ b/Sankore-3.1/src/gui/UBToolbarButtonGroup.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBTOOLBARBUTTONGROUP_H_
#define UBTOOLBARBUTTONGROUP_H_
diff --git a/Sankore-3.1/src/gui/UBUpdateDlg.cpp b/Sankore-3.1/src/gui/UBUpdateDlg.cpp
index 7a16b34..76af8c2 100644
--- a/Sankore-3.1/src/gui/UBUpdateDlg.cpp
+++ b/Sankore-3.1/src/gui/UBUpdateDlg.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QFileDialog>
#include "UBUpdateDlg.h"
diff --git a/Sankore-3.1/src/gui/UBUpdateDlg.h b/Sankore-3.1/src/gui/UBUpdateDlg.h
index 6fdb6c3..fdf509d 100644
--- a/Sankore-3.1/src/gui/UBUpdateDlg.h
+++ b/Sankore-3.1/src/gui/UBUpdateDlg.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBUPDATEDLG_H
#define UBUPDATEDLG_H
diff --git a/Sankore-3.1/src/gui/UBVideoPlayer.cpp b/Sankore-3.1/src/gui/UBVideoPlayer.cpp
index bcb94a0..e183189 100644
--- a/Sankore-3.1/src/gui/UBVideoPlayer.cpp
+++ b/Sankore-3.1/src/gui/UBVideoPlayer.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBVideoPlayer.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/gui/UBVideoPlayer.h b/Sankore-3.1/src/gui/UBVideoPlayer.h
index 5e7e91b..27c5f57 100644
--- a/Sankore-3.1/src/gui/UBVideoPlayer.h
+++ b/Sankore-3.1/src/gui/UBVideoPlayer.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBVIDEOPLAYER_H_
#define UBVIDEOPLAYER_H_
diff --git a/Sankore-3.1/src/gui/UBWebToolsPalette.cpp b/Sankore-3.1/src/gui/UBWebToolsPalette.cpp
index 87aeda3..aee5965 100644
--- a/Sankore-3.1/src/gui/UBWebToolsPalette.cpp
+++ b/Sankore-3.1/src/gui/UBWebToolsPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include "frameworks/UBPlatformUtils.h"
@@ -45,12 +46,12 @@ UBWebToolsPalette::UBWebToolsPalette(QWidget *parent,bool tutorialMode=false)
actions << UBApplication::mainWindow->actionBoard;
}
else{
- actions << UBApplication::mainWindow->actionWebTrapFlash;
//actions << UBApplication::mainWindow->actionWebTrap;
+ actions << UBApplication::mainWindow->actionWebTrapContent;
+
actions << UBApplication::mainWindow->actionWebCustomCapture;
actions << UBApplication::mainWindow->actionWebWindowCapture;
- actions << UBApplication::mainWindow->actionWebOEmbed;
//actions << UBApplication::mainWindow->actionEduMedia;
diff --git a/Sankore-3.1/src/gui/UBWebToolsPalette.h b/Sankore-3.1/src/gui/UBWebToolsPalette.h
index 82c7721..974d2f6 100644
--- a/Sankore-3.1/src/gui/UBWebToolsPalette.h
+++ b/Sankore-3.1/src/gui/UBWebToolsPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWEBTOOLSPALLETTE_H_
#define UBWEBTOOLSPALLETTE_H_
diff --git a/Sankore-3.1/src/gui/UBWidgetMirror.cpp b/Sankore-3.1/src/gui/UBWidgetMirror.cpp
index 7ff21ea..4d833d3 100644
--- a/Sankore-3.1/src/gui/UBWidgetMirror.cpp
+++ b/Sankore-3.1/src/gui/UBWidgetMirror.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBWidgetMirror.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/gui/UBWidgetMirror.h b/Sankore-3.1/src/gui/UBWidgetMirror.h
index 64774dc..dee3037 100644
--- a/Sankore-3.1/src/gui/UBWidgetMirror.h
+++ b/Sankore-3.1/src/gui/UBWidgetMirror.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWIDGETMIRROR_H_
#define UBWIDGETMIRROR_H_
diff --git a/Sankore-3.1/src/gui/UBZoomPalette.cpp b/Sankore-3.1/src/gui/UBZoomPalette.cpp
index 15a70ff..70de5e0 100644
--- a/Sankore-3.1/src/gui/UBZoomPalette.cpp
+++ b/Sankore-3.1/src/gui/UBZoomPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBZoomPalette.h"
#include <QtGui>
@@ -70,13 +71,13 @@ void UBZoomPalette::showHideExtraButton()
{
mHundredButton->setVisible(false);
mIsExpanded = false;
- adjustSizeAndPosition(false);
+ adjustSizeAndPosition(false,false);
}
else
{
mHundredButton->setVisible(true);
mIsExpanded = true;
- adjustSizeAndPosition(true);
+ adjustSizeAndPosition(true,false);
}
}
@@ -108,7 +109,7 @@ void UBZoomPalette::refreshPalette()
QString stringFactor = tr("%1 x").arg(currentZoomFactor, 0, 'f', 1);
mCurrentZoomButton->setText(stringFactor);
- adjustSizeAndPosition();
+ adjustSizeAndPosition(true,false);
if (showAsNoZoom)
{
QTimer::singleShot(500, this, SLOT(hide()));
diff --git a/Sankore-3.1/src/gui/UBZoomPalette.h b/Sankore-3.1/src/gui/UBZoomPalette.h
index f83ba10..f8c3fc9 100644
--- a/Sankore-3.1/src/gui/UBZoomPalette.h
+++ b/Sankore-3.1/src/gui/UBZoomPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBZOOMPALETTE_H_
#define UBZOOMPALETTE_H_
diff --git a/Sankore-3.1/src/gui/gui.pri b/Sankore-3.1/src/gui/gui.pri
index 56f457a..0134c14 100644
--- a/Sankore-3.1/src/gui/gui.pri
+++ b/Sankore-3.1/src/gui/gui.pri
@@ -43,7 +43,9 @@ HEADERS += src/gui/UBThumbnailView.h \
src/gui/UBDockTeacherGuideWidget.h \
src/gui/UBTeacherGuideWidget.h \
src/gui/UBTeacherGuideWidgetsTools.h \
- src/gui/UBMessagesDialog.h
+ src/gui/UBMessagesDialog.h \
+ src/gui/UBStartupHintsPalette.h \
+ src/gui/UBCreateLinkPalette.h
SOURCES += src/gui/UBThumbnailView.cpp \
src/gui/UBFloatingPalette.cpp \
src/gui/UBToolbarButtonGroup.cpp \
@@ -89,9 +91,9 @@ SOURCES += src/gui/UBThumbnailView.cpp \
src/gui/UBDockTeacherGuideWidget.cpp \
src/gui/UBTeacherGuideWidget.cpp \
src/gui/UBTeacherGuideWidgetsTools.cpp \
- src/gui/UBMessagesDialog.cpp
+ src/gui/UBMessagesDialog.cpp \
+ src/gui/UBStartupHintsPalette.cpp \
+ src/gui/UBCreateLinkPalette.cpp
win32:SOURCES += src/gui/UBKeyboardPalette_win.cpp
macx:SOURCES += src/gui/UBKeyboardPalette_mac.cpp
-linux-g++:SOURCES += src/gui/UBKeyboardPalette_linux.cpp
-linux-g++-32:SOURCES += src/gui/UBKeyboardPalette_linux.cpp
-linux-g++-64:SOURCES += src/gui/UBKeyboardPalette_linux.cpp
+linux-*:SOURCES += src/gui/UBKeyboardPalette_linux.cpp
diff --git a/Sankore-3.1/src/interfaces/IDataStorage.h b/Sankore-3.1/src/interfaces/IDataStorage.h
index e8bd50e..35921db 100644
--- a/Sankore-3.1/src/interfaces/IDataStorage.h
+++ b/Sankore-3.1/src/interfaces/IDataStorage.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef IDATASTORAGE_H
#define IDATASTORAGE_H
diff --git a/Sankore-3.1/src/network/UBAutoSaver.cpp b/Sankore-3.1/src/network/UBAutoSaver.cpp
index 686fc50..b2760e1 100644
--- a/Sankore-3.1/src/network/UBAutoSaver.cpp
+++ b/Sankore-3.1/src/network/UBAutoSaver.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/network/UBAutoSaver.h b/Sankore-3.1/src/network/UBAutoSaver.h
index 6d557ef..d886f1f 100644
--- a/Sankore-3.1/src/network/UBAutoSaver.h
+++ b/Sankore-3.1/src/network/UBAutoSaver.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/network/UBCookieJar.cpp b/Sankore-3.1/src/network/UBCookieJar.cpp
index cc6acbe..4ec2d58 100644
--- a/Sankore-3.1/src/network/UBCookieJar.cpp
+++ b/Sankore-3.1/src/network/UBCookieJar.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/network/UBCookieJar.h b/Sankore-3.1/src/network/UBCookieJar.h
index bbed90b..0a4cea1 100644
--- a/Sankore-3.1/src/network/UBCookieJar.h
+++ b/Sankore-3.1/src/network/UBCookieJar.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/network/UBHttpFileDownloader.cpp b/Sankore-3.1/src/network/UBHttpFileDownloader.cpp
index 8f947ce..35ea75e 100644
--- a/Sankore-3.1/src/network/UBHttpFileDownloader.cpp
+++ b/Sankore-3.1/src/network/UBHttpFileDownloader.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBHttpFileDownloader.h"
#include "network/UBNetworkAccessManager.h"
diff --git a/Sankore-3.1/src/network/UBHttpFileDownloader.h b/Sankore-3.1/src/network/UBHttpFileDownloader.h
index 2342bfb..5bc4c3d 100644
--- a/Sankore-3.1/src/network/UBHttpFileDownloader.h
+++ b/Sankore-3.1/src/network/UBHttpFileDownloader.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBHTTPFILEDOWNLOADER_H_
#define UBHTTPFILEDOWNLOADER_H_
diff --git a/Sankore-3.1/src/network/UBHttpGet.cpp b/Sankore-3.1/src/network/UBHttpGet.cpp
index a990123..30c0941 100644
--- a/Sankore-3.1/src/network/UBHttpGet.cpp
+++ b/Sankore-3.1/src/network/UBHttpGet.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBHttpGet.h"
#include <QtNetwork>
diff --git a/Sankore-3.1/src/network/UBHttpGet.h b/Sankore-3.1/src/network/UBHttpGet.h
index 4d13dd6..08a0abd 100644
--- a/Sankore-3.1/src/network/UBHttpGet.h
+++ b/Sankore-3.1/src/network/UBHttpGet.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBHTTPGET_H_
#define UBHTTPGET_H_
diff --git a/Sankore-3.1/src/network/UBNetworkAccessManager.cpp b/Sankore-3.1/src/network/UBNetworkAccessManager.cpp
index c6a0127..71f8d0c 100644
--- a/Sankore-3.1/src/network/UBNetworkAccessManager.cpp
+++ b/Sankore-3.1/src/network/UBNetworkAccessManager.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBNetworkAccessManager.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/network/UBNetworkAccessManager.h b/Sankore-3.1/src/network/UBNetworkAccessManager.h
index 5b68110..5389266 100644
--- a/Sankore-3.1/src/network/UBNetworkAccessManager.h
+++ b/Sankore-3.1/src/network/UBNetworkAccessManager.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBNETWORKACCESSMANAGER_H
#define UBNETWORKACCESSMANAGER_H
diff --git a/Sankore-3.1/src/network/UBServerXMLHttpRequest.cpp b/Sankore-3.1/src/network/UBServerXMLHttpRequest.cpp
index b8fbbc2..b3ae2b9 100644
--- a/Sankore-3.1/src/network/UBServerXMLHttpRequest.cpp
+++ b/Sankore-3.1/src/network/UBServerXMLHttpRequest.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBServerXMLHttpRequest.h"
#include <QtCore>
diff --git a/Sankore-3.1/src/network/UBServerXMLHttpRequest.h b/Sankore-3.1/src/network/UBServerXMLHttpRequest.h
index f9f5ffc..6905bcf 100644
--- a/Sankore-3.1/src/network/UBServerXMLHttpRequest.h
+++ b/Sankore-3.1/src/network/UBServerXMLHttpRequest.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBSERVERXMLHTTPREQUEST_H_
#define UBSERVERXMLHTTPREQUEST_H_
diff --git a/Sankore-3.1/src/pdf-merger/ASCII85Decode.cpp b/Sankore-3.1/src/pdf-merger/ASCII85Decode.cpp
index a14b30e..fd26a4c 100644
--- a/Sankore-3.1/src/pdf-merger/ASCII85Decode.cpp
+++ b/Sankore-3.1/src/pdf-merger/ASCII85Decode.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <iostream>
#include <QtGlobal>
#include "ASCII85Decode.h"
diff --git a/Sankore-3.1/src/pdf-merger/ASCII85Decode.h b/Sankore-3.1/src/pdf-merger/ASCII85Decode.h
index 542ce9d..85c1ecd 100644
--- a/Sankore-3.1/src/pdf-merger/ASCII85Decode.h
+++ b/Sankore-3.1/src/pdf-merger/ASCII85Decode.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef ASCII85Decode_H
#define ASCII85Decode_H
diff --git a/Sankore-3.1/src/pdf-merger/ASCIIHexDecode.cpp b/Sankore-3.1/src/pdf-merger/ASCIIHexDecode.cpp
index 922aee4..c2c6bba 100644
--- a/Sankore-3.1/src/pdf-merger/ASCIIHexDecode.cpp
+++ b/Sankore-3.1/src/pdf-merger/ASCIIHexDecode.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "ASCIIHexDecode.h"
#include <QtGlobal>
#include <string>
diff --git a/Sankore-3.1/src/pdf-merger/ASCIIHexDecode.h b/Sankore-3.1/src/pdf-merger/ASCIIHexDecode.h
index 895ed60..ef0a89d 100644
--- a/Sankore-3.1/src/pdf-merger/ASCIIHexDecode.h
+++ b/Sankore-3.1/src/pdf-merger/ASCIIHexDecode.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef ASCIIHexDecode_h
#define ASCIIHexDecode_h
diff --git a/Sankore-3.1/src/pdf-merger/AbstractBoxElementHandler.h b/Sankore-3.1/src/pdf-merger/AbstractBoxElementHandler.h
index eeb7630..861b0df 100644
--- a/Sankore-3.1/src/pdf-merger/AbstractBoxElementHandler.h
+++ b/Sankore-3.1/src/pdf-merger/AbstractBoxElementHandler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined AbstractBoxElementHandler_h
#define AbstractBoxElementHandler_h
diff --git a/Sankore-3.1/src/pdf-merger/AnnotsHandler.cpp b/Sankore-3.1/src/pdf-merger/AnnotsHandler.cpp
index cca2da0..34794b5 100644
--- a/Sankore-3.1/src/pdf-merger/AnnotsHandler.cpp
+++ b/Sankore-3.1/src/pdf-merger/AnnotsHandler.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "AnnotsHandler.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/pdf-merger/AnnotsHandler.h b/Sankore-3.1/src/pdf-merger/AnnotsHandler.h
index 4f8fadd..8f7270f 100644
--- a/Sankore-3.1/src/pdf-merger/AnnotsHandler.h
+++ b/Sankore-3.1/src/pdf-merger/AnnotsHandler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined AnnotsHandler_h
#define AnnotsHandler_h
diff --git a/Sankore-3.1/src/pdf-merger/CCITTFaxDecode.cpp b/Sankore-3.1/src/pdf-merger/CCITTFaxDecode.cpp
index b3fcad0..7da883c 100644
--- a/Sankore-3.1/src/pdf-merger/CCITTFaxDecode.cpp
+++ b/Sankore-3.1/src/pdf-merger/CCITTFaxDecode.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGlobal>
#include "CCITTFaxDecode.h"
diff --git a/Sankore-3.1/src/pdf-merger/CCITTFaxDecode.h b/Sankore-3.1/src/pdf-merger/CCITTFaxDecode.h
index d70390d..a69b2a0 100644
--- a/Sankore-3.1/src/pdf-merger/CCITTFaxDecode.h
+++ b/Sankore-3.1/src/pdf-merger/CCITTFaxDecode.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef CCITTFaxDecode_H
#define CCITTFaxDecode_H
diff --git a/Sankore-3.1/src/pdf-merger/Config.h b/Sankore-3.1/src/pdf-merger/Config.h
index 600104b..dac1d4c 100644
--- a/Sankore-3.1/src/pdf-merger/Config.h
+++ b/Sankore-3.1/src/pdf-merger/Config.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/*
This file provides some common configuration definitions for PDF merge library
Is intended for multiplatform support
diff --git a/Sankore-3.1/src/pdf-merger/ContentHandler.cpp b/Sankore-3.1/src/pdf-merger/ContentHandler.cpp
index 36b07bb..973cda8 100644
--- a/Sankore-3.1/src/pdf-merger/ContentHandler.cpp
+++ b/Sankore-3.1/src/pdf-merger/ContentHandler.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "ContentHandler.h"
#include "Filter.h"
#include "FlateDecode.h"
diff --git a/Sankore-3.1/src/pdf-merger/ContentHandler.h b/Sankore-3.1/src/pdf-merger/ContentHandler.h
index d4bcfd5..b8e4a02 100644
--- a/Sankore-3.1/src/pdf-merger/ContentHandler.h
+++ b/Sankore-3.1/src/pdf-merger/ContentHandler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined ContentHandler_h
#define ContentHandler_h
diff --git a/Sankore-3.1/src/pdf-merger/CropBoxElementHandler.h b/Sankore-3.1/src/pdf-merger/CropBoxElementHandler.h
index 218f9b9..b6cda1e 100644
--- a/Sankore-3.1/src/pdf-merger/CropBoxElementHandler.h
+++ b/Sankore-3.1/src/pdf-merger/CropBoxElementHandler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef CROPBOX_ELEMENT_HANDLER_H
#define CROPBOX_ELEMENT_HANDLER_H
diff --git a/Sankore-3.1/src/pdf-merger/DCTDecode.cpp b/Sankore-3.1/src/pdf-merger/DCTDecode.cpp
index 904f95b..029dc62 100644
--- a/Sankore-3.1/src/pdf-merger/DCTDecode.cpp
+++ b/Sankore-3.1/src/pdf-merger/DCTDecode.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGlobal>
#include "DCTDecode.h"
diff --git a/Sankore-3.1/src/pdf-merger/DCTDecode.h b/Sankore-3.1/src/pdf-merger/DCTDecode.h
index bed9811..06ff0f6 100644
--- a/Sankore-3.1/src/pdf-merger/DCTDecode.h
+++ b/Sankore-3.1/src/pdf-merger/DCTDecode.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef DCTDecode_H
#define DCTDecode_H
diff --git a/Sankore-3.1/src/pdf-merger/Decoder.h b/Sankore-3.1/src/pdf-merger/Decoder.h
index 634c41f..2988b2b 100644
--- a/Sankore-3.1/src/pdf-merger/Decoder.h
+++ b/Sankore-3.1/src/pdf-merger/Decoder.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef DECODER_H
#define DECODER_H
diff --git a/Sankore-3.1/src/pdf-merger/Document.cpp b/Sankore-3.1/src/pdf-merger/Document.cpp
index 82ad96a..53c312d 100644
--- a/Sankore-3.1/src/pdf-merger/Document.cpp
+++ b/Sankore-3.1/src/pdf-merger/Document.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "Config.h"
#include "Document.h"
#include "FlateDecode.h"
diff --git a/Sankore-3.1/src/pdf-merger/Document.h b/Sankore-3.1/src/pdf-merger/Document.h
index ddc5d03..227bfc2 100644
--- a/Sankore-3.1/src/pdf-merger/Document.h
+++ b/Sankore-3.1/src/pdf-merger/Document.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined Document_h
#define Document_h
diff --git a/Sankore-3.1/src/pdf-merger/Exception.h b/Sankore-3.1/src/pdf-merger/Exception.h
index b2f6990..c83c6e8 100644
--- a/Sankore-3.1/src/pdf-merger/Exception.h
+++ b/Sankore-3.1/src/pdf-merger/Exception.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef EXCEPTION_H
#define EXCEPTION_H
diff --git a/Sankore-3.1/src/pdf-merger/FileIsAbsentException.h b/Sankore-3.1/src/pdf-merger/FileIsAbsentException.h
index d1ac8ad..b664971 100644
--- a/Sankore-3.1/src/pdf-merger/FileIsAbsentException.h
+++ b/Sankore-3.1/src/pdf-merger/FileIsAbsentException.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined FileIsAbsentException_h
#define FileIsAbsentException_h
diff --git a/Sankore-3.1/src/pdf-merger/Filter.cpp b/Sankore-3.1/src/pdf-merger/Filter.cpp
index 5988125..3800bf0 100644
--- a/Sankore-3.1/src/pdf-merger/Filter.cpp
+++ b/Sankore-3.1/src/pdf-merger/Filter.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "Filter.h"
#include "Object.h"
#include "Decoder.h"
diff --git a/Sankore-3.1/src/pdf-merger/Filter.h b/Sankore-3.1/src/pdf-merger/Filter.h
index d2e18e6..0a1f202 100644
--- a/Sankore-3.1/src/pdf-merger/Filter.h
+++ b/Sankore-3.1/src/pdf-merger/Filter.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined Filter_h
#define Filter_h
diff --git a/Sankore-3.1/src/pdf-merger/FilterPredictor.cpp b/Sankore-3.1/src/pdf-merger/FilterPredictor.cpp
index 2bb063f..a31d023 100644
--- a/Sankore-3.1/src/pdf-merger/FilterPredictor.cpp
+++ b/Sankore-3.1/src/pdf-merger/FilterPredictor.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "Config.h"
#include <iostream>
#include <map>
diff --git a/Sankore-3.1/src/pdf-merger/FilterPredictor.h b/Sankore-3.1/src/pdf-merger/FilterPredictor.h
index 9daddc3..28afbd6 100644
--- a/Sankore-3.1/src/pdf-merger/FilterPredictor.h
+++ b/Sankore-3.1/src/pdf-merger/FilterPredictor.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef FILTER_PREDICTOR_H
#define FILTER_PREDICTOR_H
diff --git a/Sankore-3.1/src/pdf-merger/FlateDecode.cpp b/Sankore-3.1/src/pdf-merger/FlateDecode.cpp
index 83c98bd..a2215c4 100644
--- a/Sankore-3.1/src/pdf-merger/FlateDecode.cpp
+++ b/Sankore-3.1/src/pdf-merger/FlateDecode.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <iostream>
#include "FlateDecode.h"
diff --git a/Sankore-3.1/src/pdf-merger/FlateDecode.h b/Sankore-3.1/src/pdf-merger/FlateDecode.h
index 3f063fd..8ec75e9 100644
--- a/Sankore-3.1/src/pdf-merger/FlateDecode.h
+++ b/Sankore-3.1/src/pdf-merger/FlateDecode.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef FLATEDECODE_H_INCLUDED
#define FLATEDECODE_H_INCLUDED
diff --git a/Sankore-3.1/src/pdf-merger/JBIG2Decode.cpp b/Sankore-3.1/src/pdf-merger/JBIG2Decode.cpp
index c8111e8..92f1c7d 100644
--- a/Sankore-3.1/src/pdf-merger/JBIG2Decode.cpp
+++ b/Sankore-3.1/src/pdf-merger/JBIG2Decode.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGlobal>
#include "JBIG2Decode.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/pdf-merger/JBIG2Decode.h b/Sankore-3.1/src/pdf-merger/JBIG2Decode.h
index 559e607..4d9b72f 100644
--- a/Sankore-3.1/src/pdf-merger/JBIG2Decode.h
+++ b/Sankore-3.1/src/pdf-merger/JBIG2Decode.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef JBIG2Decode_H
#define JBIG2Decode_H
diff --git a/Sankore-3.1/src/pdf-merger/LZWDecode.cpp b/Sankore-3.1/src/pdf-merger/LZWDecode.cpp
index cdb632a..3a57a5c 100644
--- a/Sankore-3.1/src/pdf-merger/LZWDecode.cpp
+++ b/Sankore-3.1/src/pdf-merger/LZWDecode.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <iostream>
#include <QtGlobal>
#include "LZWDecode.h"
diff --git a/Sankore-3.1/src/pdf-merger/LZWDecode.h b/Sankore-3.1/src/pdf-merger/LZWDecode.h
index 4acccf9..593a886 100644
--- a/Sankore-3.1/src/pdf-merger/LZWDecode.h
+++ b/Sankore-3.1/src/pdf-merger/LZWDecode.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef LZWDecode_H
#define LZWDecode_H
diff --git a/Sankore-3.1/src/pdf-merger/MediaBoxElementHandler.h b/Sankore-3.1/src/pdf-merger/MediaBoxElementHandler.h
index f33afe3..fb2af5b 100644
--- a/Sankore-3.1/src/pdf-merger/MediaBoxElementHandler.h
+++ b/Sankore-3.1/src/pdf-merger/MediaBoxElementHandler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined MediaBoxElementHandler_h
#define MediaBoxElementHandler_h
diff --git a/Sankore-3.1/src/pdf-merger/MergePageDescription.h b/Sankore-3.1/src/pdf-merger/MergePageDescription.h
index 1077b9f..f9fee16 100644
--- a/Sankore-3.1/src/pdf-merger/MergePageDescription.h
+++ b/Sankore-3.1/src/pdf-merger/MergePageDescription.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined MergePageDescription_h
#define MergePageDescription_h
diff --git a/Sankore-3.1/src/pdf-merger/Merger.cpp b/Sankore-3.1/src/pdf-merger/Merger.cpp
index da75919..8ba52d3 100644
--- a/Sankore-3.1/src/pdf-merger/Merger.cpp
+++ b/Sankore-3.1/src/pdf-merger/Merger.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "Merger.h"
#include "Parser.h"
#include "OverlayDocumentParser.h"
diff --git a/Sankore-3.1/src/pdf-merger/Merger.h b/Sankore-3.1/src/pdf-merger/Merger.h
index 99c2673..34172ba 100644
--- a/Sankore-3.1/src/pdf-merger/Merger.h
+++ b/Sankore-3.1/src/pdf-merger/Merger.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined Merger_h
#define Merger_h
diff --git a/Sankore-3.1/src/pdf-merger/Object.cpp b/Sankore-3.1/src/pdf-merger/Object.cpp
index 341c310..5b1cadd 100644
--- a/Sankore-3.1/src/pdf-merger/Object.cpp
+++ b/Sankore-3.1/src/pdf-merger/Object.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "Object.h"
#include "Parser.h"
#include "Exception.h"
diff --git a/Sankore-3.1/src/pdf-merger/Object.h b/Sankore-3.1/src/pdf-merger/Object.h
index 9688e93..54c452c 100644
--- a/Sankore-3.1/src/pdf-merger/Object.h
+++ b/Sankore-3.1/src/pdf-merger/Object.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined Object_h
#define Object_h
diff --git a/Sankore-3.1/src/pdf-merger/OverlayDocumentParser.cpp b/Sankore-3.1/src/pdf-merger/OverlayDocumentParser.cpp
index f24f43d..8a37fe4 100644
--- a/Sankore-3.1/src/pdf-merger/OverlayDocumentParser.cpp
+++ b/Sankore-3.1/src/pdf-merger/OverlayDocumentParser.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "OverlayDocumentParser.h"
#include <fstream>
#include <string.h>
diff --git a/Sankore-3.1/src/pdf-merger/OverlayDocumentParser.h b/Sankore-3.1/src/pdf-merger/OverlayDocumentParser.h
index cb7b160..e25dd80 100644
--- a/Sankore-3.1/src/pdf-merger/OverlayDocumentParser.h
+++ b/Sankore-3.1/src/pdf-merger/OverlayDocumentParser.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined OverlayDocumentParser_h
#define OverlayDocumentParser_h
diff --git a/Sankore-3.1/src/pdf-merger/Page.cpp b/Sankore-3.1/src/pdf-merger/Page.cpp
index 52cfb5b..7dfbfd8 100644
--- a/Sankore-3.1/src/pdf-merger/Page.cpp
+++ b/Sankore-3.1/src/pdf-merger/Page.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "Page.h"
#include "Document.h"
diff --git a/Sankore-3.1/src/pdf-merger/Page.h b/Sankore-3.1/src/pdf-merger/Page.h
index 3f28407..fba3dfe 100644
--- a/Sankore-3.1/src/pdf-merger/Page.h
+++ b/Sankore-3.1/src/pdf-merger/Page.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined Page_h
#define Page_h
diff --git a/Sankore-3.1/src/pdf-merger/PageElementHandler.cpp b/Sankore-3.1/src/pdf-merger/PageElementHandler.cpp
index 43d3125..f45544f 100644
--- a/Sankore-3.1/src/pdf-merger/PageElementHandler.cpp
+++ b/Sankore-3.1/src/pdf-merger/PageElementHandler.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "PageElementHandler.h"
#include <QtGlobal>
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/pdf-merger/PageElementHandler.h b/Sankore-3.1/src/pdf-merger/PageElementHandler.h
index dedc8b7..e927d3c 100644
--- a/Sankore-3.1/src/pdf-merger/PageElementHandler.h
+++ b/Sankore-3.1/src/pdf-merger/PageElementHandler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined PageElementHandler_h
#define PageElementHandler_h
diff --git a/Sankore-3.1/src/pdf-merger/PageParser.h b/Sankore-3.1/src/pdf-merger/PageParser.h
index fb83bbe..f723cb2 100644
--- a/Sankore-3.1/src/pdf-merger/PageParser.h
+++ b/Sankore-3.1/src/pdf-merger/PageParser.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined(EA_FF53E894_11D7_4c64_A409_DBC97C9EF3CF__INCLUDED_)
#define EA_FF53E894_11D7_4c64_A409_DBC97C9EF3CF__INCLUDED_
diff --git a/Sankore-3.1/src/pdf-merger/Parser.cpp b/Sankore-3.1/src/pdf-merger/Parser.cpp
index 8febbf7..66e3d0b 100644
--- a/Sankore-3.1/src/pdf-merger/Parser.cpp
+++ b/Sankore-3.1/src/pdf-merger/Parser.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGlobal>
#include <fstream>
#include <iostream>
diff --git a/Sankore-3.1/src/pdf-merger/Parser.h b/Sankore-3.1/src/pdf-merger/Parser.h
index 7d53bb5..34b06df 100644
--- a/Sankore-3.1/src/pdf-merger/Parser.h
+++ b/Sankore-3.1/src/pdf-merger/Parser.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined Parser_h
#define Parser_h
diff --git a/Sankore-3.1/src/pdf-merger/Rectangle.cpp b/Sankore-3.1/src/pdf-merger/Rectangle.cpp
index bfc1cd0..722a45d 100644
--- a/Sankore-3.1/src/pdf-merger/Rectangle.cpp
+++ b/Sankore-3.1/src/pdf-merger/Rectangle.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "Rectangle.h"
#include "Utils.h"
#include "Object.h"
diff --git a/Sankore-3.1/src/pdf-merger/Rectangle.h b/Sankore-3.1/src/pdf-merger/Rectangle.h
index 1de9955..db14d5b 100644
--- a/Sankore-3.1/src/pdf-merger/Rectangle.h
+++ b/Sankore-3.1/src/pdf-merger/Rectangle.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined Rectangle_h
#define Rectangle_h
diff --git a/Sankore-3.1/src/pdf-merger/RemoveHimSelfHandler.h b/Sankore-3.1/src/pdf-merger/RemoveHimSelfHandler.h
index 4aa6482..51f90b8 100644
--- a/Sankore-3.1/src/pdf-merger/RemoveHimSelfHandler.h
+++ b/Sankore-3.1/src/pdf-merger/RemoveHimSelfHandler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined RemoveHimselfHandler_h
#define RemoveHimselfHandler_h
diff --git a/Sankore-3.1/src/pdf-merger/RemoveHimselfHandler.cpp b/Sankore-3.1/src/pdf-merger/RemoveHimselfHandler.cpp
index 47da6f5..2abc473 100644
--- a/Sankore-3.1/src/pdf-merger/RemoveHimselfHandler.cpp
+++ b/Sankore-3.1/src/pdf-merger/RemoveHimselfHandler.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "RemoveHimSelfHandler.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/pdf-merger/RotationHandler.h b/Sankore-3.1/src/pdf-merger/RotationHandler.h
index 152d1b4..07beb5e 100644
--- a/Sankore-3.1/src/pdf-merger/RotationHandler.h
+++ b/Sankore-3.1/src/pdf-merger/RotationHandler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined RotationHandler_h
#define RotationHandler_h
diff --git a/Sankore-3.1/src/pdf-merger/RunLengthDecode.cpp b/Sankore-3.1/src/pdf-merger/RunLengthDecode.cpp
index 92678d6..48da4cd 100644
--- a/Sankore-3.1/src/pdf-merger/RunLengthDecode.cpp
+++ b/Sankore-3.1/src/pdf-merger/RunLengthDecode.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "RunLengthDecode.h"
#include <QtGlobal>
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/pdf-merger/RunLengthDecode.h b/Sankore-3.1/src/pdf-merger/RunLengthDecode.h
index c62e5c7..b29b01e 100644
--- a/Sankore-3.1/src/pdf-merger/RunLengthDecode.h
+++ b/Sankore-3.1/src/pdf-merger/RunLengthDecode.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef RunLengthDecode_H
#define RunLengthDecode_H
diff --git a/Sankore-3.1/src/pdf-merger/Transformation.h b/Sankore-3.1/src/pdf-merger/Transformation.h
index ada0df3..9be96d2 100644
--- a/Sankore-3.1/src/pdf-merger/Transformation.h
+++ b/Sankore-3.1/src/pdf-merger/Transformation.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/*
The file defines some classes for transformation of PDF content stream.
*/
diff --git a/Sankore-3.1/src/pdf-merger/TypeElementHandler.h b/Sankore-3.1/src/pdf-merger/TypeElementHandler.h
index 691f4a0..7c01456 100644
--- a/Sankore-3.1/src/pdf-merger/TypeElementHandler.h
+++ b/Sankore-3.1/src/pdf-merger/TypeElementHandler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined TypeElementHandler_h
#define TypeElementHandler_h
diff --git a/Sankore-3.1/src/pdf-merger/Utils.cpp b/Sankore-3.1/src/pdf-merger/Utils.cpp
index 783f24b..e4ebf0a 100644
--- a/Sankore-3.1/src/pdf-merger/Utils.cpp
+++ b/Sankore-3.1/src/pdf-merger/Utils.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGlobal>
#include <QString>
#include "Config.h"
diff --git a/Sankore-3.1/src/pdf-merger/Utils.h b/Sankore-3.1/src/pdf-merger/Utils.h
index 335ef01..2857df8 100644
--- a/Sankore-3.1/src/pdf-merger/Utils.h
+++ b/Sankore-3.1/src/pdf-merger/Utils.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#if !defined Utils_h
#define Utils_h
diff --git a/Sankore-3.1/src/pdf/GraphicsPDFItem.cpp b/Sankore-3.1/src/pdf/GraphicsPDFItem.cpp
index f461e0e..b4c71ed 100644
--- a/Sankore-3.1/src/pdf/GraphicsPDFItem.cpp
+++ b/Sankore-3.1/src/pdf/GraphicsPDFItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "GraphicsPDFItem.h"
#include <qglobal.h>
diff --git a/Sankore-3.1/src/pdf/GraphicsPDFItem.h b/Sankore-3.1/src/pdf/GraphicsPDFItem.h
index ccf4e95..3c4b6f3 100644
--- a/Sankore-3.1/src/pdf/GraphicsPDFItem.h
+++ b/Sankore-3.1/src/pdf/GraphicsPDFItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef GRAPHICSPDFITEM_H
#define GRAPHICSPDFITEM_H
diff --git a/Sankore-3.1/src/pdf/PDFRenderer.cpp b/Sankore-3.1/src/pdf/PDFRenderer.cpp
index fee6e85..16b8821 100644
--- a/Sankore-3.1/src/pdf/PDFRenderer.cpp
+++ b/Sankore-3.1/src/pdf/PDFRenderer.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QFile>
#include "PDFRenderer.h"
diff --git a/Sankore-3.1/src/pdf/PDFRenderer.h b/Sankore-3.1/src/pdf/PDFRenderer.h
index 3147e7b..5284c5e 100644
--- a/Sankore-3.1/src/pdf/PDFRenderer.h
+++ b/Sankore-3.1/src/pdf/PDFRenderer.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef PDFRENDERER_H
#define PDFRENDERER_H
diff --git a/Sankore-3.1/src/pdf/UBWebPluginPDFWidget.cpp b/Sankore-3.1/src/pdf/UBWebPluginPDFWidget.cpp
index ca43b6d..0419713 100644
--- a/Sankore-3.1/src/pdf/UBWebPluginPDFWidget.cpp
+++ b/Sankore-3.1/src/pdf/UBWebPluginPDFWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include "UBWebPluginPDFWidget.h"
diff --git a/Sankore-3.1/src/pdf/UBWebPluginPDFWidget.h b/Sankore-3.1/src/pdf/UBWebPluginPDFWidget.h
index 5680cb2..681f223 100644
--- a/Sankore-3.1/src/pdf/UBWebPluginPDFWidget.h
+++ b/Sankore-3.1/src/pdf/UBWebPluginPDFWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWEBPLUGINPDFWIDGET_H
#define UBWEBPLUGINPDFWIDGET_H
diff --git a/Sankore-3.1/src/pdf/XPDFRenderer.cpp b/Sankore-3.1/src/pdf/XPDFRenderer.cpp
index 69ce392..79042ca 100644
--- a/Sankore-3.1/src/pdf/XPDFRenderer.cpp
+++ b/Sankore-3.1/src/pdf/XPDFRenderer.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "XPDFRenderer.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/pdf/XPDFRenderer.h b/Sankore-3.1/src/pdf/XPDFRenderer.h
index c5f0a81..ab9f3de 100644
--- a/Sankore-3.1/src/pdf/XPDFRenderer.h
+++ b/Sankore-3.1/src/pdf/XPDFRenderer.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef XPDFRENDERER_H
#define XPDFRENDERER_H
#include <QImage>
diff --git a/Sankore-3.1/src/podcast/UBAbstractVideoEncoder.cpp b/Sankore-3.1/src/podcast/UBAbstractVideoEncoder.cpp
index ffe5ec8..d038fd1 100644
--- a/Sankore-3.1/src/podcast/UBAbstractVideoEncoder.cpp
+++ b/Sankore-3.1/src/podcast/UBAbstractVideoEncoder.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBAbstractVideoEncoder.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/podcast/UBAbstractVideoEncoder.h b/Sankore-3.1/src/podcast/UBAbstractVideoEncoder.h
index c0b290e..cd7bb9d 100644
--- a/Sankore-3.1/src/podcast/UBAbstractVideoEncoder.h
+++ b/Sankore-3.1/src/podcast/UBAbstractVideoEncoder.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBABSTRACTVIDEOENCODER_H_
#define UBABSTRACTVIDEOENCODER_H_
diff --git a/Sankore-3.1/src/podcast/UBPodcastController.cpp b/Sankore-3.1/src/podcast/UBPodcastController.cpp
index b7a8521..68a3dcb 100644
--- a/Sankore-3.1/src/podcast/UBPodcastController.cpp
+++ b/Sankore-3.1/src/podcast/UBPodcastController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBPodcastController.h"
#include "frameworks/UBFileSystemUtils.h"
diff --git a/Sankore-3.1/src/podcast/UBPodcastController.h b/Sankore-3.1/src/podcast/UBPodcastController.h
index cb255c4..14ae312 100644
--- a/Sankore-3.1/src/podcast/UBPodcastController.h
+++ b/Sankore-3.1/src/podcast/UBPodcastController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBPODCASTCONTROLLER_H_
#define UBPODCASTCONTROLLER_H_
diff --git a/Sankore-3.1/src/podcast/UBPodcastRecordingPalette.cpp b/Sankore-3.1/src/podcast/UBPodcastRecordingPalette.cpp
index 45cff6d..bbea18c 100644
--- a/Sankore-3.1/src/podcast/UBPodcastRecordingPalette.cpp
+++ b/Sankore-3.1/src/podcast/UBPodcastRecordingPalette.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBPodcastRecordingPalette.h"
#include "UBPodcastController.h"
diff --git a/Sankore-3.1/src/podcast/UBPodcastRecordingPalette.h b/Sankore-3.1/src/podcast/UBPodcastRecordingPalette.h
index 225a894..aece20c 100644
--- a/Sankore-3.1/src/podcast/UBPodcastRecordingPalette.h
+++ b/Sankore-3.1/src/podcast/UBPodcastRecordingPalette.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBPODCASTRECORDINGPALETTE_H_
#define UBPODCASTRECORDINGPALETTE_H_
diff --git a/Sankore-3.1/src/podcast/intranet/UBIntranetPodcastPublisher.cpp b/Sankore-3.1/src/podcast/intranet/UBIntranetPodcastPublisher.cpp
index 60e1c8e..512d087 100644
--- a/Sankore-3.1/src/podcast/intranet/UBIntranetPodcastPublisher.cpp
+++ b/Sankore-3.1/src/podcast/intranet/UBIntranetPodcastPublisher.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBIntranetPodcastPublisher.h"
#include "frameworks/UBPlatformUtils.h"
diff --git a/Sankore-3.1/src/podcast/intranet/UBIntranetPodcastPublisher.h b/Sankore-3.1/src/podcast/intranet/UBIntranetPodcastPublisher.h
index 2842a43..5a764aa 100644
--- a/Sankore-3.1/src/podcast/intranet/UBIntranetPodcastPublisher.h
+++ b/Sankore-3.1/src/podcast/intranet/UBIntranetPodcastPublisher.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBUNILPUBLISHER_H_
#define UBUNILPUBLISHER_H_
diff --git a/Sankore-3.1/src/podcast/quicktime/UBAudioQueueRecorder.cpp b/Sankore-3.1/src/podcast/quicktime/UBAudioQueueRecorder.cpp
index 408f557..46d7d9b 100644
--- a/Sankore-3.1/src/podcast/quicktime/UBAudioQueueRecorder.cpp
+++ b/Sankore-3.1/src/podcast/quicktime/UBAudioQueueRecorder.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBAudioQueueRecorder.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/podcast/quicktime/UBAudioQueueRecorder.h b/Sankore-3.1/src/podcast/quicktime/UBAudioQueueRecorder.h
index c4abcb3..31e7aa8 100644
--- a/Sankore-3.1/src/podcast/quicktime/UBAudioQueueRecorder.h
+++ b/Sankore-3.1/src/podcast/quicktime/UBAudioQueueRecorder.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBAUDIOQUEUERECORDER_H_
#define UBAUDIOQUEUERECORDER_H_
diff --git a/Sankore-3.1/src/podcast/quicktime/UBQuickTimeFile.cpp b/Sankore-3.1/src/podcast/quicktime/UBQuickTimeFile.cpp
index 84d00df..8b6451d 100644
--- a/Sankore-3.1/src/podcast/quicktime/UBQuickTimeFile.cpp
+++ b/Sankore-3.1/src/podcast/quicktime/UBQuickTimeFile.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBQuickTimeFile.h"
#include <AudioToolbox/AudioToolbox.h>
diff --git a/Sankore-3.1/src/podcast/quicktime/UBQuickTimeFile.h b/Sankore-3.1/src/podcast/quicktime/UBQuickTimeFile.h
index 2d5e6b4..996e25a 100644
--- a/Sankore-3.1/src/podcast/quicktime/UBQuickTimeFile.h
+++ b/Sankore-3.1/src/podcast/quicktime/UBQuickTimeFile.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBQUICKTIMEFILE_H_
#define UBQUICKTIMEFILE_H_
diff --git a/Sankore-3.1/src/podcast/quicktime/UBQuickTimeVideoEncoder.cpp b/Sankore-3.1/src/podcast/quicktime/UBQuickTimeVideoEncoder.cpp
index f79dae3..a43849f 100644
--- a/Sankore-3.1/src/podcast/quicktime/UBQuickTimeVideoEncoder.cpp
+++ b/Sankore-3.1/src/podcast/quicktime/UBQuickTimeVideoEncoder.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBQuickTimeVideoEncoder.h"
#include <QuickTime/QuickTime.h>
diff --git a/Sankore-3.1/src/podcast/quicktime/UBQuickTimeVideoEncoder.h b/Sankore-3.1/src/podcast/quicktime/UBQuickTimeVideoEncoder.h
index e5ab005..67262d6 100644
--- a/Sankore-3.1/src/podcast/quicktime/UBQuickTimeVideoEncoder.h
+++ b/Sankore-3.1/src/podcast/quicktime/UBQuickTimeVideoEncoder.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBQUICKTIMEVIDEOENCODER_H_
#define UBQUICKTIMEVIDEOENCODER_H_
diff --git a/Sankore-3.1/src/podcast/windowsmedia/UBWaveRecorder.cpp b/Sankore-3.1/src/podcast/windowsmedia/UBWaveRecorder.cpp
index 6f851c7..c347093 100644
--- a/Sankore-3.1/src/podcast/windowsmedia/UBWaveRecorder.cpp
+++ b/Sankore-3.1/src/podcast/windowsmedia/UBWaveRecorder.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBWaveRecorder.h"
#include "Mmsystem.h"
diff --git a/Sankore-3.1/src/podcast/windowsmedia/UBWaveRecorder.h b/Sankore-3.1/src/podcast/windowsmedia/UBWaveRecorder.h
index c21c0cc..d136c57 100644
--- a/Sankore-3.1/src/podcast/windowsmedia/UBWaveRecorder.h
+++ b/Sankore-3.1/src/podcast/windowsmedia/UBWaveRecorder.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWAVERECORDER_H_
#define UBWAVERECORDER_H_
diff --git a/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaFile.cpp b/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaFile.cpp
index 5b52981..3b8f6b9 100644
--- a/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaFile.cpp
+++ b/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaFile.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBWindowsMediaFile.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaFile.h b/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaFile.h
index 5a5cbe6..2bcb20a 100644
--- a/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaFile.h
+++ b/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaFile.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWINDOWSMEDIAFILE_H_
#define UBWINDOWSMEDIAFILE_H_
diff --git a/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaVideoEncoder.cpp b/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaVideoEncoder.cpp
index 52bb7f1..659f1cf 100644
--- a/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaVideoEncoder.cpp
+++ b/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaVideoEncoder.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBWindowsMediaVideoEncoder.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaVideoEncoder.h b/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaVideoEncoder.h
index fc0a19a..adb24a2 100644
--- a/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaVideoEncoder.h
+++ b/Sankore-3.1/src/podcast/windowsmedia/UBWindowsMediaVideoEncoder.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWINDOWSMEDIAVIDEOENCODER_H_
#define UBWINDOWSMEDIAVIDEOENCODER_H_
diff --git a/Sankore-3.1/src/podcast/youtube/UBYouTubePublisher.cpp b/Sankore-3.1/src/podcast/youtube/UBYouTubePublisher.cpp
index 58283d7..e6d2212 100644
--- a/Sankore-3.1/src/podcast/youtube/UBYouTubePublisher.cpp
+++ b/Sankore-3.1/src/podcast/youtube/UBYouTubePublisher.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBYouTubePublisher.h"
diff --git a/Sankore-3.1/src/podcast/youtube/UBYouTubePublisher.h b/Sankore-3.1/src/podcast/youtube/UBYouTubePublisher.h
index 961d1c4..9b0a52d 100644
--- a/Sankore-3.1/src/podcast/youtube/UBYouTubePublisher.h
+++ b/Sankore-3.1/src/podcast/youtube/UBYouTubePublisher.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBYOUTUBEPUBLISHER_H_
#define UBYOUTUBEPUBLISHER_H_
diff --git a/Sankore-3.1/src/tools/UBAbstractDrawRuler.cpp b/Sankore-3.1/src/tools/UBAbstractDrawRuler.cpp
index d08f15e..512aee5 100644
--- a/Sankore-3.1/src/tools/UBAbstractDrawRuler.cpp
+++ b/Sankore-3.1/src/tools/UBAbstractDrawRuler.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBAbstractDrawRuler.h"
#include <QtSvg>
#include "core/UB.h"
diff --git a/Sankore-3.1/src/tools/UBAbstractDrawRuler.h b/Sankore-3.1/src/tools/UBAbstractDrawRuler.h
index c6cf879..d286ed8 100644
--- a/Sankore-3.1/src/tools/UBAbstractDrawRuler.h
+++ b/Sankore-3.1/src/tools/UBAbstractDrawRuler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UB_ABSTRACTDRAWRULER_H_
#define UB_ABSTRACTDRAWRULER_H_
diff --git a/Sankore-3.1/src/tools/UBGraphicsAristo.cpp b/Sankore-3.1/src/tools/UBGraphicsAristo.cpp
index e7773d6..346d7c3 100644
--- a/Sankore-3.1/src/tools/UBGraphicsAristo.cpp
+++ b/Sankore-3.1/src/tools/UBGraphicsAristo.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,6 +18,14 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
+
+
+#include "UBGraphicsAristo.h"
+#include "board/UBBoardController.h"
+#include "board/UBDrawingController.h"
+#include "core/UBApplication.h"
+#include "domain/UBGraphicsScene.h"
+
#include <QColor>
#include <QFont>
#include <QFontMetricsF>
diff --git a/Sankore-3.1/src/tools/UBGraphicsAristo.h b/Sankore-3.1/src/tools/UBGraphicsAristo.h
index e676eda..ff89db6 100644
--- a/Sankore-3.1/src/tools/UBGraphicsAristo.h
+++ b/Sankore-3.1/src/tools/UBGraphicsAristo.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -18,6 +18,14 @@
* You should have received a copy of the GNU General Public License
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
+
+
+#ifndef UBGRAPHICSARISTO_H_
+#define UBGRAPHICSARISTO_H_
+
+#include "core/UB.h"
+#include "domain/UBItem.h"
+#include "domain/UBGraphicsScene.h"
#include "tools/UBAbstractDrawRuler.h"
#include <QtGlobal>
diff --git a/Sankore-3.1/src/tools/UBGraphicsCache.cpp b/Sankore-3.1/src/tools/UBGraphicsCache.cpp
index 888417e..21cc262 100644
--- a/Sankore-3.1/src/tools/UBGraphicsCache.cpp
+++ b/Sankore-3.1/src/tools/UBGraphicsCache.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QDebug>
#include "UBGraphicsCache.h"
@@ -44,15 +45,45 @@ UBGraphicsCache* UBGraphicsCache::instance(UBGraphicsScene *scene)
UBGraphicsCache::UBGraphicsCache(UBGraphicsScene *scene) : QGraphicsRectItem()
, mMaskColor(Qt::black)
, mMaskShape(eMaskShape_Circle)
- , mShapeWidth(100)
, mDrawMask(false)
, mScene(scene)
+ , mShouldDrawAtHoverEnter(false)
{
+ setMode(static_cast<int>(OnClick));
+
+ mHoleSize = UBSettings::settings()->casheLastHoleSize->get().toSize();
+
+ QColor cacheColor;
+ QStringList colors = UBSettings::settings()->cacheColor->get().toString().split(" ", QString::SkipEmptyParts);
+ if (colors.count())
+ {
+ if (3 == colors.count())
+ cacheColor = QColor(colors[0].toInt(),colors[1].toInt(),colors[2].toInt());
+ if (4 == colors.count())
+ cacheColor = QColor(colors[0].toInt(),colors[1].toInt(),colors[2].toInt(), colors[3].toInt());
+ }
+
+ if (cacheColor.isValid())
+ mMaskColor = cacheColor;
+ else
+ mMaskColor = QColor(0,0,0,190);
+
// Get the board size and pass it to the shape
QRect boardRect = UBApplication::boardController->displayView()->rect();
setRect(-15*boardRect.width(), -15*boardRect.height(), 30*boardRect.width(), 30*boardRect.height());
setData(Qt::UserRole, QVariant("Cache"));
setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::Cache)); //Necessary to set if we want z value to be assigned correctly
+
+ QPixmap cursorImage(1,1);
+ QPixmap cursorMask(1,1);
+ QPainter cursorPainter(&cursorImage);
+ QPainter cursorMaskPainter(&cursorMask);
+ cursorPainter.setBackground(Qt::transparent);
+ cursorMaskPainter.setBackground(Qt::transparent);
+ cursorPainter.fillRect(cursorImage.rect(), Qt::color0);
+ cursorPainter.end();
+
+ mCursorForHole = QCursor(cursorImage, cursorMask);
}
UBGraphicsCache::~UBGraphicsCache()
@@ -111,14 +142,34 @@ void UBGraphicsCache::init()
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
}
+void UBGraphicsCache::setMode(int mode)
+{
+ mCurrentMode = static_cast<eMode>(mode);
+
+ if (OnClick == mCurrentMode)
+ setAcceptHoverEvents(false);
+ if (Persistent == mCurrentMode)
+ setAcceptHoverEvents(true);
+
+ drawHole(false);
+ mShouldDrawAtHoverEnter = false;
+}
+
void UBGraphicsCache::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
- painter->setBrush(mMaskColor);
- painter->setPen(mMaskColor);
+ QColor maskColor;
+ maskColor = mMaskColor;
+ if(widget != UBApplication::boardController->controlView()->viewport())
+ maskColor.setAlpha(255);
+
+
+ painter->setBrush(maskColor);
+ painter->setPen(maskColor);
+
// Draw the hole
QPainterPath path;
path.addRect(rect());
@@ -127,11 +178,11 @@ void UBGraphicsCache::paint(QPainter *painter, const QStyleOptionGraphicsItem *o
{
if(eMaskShape_Circle == mMaskShape)
{
- path.addEllipse(mShapePos, mShapeWidth, mShapeWidth);
+ path.addEllipse(mHolePos, mHoleSize.width()/2, mHoleSize.height()/2);
}
else if(eMaskShap_Rectangle == mMaskShape)
{
- path.addRect(mShapePos.x() - mShapeWidth, mShapePos.y() - mShapeWidth, 2*mShapeWidth, 2*mShapeWidth);
+ path.addRect(mHolePos.x() - mHoleSize.width()/2, mHolePos.y() - mHoleSize.height()/2, mHoleSize.width(), mHoleSize.height());
}
path.setFillRule(Qt::OddEvenFill);
}
@@ -141,46 +192,106 @@ void UBGraphicsCache::paint(QPainter *painter, const QStyleOptionGraphicsItem *o
void UBGraphicsCache::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
- Q_UNUSED(event);
- mShapePos = event->pos();
- mDrawMask = true;
+ if (OnClick == mCurrentMode)
+ {
+ drawHole(true);
+ }
+
+ if (Persistent == mCurrentMode)
+ drawHole(!mDrawMask);
- // Note: if refresh issues occure, replace the following 3 lines by: update();
- update(updateRect(event->pos()));
- mOldShapeWidth = mShapeWidth;
- mOldShapePos = event->pos();
+ setHolePos(event->pos());
}
-void UBGraphicsCache::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void UBGraphicsCache::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
- mShapePos = event->pos();
+ if (mShouldDrawAtHoverEnter)
+ drawHole(true);
+
+ mShouldDrawAtHoverEnter = false;
- // Note: if refresh issues occure, replace the following 3 lines by: update();
update(updateRect(event->pos()));
- mOldShapeWidth = mShapeWidth;
- mOldShapePos = event->pos();
+}
+
+void UBGraphicsCache::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
+{
+ mShouldDrawAtHoverEnter = mDrawMask;
+ drawHole(false);
+ update(updateRect(event->pos()));
+}
+
+void UBGraphicsCache::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
+{
+ setHolePos(event->pos());
+}
+
+void UBGraphicsCache::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ setHolePos(event->pos());
}
void UBGraphicsCache::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event);
- mDrawMask = false;
+
+ if (OnClick == mCurrentMode)
+ drawHole(false);
// Note: if refresh issues occure, replace the following 3 lines by: update();
update(updateRect(event->pos()));
- mOldShapeWidth = mShapeWidth;
+ mOldShapeSize = mHoleSize;
mOldShapePos = event->pos();
}
-int UBGraphicsCache::shapeWidth()
+void UBGraphicsCache::drawHole(bool draw)
{
- return mShapeWidth;
+ mDrawMask = draw;
+ if (mDrawMask)
+ {
+ mSavedCursor = cursor();
+ setCursor(mCursorForHole);
+ }
+ else
+ setCursor(mSavedCursor);
+
}
-void UBGraphicsCache::setShapeWidth(int width)
+void UBGraphicsCache::setHolePos(QPointF pos)
{
- mShapeWidth = width;
- update();
+ mHolePos = pos;
+
+ // Note: if refresh issues occure, replace the following 3 lines by: update();
+ update(updateRect(pos));
+ mOldShapeSize = mHoleSize;
+ mOldShapePos = pos;
+}
+
+int UBGraphicsCache::holeWidth()
+{
+ return mHoleSize.width();
+}
+
+int UBGraphicsCache::holeHeight()
+{
+ return mHoleSize.height();
+}
+
+void UBGraphicsCache::setHoleWidth(int width)
+{
+ mHoleSize.setWidth(width);
+ UBSettings::settings()->casheLastHoleSize->set(mHoleSize);
+}
+
+void UBGraphicsCache::setHoleHeight(int height)
+{
+ mHoleSize.setHeight(height);
+ UBSettings::settings()->casheLastHoleSize->set(mHoleSize);
+}
+
+void UBGraphicsCache::setHoleSize(QSize size)
+{
+ mHoleSize = size/UBApplication::boardController->controlView()->viewportTransform().m11();
+ UBSettings::settings()->casheLastHoleSize->set(mHoleSize);
}
QRectF UBGraphicsCache::updateRect(QPointF currentPoint)
@@ -189,11 +300,11 @@ QRectF UBGraphicsCache::updateRect(QPointF currentPoint)
int x;
int y;
- x = qMin(currentPoint.x() - mShapeWidth, mOldShapePos.x() - mOldShapeWidth);
- y = qMin(currentPoint.y() - mShapeWidth, mOldShapePos.y() - mOldShapeWidth);
+ x = qMin(currentPoint.x() - mHoleSize.width()/2, mOldShapePos.x() - mOldShapeSize.width()/2);
+ y = qMin(currentPoint.y() - mHoleSize.height()/2, mOldShapePos.y() - mOldShapeSize.height()/2);
r = QRect( x,
y,
- qAbs(currentPoint.x() - mOldShapePos.x()) + 2*mShapeWidth,
- qAbs(currentPoint.y() - mOldShapePos.y()) + 2*mShapeWidth);
+ qAbs(currentPoint.x() - mOldShapePos.x()) + mHoleSize.width(),
+ qAbs(currentPoint.y() - mOldShapePos.y()) + mHoleSize.height());
return r;
}
diff --git a/Sankore-3.1/src/tools/UBGraphicsCache.h b/Sankore-3.1/src/tools/UBGraphicsCache.h
index 823eb25..16e7ff5 100644
--- a/Sankore-3.1/src/tools/UBGraphicsCache.h
+++ b/Sankore-3.1/src/tools/UBGraphicsCache.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSCACHE_H
#define UBGRAPHICSCACHE_H
@@ -37,6 +38,14 @@ typedef enum
class UBGraphicsCache : public QGraphicsRectItem, public UBItem
{
+
+public:
+ enum eMode
+ {
+ OnClick = 0,
+ Persistent
+ };
+
public:
static UBGraphicsCache* instance(UBGraphicsScene *scene);
~UBGraphicsCache();
@@ -53,32 +62,52 @@ public:
void setMaskColor(QColor color);
eMaskShape maskshape();
void setMaskShape(eMaskShape shape);
- int shapeWidth();
- void setShapeWidth(int width);
+ int holeWidth();
+ int holeHeight();
+
+ void setHoleWidth(int width);
+ void setHoleHeight(int height);
+
+ void setHolePos(QPointF pos);
+ void setHoleSize(QSize size);
+
+ void setMode(int mode);
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+ void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private:
+ void drawHole(bool draw);
+
+private:
static QMap<UBGraphicsScene*, UBGraphicsCache*> sInstances;
QColor mMaskColor;
eMaskShape mMaskShape;
- int mShapeWidth;
bool mDrawMask;
- QPointF mShapePos;
- int mOldShapeWidth;
+ QPointF mHolePos;
+ QSize mOldShapeSize;
QPointF mOldShapePos;
UBGraphicsScene* mScene;
-
+ bool mShouldDrawAtHoverEnter;
+
+ eMode mCurrentMode;
+
+ QSize mHoleSize;
UBGraphicsCache(UBGraphicsScene *scene);
void init();
QRectF updateRect(QPointF currentPoint);
+
+ QCursor mSavedCursor;
+ QCursor mCursorForHole;
};
#endif // UBGRAPHICSCACHE_H
diff --git a/Sankore-3.1/src/tools/UBGraphicsCompass.cpp b/Sankore-3.1/src/tools/UBGraphicsCompass.cpp
index bfb3ae2..c575e16 100644
--- a/Sankore-3.1/src/tools/UBGraphicsCompass.cpp
+++ b/Sankore-3.1/src/tools/UBGraphicsCompass.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "tools/UBGraphicsCompass.h"
#include "domain/UBGraphicsScene.h"
#include "core/UBApplication.h"
diff --git a/Sankore-3.1/src/tools/UBGraphicsCompass.h b/Sankore-3.1/src/tools/UBGraphicsCompass.h
index 4d2bbf2..7f08c65 100644
--- a/Sankore-3.1/src/tools/UBGraphicsCompass.h
+++ b/Sankore-3.1/src/tools/UBGraphicsCompass.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSCOMPASS_H_
#define UBGRAPHICSCOMPASS_H_
diff --git a/Sankore-3.1/src/tools/UBGraphicsCurtainItem.cpp b/Sankore-3.1/src/tools/UBGraphicsCurtainItem.cpp
index ef34a2b..30f92ee 100644
--- a/Sankore-3.1/src/tools/UBGraphicsCurtainItem.cpp
+++ b/Sankore-3.1/src/tools/UBGraphicsCurtainItem.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsCurtainItem.h"
#include <QtGui>
diff --git a/Sankore-3.1/src/tools/UBGraphicsCurtainItem.h b/Sankore-3.1/src/tools/UBGraphicsCurtainItem.h
index 6100968..1d0ce65 100644
--- a/Sankore-3.1/src/tools/UBGraphicsCurtainItem.h
+++ b/Sankore-3.1/src/tools/UBGraphicsCurtainItem.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSCURTAINITEM_H_
#define UBGRAPHICSCURTAINITEM_H_
diff --git a/Sankore-3.1/src/tools/UBGraphicsCurtainItemDelegate.cpp b/Sankore-3.1/src/tools/UBGraphicsCurtainItemDelegate.cpp
index 8626d35..0a3da8d 100644
--- a/Sankore-3.1/src/tools/UBGraphicsCurtainItemDelegate.cpp
+++ b/Sankore-3.1/src/tools/UBGraphicsCurtainItemDelegate.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include <QtSvg>
diff --git a/Sankore-3.1/src/tools/UBGraphicsCurtainItemDelegate.h b/Sankore-3.1/src/tools/UBGraphicsCurtainItemDelegate.h
index 1681532..36040ba 100644
--- a/Sankore-3.1/src/tools/UBGraphicsCurtainItemDelegate.h
+++ b/Sankore-3.1/src/tools/UBGraphicsCurtainItemDelegate.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSCURTAINITEMDELEGATE_H_
#define UBGRAPHICSCURTAINITEMDELEGATE_H_
diff --git a/Sankore-3.1/src/tools/UBGraphicsProtractor.cpp b/Sankore-3.1/src/tools/UBGraphicsProtractor.cpp
index 2608195..ae54063 100644
--- a/Sankore-3.1/src/tools/UBGraphicsProtractor.cpp
+++ b/Sankore-3.1/src/tools/UBGraphicsProtractor.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBGraphicsProtractor.h"
#include "core/UBApplication.h"
#include "gui/UBResources.h"
diff --git a/Sankore-3.1/src/tools/UBGraphicsProtractor.h b/Sankore-3.1/src/tools/UBGraphicsProtractor.h
index 4f2fc9b..6991ad3 100644
--- a/Sankore-3.1/src/tools/UBGraphicsProtractor.h
+++ b/Sankore-3.1/src/tools/UBGraphicsProtractor.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSPROTRACTOR_H_
#define UBGRAPHICSPROTRACTOR_H_
diff --git a/Sankore-3.1/src/tools/UBGraphicsRuler.cpp b/Sankore-3.1/src/tools/UBGraphicsRuler.cpp
index 799b99a..cdccebd 100644
--- a/Sankore-3.1/src/tools/UBGraphicsRuler.cpp
+++ b/Sankore-3.1/src/tools/UBGraphicsRuler.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QPixmap>
#include "tools/UBGraphicsRuler.h"
diff --git a/Sankore-3.1/src/tools/UBGraphicsRuler.h b/Sankore-3.1/src/tools/UBGraphicsRuler.h
index dd67818..4b0c6ee 100644
--- a/Sankore-3.1/src/tools/UBGraphicsRuler.h
+++ b/Sankore-3.1/src/tools/UBGraphicsRuler.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSRULER_H_
#define UBGRAPHICSRULER_H_
diff --git a/Sankore-3.1/src/tools/UBGraphicsTriangle.cpp b/Sankore-3.1/src/tools/UBGraphicsTriangle.cpp
index 5bac8aa..5dbba7c 100644
--- a/Sankore-3.1/src/tools/UBGraphicsTriangle.cpp
+++ b/Sankore-3.1/src/tools/UBGraphicsTriangle.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QGraphicsPolygonItem>
#include <QPolygonF>
diff --git a/Sankore-3.1/src/tools/UBGraphicsTriangle.h b/Sankore-3.1/src/tools/UBGraphicsTriangle.h
index 57cb65f..e8a2fdb 100644
--- a/Sankore-3.1/src/tools/UBGraphicsTriangle.h
+++ b/Sankore-3.1/src/tools/UBGraphicsTriangle.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBGRAPHICSTRIANGLE_H_
#define UBGRAPHICSTRIANGLE_H_
diff --git a/Sankore-3.1/src/tools/UBToolsManager.cpp b/Sankore-3.1/src/tools/UBToolsManager.cpp
index f0fd830..763b489 100644
--- a/Sankore-3.1/src/tools/UBToolsManager.cpp
+++ b/Sankore-3.1/src/tools/UBToolsManager.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBToolsManager.h"
#include "core/memcheck.h"
diff --git a/Sankore-3.1/src/tools/UBToolsManager.h b/Sankore-3.1/src/tools/UBToolsManager.h
index 640bda9..ba9b9ad 100644
--- a/Sankore-3.1/src/tools/UBToolsManager.h
+++ b/Sankore-3.1/src/tools/UBToolsManager.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBTOOLSMANAGER_H_
#define UBTOOLSMANAGER_H_
diff --git a/Sankore-3.1/src/transition/UniboardSankoreTransition.cpp b/Sankore-3.1/src/transition/UniboardSankoreTransition.cpp
index 355ac43..6e5b119 100644
--- a/Sankore-3.1/src/transition/UniboardSankoreTransition.cpp
+++ b/Sankore-3.1/src/transition/UniboardSankoreTransition.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UniboardSankoreTransition.h"
#include "core/UBSettings.h"
#include "frameworks/UBFileSystemUtils.h"
diff --git a/Sankore-3.1/src/transition/UniboardSankoreTransition.h b/Sankore-3.1/src/transition/UniboardSankoreTransition.h
index 662b440..eca50cb 100644
--- a/Sankore-3.1/src/transition/UniboardSankoreTransition.h
+++ b/Sankore-3.1/src/transition/UniboardSankoreTransition.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UNIBOARDSANKORETRANSITION_H
#define UNIBOARDSANKORETRANSITION_H
diff --git a/Sankore-3.1/src/web/UBOEmbedParser.cpp b/Sankore-3.1/src/web/UBOEmbedParser.cpp
index a5425f2..8f8b5a6 100644
--- a/Sankore-3.1/src/web/UBOEmbedParser.cpp
+++ b/Sankore-3.1/src/web/UBOEmbedParser.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QRegExp>
#include <QStringList>
#include <QDomDocument>
diff --git a/Sankore-3.1/src/web/UBOEmbedParser.h b/Sankore-3.1/src/web/UBOEmbedParser.h
index 0fcf386..2be4150 100644
--- a/Sankore-3.1/src/web/UBOEmbedParser.h
+++ b/Sankore-3.1/src/web/UBOEmbedParser.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBOEMBEDPARSER_H
#define UBOEMBEDPARSER_H
diff --git a/Sankore-3.1/src/web/UBTrapFlashController.cpp b/Sankore-3.1/src/web/UBTrapFlashController.cpp
index 6e8016e..4a1ea02 100644
--- a/Sankore-3.1/src/web/UBTrapFlashController.cpp
+++ b/Sankore-3.1/src/web/UBTrapFlashController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBTrapFlashController.h"
#include <QtXml>
@@ -31,10 +32,14 @@
#include "core/UBApplication.h"
#include "core/UBSettings.h"
+#include "gui/UBMainWindow.h"
+
#include "network/UBNetworkAccessManager.h"
#include "domain/UBGraphicsScene.h"
+#include "domain/UBGraphicsWidgetItem.h"
+#include "board/UBBoardPaletteManager.h"
#include "board/UBBoardController.h"
#include "frameworks/UBPlatformUtils.h"
@@ -43,54 +48,25 @@
#include "core/memcheck.h"
-UBTrapFlashController::UBTrapFlashController(QWidget* parent)
+#include "web/UBWebController.h"
+#include "browser/WBBrowserWindow.h"
+
+UBTrapWebPageContentController::UBTrapWebPageContentController(QWidget* parent)
: QObject(parent)
- , mTrapFlashUi(0)
- , mTrapFlashDialog(0)
, mParentWidget(parent)
, mCurrentWebFrame(0)
+ , mTrapWebContentDialog(NULL)
{
// NOOP
}
-UBTrapFlashController::~UBTrapFlashController()
+UBTrapWebPageContentController::~UBTrapWebPageContentController()
{
// NOOP
}
-
-void UBTrapFlashController::showTrapFlash()
-{
- if (!mTrapFlashDialog)
- {
- Qt::WindowFlags flag = Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint ;
- flag &= ~ Qt::WindowContextHelpButtonHint;
- flag &= ~ Qt::WindowMinimizeButtonHint;
-
- mTrapFlashDialog = new QDialog(mParentWidget, flag);
- mTrapFlashUi = new Ui::trapFlashDialog();
- mTrapFlashUi->setupUi(mTrapFlashDialog);
-
- mTrapFlashUi->webView->page()->setNetworkAccessManager(UBNetworkAccessManager::defaultAccessManager());
- int viewWidth = mParentWidget->width() / 2;
- int viewHeight = mParentWidget->height() * 2. / 3.;
- mTrapFlashDialog->setGeometry(
- (mParentWidget->width() - viewWidth) / 2
- , (mParentWidget->height() - viewHeight) / 2
- , viewWidth
- , viewHeight);
-
- connect(mTrapFlashUi->flashCombobox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectFlash(int)));
- connect(mTrapFlashUi->widgetNameLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(text_Changed(const QString &)));
- connect(mTrapFlashUi->widgetNameLineEdit, SIGNAL(textEdited(const QString &)), this, SLOT(text_Edited(const QString &)));
- connect(mTrapFlashUi->createWidgetButton, SIGNAL(clicked(bool)), this, SLOT(createWidget()));
- }
-
- mTrapFlashDialog->show();
-}
-
-void UBTrapFlashController::text_Changed(const QString &newText)
+void UBTrapWebPageContentController::text_Changed(const QString &newText)
{
QString new_text = newText;
@@ -117,157 +93,252 @@ void UBTrapFlashController::text_Changed(const QString &newText)
if(new_text.indexOf(regExp) > -1)
{
new_text.remove(regExp);
- mTrapFlashUi->widgetNameLineEdit->setText(new_text);
- QToolTip::showText(mTrapFlashUi->widgetNameLineEdit->mapToGlobal(QPoint()), "Application name can`t contain any of the following characters:\r\n"+illegalCharList);
+ mTrapWebContentDialog->applicationNameLineEdit()->setText(new_text);
+ QToolTip::showText(mTrapWebContentDialog->applicationNameLineEdit()->mapToGlobal(QPoint()), "Application name can`t contain any of the following characters:\r\n"+illegalCharList);
}
}
-void UBTrapFlashController::text_Edited(const QString &newText)
+void UBTrapWebPageContentController::text_Edited(const QString &newText)
{
Q_UNUSED(newText);
}
-void UBTrapFlashController::hideTrapFlash()
+
+void UBTrapWebPageContentController::showTrapContent()
{
- if (mTrapFlashDialog)
+ if (!mTrapWebContentDialog)
{
- mTrapFlashDialog->hide();
+ mTrapWebContentDialog = new WBTrapWebPageContentWindow(this, mParentWidget);
+ mTrapWebContentDialog->webView()->page()->setNetworkAccessManager(UBNetworkAccessManager::defaultAccessManager());
+ mTrapWebContentDialog->webView()->settings()->setAttribute(QWebSettings::JavaEnabled, true);
+ mTrapWebContentDialog->webView()->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
+ mTrapWebContentDialog->webView()->settings()->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, true);
+ mTrapWebContentDialog->webView()->settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true);
+ mTrapWebContentDialog->webView()->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true);
+ mTrapWebContentDialog->webView()->settings()->setAttribute(QWebSettings::JavascriptCanAccessClipboard, true);
+ mTrapWebContentDialog->webView()->settings()->setAttribute(QWebSettings::DnsPrefetchEnabled, true);
}
+
+ mTrapWebContentDialog->show();
+ mTrapWebContentDialog->setUrl(UBApplication::webController->currentPageUrl());
+}
+void UBTrapWebPageContentController::hideTrapContent()
+{
+ if (mTrapWebContentDialog)
+ mTrapWebContentDialog->hide();
}
-void UBTrapFlashController::updateListOfFlashes(const QList<UBWebKitUtils::HtmlObject>& pAllFlashes)
+void UBTrapWebPageContentController::setLastWebHitTestResult(const QWebHitTestResult &result)
{
- if (mTrapFlashDialog)
+ mLastWebHitTestResult = result;
+}
+
+void UBTrapWebPageContentController::updateListOfContents(const QList<UBWebKitUtils::HtmlObject>& objects)
+{
+ if (mTrapWebContentDialog)
{
- mAvailableFlashes = pAllFlashes;
- disconnect(mTrapFlashUi->flashCombobox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectFlash(int)));
- mTrapFlashUi->flashCombobox->clear();
- mTrapFlashUi->flashCombobox->addItem(tr("Whole page"));
+ mAvaliableObjects = QList<UBWebKitUtils::HtmlObject>() << objects;
+ QComboBox *combobox = mTrapWebContentDialog->itemsComboBox();
+
+ disconnect(combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectHtmlObject(int)));
- foreach(UBWebKitUtils::HtmlObject wrapper, pAllFlashes)
+ mObjectNoToTrapByTrapWebComboboxIndex.clear();
+ combobox->clear();
+ combobox->addItem(tr("Whole page"));
+ mObjectNoToTrapByTrapWebComboboxIndex.insert(combobox->count(), 0);
+
+ for(int i = 1; i < objects.count(); i++)
{
- mTrapFlashUi->flashCombobox->addItem(widgetNameForObject(wrapper));
+ UBWebKitUtils::HtmlObject wrapper = objects.at(i);
+
+ if ("separator"== wrapper.tagName)
+ combobox->insertSeparator(combobox->count());
+ else
+ {
+ if (wrapper.objectMimeType.contains("html"))
+ continue;
+
+ mObjectNoToTrapByTrapWebComboboxIndex.insert(combobox->count(), i);
+ combobox->addItem(wrapper.objectName);
+ }
}
- connect(mTrapFlashUi->flashCombobox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectFlash(int)));
- selectFlash(mTrapFlashUi->flashCombobox->currentIndex());
+ for(int i = 1; i <= objects.count(); i++)
+ {
+ UBWebKitUtils::HtmlObject wrapper = objects.at(i-1);
+ if (UBApplication::webController->isOEmbedable(QUrl(wrapper.source)))
+ {
+ UBHttpGet *getEmbed = new UBHttpGet(this);
+ getEmbed->get(QUrl("http://www.youtube.com/oembed?url="+wrapper.source+"&format=xml"));
+ connect(getEmbed, SIGNAL(downloadFinished(bool, QUrl, QString, QByteArray, QPointF, QSize, bool)), this, SLOT(oEmbedRequestFinished(bool, QUrl, QString, QByteArray, QPointF, QSize, bool)));
+ }
+ }
+
+ connect(combobox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectHtmlObject(int)));
}
}
-
-void UBTrapFlashController::selectFlash(int pFlashIndex)
+void UBTrapWebPageContentController::selectHtmlObject(int pObjectIndex)
{
- if (pFlashIndex == 0)
+ if (pObjectIndex == 0)
{
- mTrapFlashUi->webView->setHtml(generateFullPageHtml("", false));
+ mTrapWebContentDialog->webView()->setHtml(generateFullPageHtml(mCurrentWebFrame->url()));
QVariant res = mCurrentWebFrame->evaluateJavaScript("window.document.title");
- mTrapFlashUi->widgetNameLineEdit->setText(res.toString().trimmed());
+ mTrapWebContentDialog->applicationNameLineEdit()->setText(res.toString().trimmed());
+ UBApplication::mainWindow->actionWebTrapToLibrary->setDisabled(true);
+ UBApplication::mainWindow->actionWebTrapToCurrentPage->setDisabled(true);
}
- else if (pFlashIndex > 0 && pFlashIndex <= mAvailableFlashes.size())
+ else if (pObjectIndex > 0 && pObjectIndex <= mAvaliableObjects.size())
{
- UBWebKitUtils::HtmlObject currentObject = mAvailableFlashes.at(pFlashIndex - 1);
- mTrapFlashUi->webView->setHtml(generateHtml(currentObject, "", false));
- mTrapFlashUi->widgetNameLineEdit->setText(widgetNameForObject(currentObject));
+ UBWebKitUtils::HtmlObject currentObject;
+
+ currentObject = mAvaliableObjects.at(mObjectNoToTrapByTrapWebComboboxIndex.value(pObjectIndex));
+ generatePreview(currentObject);
+
+ mTrapWebContentDialog->applicationNameLineEdit()->setText(currentObject.objectName);
+
+ UBApplication::mainWindow->actionWebTrapToLibrary->setDisabled(!currentObject.embedCode.isEmpty());
+ UBApplication::mainWindow->actionWebTrapToCurrentPage->setDisabled(!currentObject.embedCode.isEmpty());
}
}
-
-void UBTrapFlashController::createWidget()
+void UBTrapWebPageContentController::oEmbedRequestFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground)
{
- int selectedIndex = mTrapFlashUi->flashCombobox->currentIndex();
+ Q_UNUSED(pContentTypeHeader)
+ Q_UNUSED(pPos)
+ Q_UNUSED(pSize)
+ Q_UNUSED(isBackground)
- if (selectedIndex == 0)
+ if (pSuccess)
{
- // full page widget
- QString tempDir = UBFileSystemUtils::createTempDir("TrapFlashRendering");
- QDir widgetDir(tempDir + "/" + mTrapFlashUi->widgetNameLineEdit->text() + ".wgt");
+ QDomDocument response;
+
+ response.setContent(pData);
- if (widgetDir.exists() && !UBFileSystemUtils::deleteDir(widgetDir.path()))
- {
- qWarning() << "Cannot delete " << widgetDir.path();
- }
-
- widgetDir.mkpath(widgetDir.path());
-
- generateFullPageHtml(widgetDir.path(), true);
+ QString sResponse = response.toString();
+ QString sSourceUrl = sourceUrl.toString().remove("http://www.youtube.com/oembed?url=").remove("&format=xml");
- generateIcon(widgetDir.path());
- generateConfig(800, 600, widgetDir.path());
+ UBWebKitUtils::HtmlObject obj(sSourceUrl, sResponse);
+ mAvaliableObjects << obj;
- //generateDefaultPng(width, height, widgetDir.path());
+ QComboBox *combobox = mTrapWebContentDialog->itemsComboBox();
- importWidgetInLibrary(widgetDir);
-
- UBFileSystemUtils::deleteDir(tempDir);
+ mObjectNoToTrapByTrapWebComboboxIndex.insert(combobox->count(), mAvaliableObjects.count()-1);
+ combobox->addItem(tr("Embed ") + obj.objectName);
}
- else
+}
+void UBTrapWebPageContentController::prepareCurrentItemForImport(bool sendToBoard)
+{
+ int selectedIndex = mTrapWebContentDialog->itemsComboBox()->currentIndex();
+ UBWebKitUtils::HtmlObject selectedObject = mAvaliableObjects.at(mObjectNoToTrapByTrapWebComboboxIndex.value(selectedIndex));
+
+ QSize currentItemSize(selectedObject.width, selectedObject.height);
+
+ sDownloadFileDesc desc;
+ desc.isBackground = false;
+ desc.modal = false;
+ desc.dest = sendToBoard ? sDownloadFileDesc::board : sDownloadFileDesc::library;
+ desc.name = mTrapWebContentDialog->applicationNameLineEdit()->text();
+ desc.srcUrl = selectedObject.source;
+ desc.size = currentItemSize;
+ desc.contentTypeHeader = selectedObject.objectMimeType;
+ UBDownloadManager::downloadManager()->addFileToDownload(desc);
+}
+
+void UBTrapWebPageContentController::addLink(bool isOnLibrary)
+{
+ int selectedIndex = mTrapWebContentDialog->itemsComboBox()->currentIndex();
+ UBWebKitUtils::HtmlObject selectedObject = mAvaliableObjects.at(mObjectNoToTrapByTrapWebComboboxIndex.value(selectedIndex));
+ QSize size(selectedObject.width,selectedObject.height);
+ if(isOnLibrary)
{
- // flash widget
- UBWebKitUtils::HtmlObject selectedObject = mAvailableFlashes.at(selectedIndex - 1);
- UBApplication::applicationController->showBoard();
- UBApplication::boardController->downloadURL(QUrl(selectedObject.source), QString(), QPoint(0, 0), QSize(selectedObject.width, selectedObject.height));
+ if(selectedIndex == 0)
+ UBApplication::boardController->paletteManager()->featuresWidget()->createBookmark(mTrapWebContentDialog->applicationNameLineEdit()->text(),selectedObject.source);
+ else
+ UBApplication::boardController->paletteManager()->featuresWidget()->createLink(mTrapWebContentDialog->applicationNameLineEdit()->text(), selectedObject.source,size, selectedObject.objectMimeType, selectedObject.embedCode);
}
+ else
+ UBApplication::boardController->addLinkToPage(selectedObject.source, size, QPointF(), selectedObject.embedCode);
+}
- QString freezedWidgetPath = UBPlatformUtils::applicationResourcesDirectory() + "/etc/freezedWidgetWrapper.html";
- mTrapFlashUi->webView->load(QUrl::fromLocalFile(freezedWidgetPath));
-
- mTrapFlashDialog->hide();
+void UBTrapWebPageContentController::addItemToLibrary()
+{
+ mTrapWebContentDialog->setReadyForTrap(false);
+ mCurrentItemImportDestination = library;
+ prepareCurrentItemForImport(false);
+ UBApplication::applicationController->showBoard();
+ hideTrapContent();
}
+void UBTrapWebPageContentController::addItemToBoard()
+{
+ mTrapWebContentDialog->setReadyForTrap(false);
+ mCurrentItemImportDestination = board;
+ prepareCurrentItemForImport(true);
+ UBApplication::applicationController->showBoard();
+ hideTrapContent();
+}
-void UBTrapFlashController::importWidgetInLibrary(QDir pSourceDir)
+void UBTrapWebPageContentController::addLinkToLibrary()
{
- const QString userWidgetPath = UBSettings::settings()->userInteractiveDirectory() + "/" + tr("Web");
- QDir userWidgetDir(userWidgetPath);
+ mTrapWebContentDialog->setReadyForTrap(false);
+ mCurrentItemImportDestination = library;
+ addLink(true);
+ UBApplication::applicationController->showBoard();
+ hideTrapContent();
+ mTrapWebContentDialog->setReadyForTrap(true);
- if (!userWidgetDir.exists())
- {
- userWidgetDir.mkpath(userWidgetPath);
- }
+}
- QString widgetLibraryPath = userWidgetPath + "/" + mTrapFlashUi->widgetNameLineEdit->text() + ".wgt";
- QDir widgetLibraryDir(widgetLibraryPath);
+void UBTrapWebPageContentController::addLinkToBoard()
+{
+ mTrapWebContentDialog->setReadyForTrap(false);
+ mCurrentItemImportDestination = board;
+ addLink(false);
+ UBApplication::applicationController->showBoard();
+ hideTrapContent();
+ mTrapWebContentDialog->setReadyForTrap(true);
+}
- if (widgetLibraryDir.exists())
+void UBTrapWebPageContentController::updateTrapContentFromPage(QWebFrame* pCurrentWebFrame)
+{
+ if (pCurrentWebFrame && (mTrapWebContentDialog && mTrapWebContentDialog->isVisible()))
{
- if (!UBFileSystemUtils::deleteDir(widgetLibraryDir.path()))
+ QList<UBWebKitUtils::HtmlObject> list;
+ if (mTrapWebContentDialog)
{
- qWarning() << "Cannot delete old widget " << widgetLibraryDir.path();
+ list << UBWebKitUtils::HtmlObject(pCurrentWebFrame->baseUrl().toString(), widgetNameForUrl(pCurrentWebFrame->title()), QString(),"Whole Page", 800, 600);
+ list << UBWebKitUtils::HtmlObject(QString(),QString(),QString(),"separator",0,0);
+ //list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "object");
+ //list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "img");
+ list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "audio");
+ list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "video");
+ list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "source");
+ //list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "iframe");
+ list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "frame");
+ list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "a");
+ list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "embed");
+ list << UBWebKitUtils::objectsInFrameByTag(pCurrentWebFrame, "link");
}
- }
- qDebug() << "Widget imported in path " << widgetLibraryPath;
- UBFileSystemUtils::copyDir(pSourceDir.path(), widgetLibraryPath);
-
- // also add to current scene
- if (UBApplication::applicationController)
- UBApplication::applicationController->showBoard();
-
- if (UBApplication::boardController &&
- UBApplication::boardController->activeScene())
- {
- UBApplication::boardController->activeScene()->addWidget(QUrl::fromLocalFile(widgetLibraryPath));
- }
-}
+ mCurrentWebFrame = pCurrentWebFrame;
+ updateListOfContents(list);
+ mTrapWebContentDialog->applicationNameLineEdit()->setText(mCurrentWebFrame->title());
-void UBTrapFlashController::updateTrapFlashFromPage(QWebFrame* pCurrentWebFrame)
-{
- if (pCurrentWebFrame && mTrapFlashDialog && mTrapFlashDialog->isVisible())
- {
- QList<UBWebKitUtils::HtmlObject> list = UBWebKitUtils::objectsInFrame(pCurrentWebFrame);
- mCurrentWebFrame = pCurrentWebFrame;
- updateListOfFlashes(list);
+ mTrapWebContentDialog->setReadyForTrap(!list.isEmpty());
+ UBApplication::mainWindow->actionWebTrapToLibrary->setDisabled(true);
+ UBApplication::mainWindow->actionWebTrapToCurrentPage->setDisabled(true);
}
}
-QString UBTrapFlashController::generateIcon(const QString& pDirPath)
+QString UBTrapWebPageContentController::generateIcon(const QString& pDirPath)
{
QDesktopWidget* desktop = QApplication::desktop();
- QPoint webViewPosition = mTrapFlashUi->webView->mapToGlobal(mTrapFlashUi->webView->pos());
- QSize webViewSize = mTrapFlashUi->webView->size();
+ QPoint webViewPosition = mTrapWebContentDialog->webView()->mapToGlobal(mTrapWebContentDialog->webView()->pos());
+ QSize webViewSize = mTrapWebContentDialog->webView()->size();
QPixmap capture = QPixmap::grabWindow(desktop->winId(), webViewPosition.x(), webViewPosition.y()
, webViewSize.width() - 10, webViewSize.height() -10);
@@ -289,7 +360,7 @@ QString UBTrapFlashController::generateIcon(const QString& pDirPath)
}
-void UBTrapFlashController::generateConfig(int pWidth, int pHeight, const QString& pDestinationPath)
+void UBTrapWebPageContentController::generateConfig(int pWidth, int pHeight, const QString& pDestinationPath)
{
QFile configFile(pDestinationPath + "/" + "config.xml");
@@ -309,15 +380,15 @@ void UBTrapFlashController::generateConfig(int pWidth, int pHeight, const QStrin
out << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
out << "<widget xmlns=\"http://www.w3.org/ns/widgets\"" << endl;
out << " xmlns:ub=\"http://uniboard.mnemis.com/widgets\"" << endl;
- out << " identifier=\"http://uniboard.mnemis.com/" << mTrapFlashUi->widgetNameLineEdit->text() << "\"" <<endl;
+ out << " identifier=\"http://uniboard.mnemis.com/" << mTrapWebContentDialog->applicationNameLineEdit()->text() << "\"" <<endl;
out << " version=\"1.0\"" << endl;
out << " width=\"" << pWidth << "\"" << endl;
out << " height=\"" << pHeight << "\"" << endl;
out << " ub:resizable=\"true\">" << endl;
- out << " <name>" << mTrapFlashUi->widgetNameLineEdit->text() << "</name>" << endl;
- out << " <content src=\"" << mTrapFlashUi->widgetNameLineEdit->text() << ".html\"/>" << endl;
+ out << " <name>" << mTrapWebContentDialog->applicationNameLineEdit()->text() << "</name>" << endl;
+ out << " <content src=\"" << mTrapWebContentDialog->applicationNameLineEdit()->text() << ".html\"/>" << endl;
out << "</widget>" << endl;
@@ -326,159 +397,122 @@ void UBTrapFlashController::generateConfig(int pWidth, int pHeight, const QStrin
}
-QString UBTrapFlashController::generateFullPageHtml(const QString& pDirPath, bool pGenerateFile)
+QString UBTrapWebPageContentController::generateFullPageHtml(const QUrl &srcUrl)
{
-
QString htmlContentString;
- htmlContentString += "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\r\n";
+ htmlContentString = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\r\n";
htmlContentString += "<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n";
- htmlContentString += " <head>\r\n";
- htmlContentString += " <meta http-equiv=\"refresh\" content=\"0; " + mCurrentWebFrame->url().toString() + "\">\r\n";
- htmlContentString += " </head>\r\n";
- htmlContentString += " <body>\r\n";
- htmlContentString += " Redirect to target...\r\n";
- htmlContentString += " </body>\r\n";
+ htmlContentString += " <head>\r\n";
+ htmlContentString += " <meta http-equiv=\"refresh\" content=\"0; " + srcUrl.toString() + "\">\r\n";
+ htmlContentString += " </head>\r\n";
+ htmlContentString += " <body>\r\n";
+ htmlContentString += " Redirect to target...\r\n";
+ htmlContentString += " </body>\r\n";
htmlContentString += "</html>\r\n";
- if (!pGenerateFile)
- {
- return htmlContentString;
- }
- else
- {
- QString fileName = mTrapFlashUi->widgetNameLineEdit->text();
- const QString fullHtmlFileName = pDirPath + "/" + fileName + ".html";
- QDir dir(pDirPath);
- if (!dir.exists())
- {
- dir.mkpath(dir.path());
- }
- QFile widgetHtmlFile(fullHtmlFileName);
- if (widgetHtmlFile.exists())
- {
- widgetHtmlFile.remove(widgetHtmlFile.fileName());
- }
- if (!widgetHtmlFile.open(QIODevice::WriteOnly))
- {
- qWarning() << "cannot open file " << widgetHtmlFile.fileName();
- return "";
- }
- QTextStream out(&widgetHtmlFile);
- out << htmlContentString;
-
- widgetHtmlFile.close();
- return widgetHtmlFile.fileName();
- }
+ return htmlContentString;
}
-QString UBTrapFlashController::generateHtml(const UBWebKitUtils::HtmlObject& pObject,
- const QString& pDirPath, bool pGenerateFile)
+void UBTrapWebPageContentController::generatePreview(const UBWebKitUtils::HtmlObject& pObject, bool bTryToEmbed)
{
- qDebug() << pObject.source;
QUrl objectUrl(pObject.source);
QString objectFullUrl = pObject.source;
+ qDebug() << objectFullUrl;
if (!objectUrl.isValid())
{
qWarning() << "invalid URL " << pObject.source;
- return "";
+ return;
}
- if (objectUrl.isRelative())
- {
- int lastSlashIndex = mCurrentWebFrame->url().toString().lastIndexOf("/");
- QString objectPath = mCurrentWebFrame->url().toString().left(lastSlashIndex);
- objectFullUrl = objectPath+ "/" + pObject.source;
+ QString mimeType = (UBFileSystemUtils::mimeTypeFromFileName(objectFullUrl).length() == 0) ? pObject.objectMimeType : UBFileSystemUtils::mimeTypeFromFileName(objectFullUrl);
+
+ if(mimeType.contains("x-shockwave-flash")){
+ QUrl url = QUrl::fromLocalFile(UBGraphicsW3CWidgetItem::createNPAPIWrapperInDir(objectFullUrl, QDir::tempPath(), mimeType, QSize(800,600), QUuid::createUuid().toString()) + "/index.htm");
+ mTrapWebContentDialog->webView()->load(url);
+ return;
}
QString htmlContentString;
- htmlContentString += "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n";
- htmlContentString += "<html>\n";
- htmlContentString += "<head>\n";
- htmlContentString += " <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n";
- htmlContentString += "</head>\n";
+ htmlContentString = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">";
+ htmlContentString += "<html>";
+ htmlContentString += " <head>";
+ htmlContentString += " <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">";
+ htmlContentString += " </head>";
- if (!pGenerateFile)
- {
- htmlContentString += "<body bgcolor=\"rgb(180,180,180)\">\n";
- }
- else
- {
- htmlContentString += "<body>\n";
- }
+ htmlContentString += " <body bgcolor=\"rgb(180,180,180)\">";
- htmlContentString += " <div align='center'>\n";
+ htmlContentString += " <div align='center'>";
- if (mCurrentWebFrame->url().toString().contains("youtube"))
- {
- QVariant res = mCurrentWebFrame->evaluateJavaScript("window.document.getElementById('embed_code').value");
- //force windowsless mode
-
- htmlContentString += res.toString().replace("></embed>", " wmode='opaque'></embed>");
- }
- else
+ if (!pObject.embedCode.isEmpty())
{
- htmlContentString += " <object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'\n";
- htmlContentString += " codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0'\n";
- htmlContentString += " width='" + QString::number(pObject.width) + "' height='" + QString::number(pObject.height) + "'>\n";
- htmlContentString += " <param name='movie' value='" + objectFullUrl + "'>\n";
- htmlContentString += " <param name='quality' value='high'>\n";
- htmlContentString += " <param name='wmode' value='opaque'>\n";
- htmlContentString += " <embed src='" + objectFullUrl + "'\n";
- htmlContentString += " quality='high'\n";
- htmlContentString += " pluginspage='http://www.macromedia.com/go/getflashplayer'\n";
- htmlContentString += " type='application/x-shockwave-flash'\n";
- htmlContentString += " width='" + QString::number(pObject.width - 20) + "' height='" + QString::number(pObject.height - 20) + "' wmode='opaque'>\n";
- htmlContentString += " </embed>\n";
- htmlContentString += " </object>\n";
+ htmlContentString += pObject.embedCode;
}
-
- htmlContentString += " </div>\n";
- htmlContentString += "</body>\n";
- htmlContentString += "</html>\n";
-
- if (!pGenerateFile)
- {
- return htmlContentString;
+ else if(mimeType.contains("image")){
+ htmlContentString += " <img src=\"" + objectFullUrl + "\">";
}
- else
+ else if (mimeType.contains("video")){
+ htmlContentString += " <video src=\"" + objectFullUrl + "\" controls=\"controls\">";
+ }
+ else if (mimeType.contains("audio")){
+ htmlContentString += " <audio src=\"" + objectFullUrl + "\" controls=\"controls\">";
+ }
+ else if (mimeType.contains("html"))
{
- QString fileName = mTrapFlashUi->widgetNameLineEdit->text();
- const QString fullHtmlFileName = pDirPath + "/" + fileName + ".html";
- QDir dir(pDirPath);
-
- if (!dir.exists())
+ if (bTryToEmbed)
{
- dir.mkpath(dir.path());
+ QString videoId;
+
+ int videoIdStartPos = -1;
+ if (objectFullUrl.contains("watch?v="))
+ {
+ videoIdStartPos = objectFullUrl.indexOf("watch?v=") + QString("watch?v=").size();
+ }
+ else if (objectFullUrl.contains("/embed/"))
+ {
+ videoIdStartPos = objectFullUrl.indexOf("/embed/") + QString("/embed/").size();
+ }
+
+ videoId = objectFullUrl.right(objectFullUrl.size() - videoIdStartPos);
+
+ if (!videoId.isNull())
+ {
+ htmlContentString += "<iframe width=\""+QString("%1").arg((640 > pObject.width) ? 640 : pObject.width)+"\" height=\""+QString("%1").arg((480 > pObject.width) ? 480 : pObject.width)+"\" src=\"http://www.youtube.com/embed/"+videoId+"\" frameborder=\"0\" allowfullscreen></iframe>";
+ }
}
-
- QFile widgetHtmlFile(fullHtmlFileName);
-
- if (widgetHtmlFile.exists())
+ else
{
- widgetHtmlFile.remove(widgetHtmlFile.fileName());
- }
-
- if (!widgetHtmlFile.open(QIODevice::WriteOnly))
- {
- qWarning() << "cannot open file " << widgetHtmlFile.fileName();
- return "";
+ htmlContentString = generateFullPageHtml(objectFullUrl);
+ mTrapWebContentDialog->webView()->setHtml(htmlContentString);
+ return;
+ //htmlContentString +=" <iframe width=\"" + QString("%1").arg(mCurrentWebFrame->geometry().width()) + "\" height=\"" + QString("%1").arg(mCurrentWebFrame->geometry().height()) + "\" frameborder=0 src=\""+objectFullUrl+"\">";
}
+ }
+ else if (mCurrentWebFrame->url().toString().contains("youtube")){
+ QVariant res = mCurrentWebFrame->evaluateJavaScript("window.document.getElementById('embed_code').value");
- QTextStream out(&widgetHtmlFile);
- out << htmlContentString;
+ //force windowsless mode
- widgetHtmlFile.close();
- return widgetHtmlFile.fileName();
+ QString s = res.toString();
+ htmlContentString += s.replace("></embed>", " wmode='opaque'></embed>");
}
+ else
+ qWarning() << "not supported";
+
+ htmlContentString += " </div>";
+ htmlContentString += "</body>";
+ htmlContentString += "</html>";
+
+ qDebug() << htmlContentString;
+ mTrapWebContentDialog->webView()->setHtml(htmlContentString);
}
-QString UBTrapFlashController::widgetNameForObject(UBWebKitUtils::HtmlObject pObject)
+QString UBTrapWebPageContentController::widgetNameForUrl(QString pObjectUrl)
{
- QString url = pObject.source;
+ QString url = pObjectUrl;
int parametersIndex = url.indexOf("?");
if(parametersIndex != -1)
url = url.left(parametersIndex);
@@ -489,4 +523,3 @@ QString UBTrapFlashController::widgetNameForObject(UBWebKitUtils::HtmlObject pOb
return result;
}
-
diff --git a/Sankore-3.1/src/web/UBTrapFlashController.h b/Sankore-3.1/src/web/UBTrapFlashController.h
index 44b53f1..3ff46b0 100644
--- a/Sankore-3.1/src/web/UBTrapFlashController.h
+++ b/Sankore-3.1/src/web/UBTrapFlashController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,11 +20,13 @@
*/
+
#ifndef UBTRAPFLASHCONTROLLER_H_
#define UBTRAPFLASHCONTROLLER_H_
#include <QtGui>
#include "UBWebKitUtils.h"
+#include "web/browser/WBTrapWebPageContent.h"
namespace Ui
{
@@ -32,46 +34,65 @@ namespace Ui
}
-class UBTrapFlashController : public QObject
+class UBTrapWebPageContentController : public QObject
{
- Q_OBJECT;
+ Q_OBJECT
+
+ enum importDestination
+ {
+ library = 0,
+ board
+ };
+
+
public:
- UBTrapFlashController(QWidget* parent = 0);
- virtual ~UBTrapFlashController();
+ UBTrapWebPageContentController(QWidget* parent = 0);
+ virtual ~UBTrapWebPageContentController();
- void showTrapFlash();
- void hideTrapFlash();
+ void showTrapContent();
+ void hideTrapContent();
+
+ void setLastWebHitTestResult(const QWebHitTestResult &result);
public slots:
- void updateTrapFlashFromPage(QWebFrame* pCurrentWebFrame);
+ void updateTrapContentFromPage(QWebFrame* pCurrentWebFrame);
void text_Changed(const QString &);
void text_Edited(const QString &);
-
+ void addItemToLibrary();
+ void addItemToBoard();
+ void addLinkToLibrary();
+ void addLinkToBoard();
private slots:
- void selectFlash(int pFlashIndex);
- void createWidget();
+ void selectHtmlObject(int pObjectIndex);
+ void oEmbedRequestFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData, QPointF pPos, QSize pSize, bool isBackground);
private:
- void updateListOfFlashes(const QList<UBWebKitUtils::HtmlObject>& pAllFlashes);
+ void addLink(bool isOnLibrary);
+ void prepareCurrentItemForImport(bool sendToBoard);
+ void updateListOfContents(const QList<UBWebKitUtils::HtmlObject>& objects);
- QString widgetNameForObject(UBWebKitUtils::HtmlObject pObject);
+ QString widgetNameForUrl(QString pObjectUrl);
- QString generateFullPageHtml(const QString& pDirPath, bool pGenerateFile);
- QString generateHtml(const UBWebKitUtils::HtmlObject& pObject, const QString& pDirPath, bool pGenerateFile);
+ QString generateFullPageHtml(const QUrl &srcUrl);
+ void generatePreview(const UBWebKitUtils::HtmlObject& pObject, bool bTryToEmbed = false);
QString generateIcon(const QString& pDirPath);
void generateConfig(int pWidth, int pHeight, const QString& pDestinationPath);
- void importWidgetInLibrary(QDir pSourceDir);
- Ui::trapFlashDialog* mTrapFlashUi;
- QDialog* mTrapFlashDialog;
QWidget* mParentWidget;
QWebFrame* mCurrentWebFrame;
- QList<UBWebKitUtils::HtmlObject> mAvailableFlashes;
+ QList<UBWebKitUtils::HtmlObject> mAvaliableObjects;
+ QMap<int, int> mObjectNoToTrapByTrapWebComboboxIndex;
+
+ WBTrapWebPageContentWindow *mTrapWebContentDialog;
+ QWebHitTestResult mLastWebHitTestResult;
+
+ QUrl mCurrentItemUrl;
+ importDestination mCurrentItemImportDestination;
};
diff --git a/Sankore-3.1/src/web/UBWebController.cpp b/Sankore-3.1/src/web/UBWebController.cpp
index 9a57597..d636db5 100644
--- a/Sankore-3.1/src/web/UBWebController.cpp
+++ b/Sankore-3.1/src/web/UBWebController.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include <QDomDocument>
#include <QXmlQuery>
@@ -64,13 +65,13 @@ UBWebController::UBWebController(UBMainWindow* mainWindow)
, mMainWindow(mainWindow)
, mCurrentWebBrowser(0)
, mBrowserWidget(0)
- , mTrapFlashController(0)
+ , mTrapContentController(0)
, mToolsCurrentPalette(0)
, mToolsPalettePositionned(false)
, mDownloadViewIsVisible(false)
{
connect(mMainWindow->actionWebTools, SIGNAL(toggled(bool)), this, SLOT(toggleWebToolsPalette(bool)));
-
+ connect(mMainWindow->actionBookmark, SIGNAL(triggered()), this, SLOT(onActionBookmark()));
mStackedWidget = new QStackedWidget();
mStackedWidget->addWidget(new QWidget(mStackedWidget));
mStackedWidget->addWidget(new QWidget(mStackedWidget));
@@ -159,7 +160,7 @@ void UBWebController::webBrowserInstance()
adaptToolBar();
- mTrapFlashController = new UBTrapFlashController((*mCurrentWebBrowser));
+ mTrapContentController = new UBTrapWebPageContentController((*mCurrentWebBrowser));
connect((*mCurrentWebBrowser), SIGNAL(activeViewPageChanged()), this, SLOT(activePageChanged()));
@@ -221,7 +222,7 @@ void UBWebController::tutorialWebInstance()
mStackedWidget->insertWidget(Tutorial, (*mCurrentWebBrowser));
adaptToolBar();
- mTrapFlashController = new UBTrapFlashController((*mCurrentWebBrowser));
+ mTrapContentController = new UBTrapWebPageContentController((*mCurrentWebBrowser));
connect((*mCurrentWebBrowser), SIGNAL(activeViewPageChanged()), this, SLOT(activePageChanged()));
(*mCurrentWebBrowser)->loadUrl(currentUrl);
@@ -231,7 +232,7 @@ void UBWebController::tutorialWebInstance()
}
else
- (*mCurrentWebBrowser)->loadUrl(currentUrl);
+ (*mCurrentWebBrowser)->loadUrl(currentUrl);
mStackedWidget->setCurrentIndex(Tutorial);
UBApplication::applicationController->setMirrorSourceWidget((*mCurrentWebBrowser)->paintWidget());
@@ -281,7 +282,7 @@ void UBWebController::paraschoolWebInstance()
adaptToolBar();
- mTrapFlashController = new UBTrapFlashController((*mCurrentWebBrowser));
+ mTrapContentController = new UBTrapWebPageContentController((*mCurrentWebBrowser));
connect((*mCurrentWebBrowser), SIGNAL(activeViewPageChanged()), this, SLOT(activePageChanged()));
(*mCurrentWebBrowser)->loadUrl(currentUrl);
@@ -326,31 +327,19 @@ void UBWebController::setSourceWidget(QWidget* pWidget)
UBApplication::applicationController->setMirrorSourceWidget(pWidget);
}
-
-void UBWebController::trapFlash()
-{
- mTrapFlashController->showTrapFlash();
- activePageChanged();
-}
-
-
void UBWebController::activePageChanged()
{
if (mCurrentWebBrowser && (*mCurrentWebBrowser)->currentTabWebView())
{
- if (mTrapFlashController && (*mCurrentWebBrowser)->currentTabWebView()->page())
+ if (mTrapContentController && (*mCurrentWebBrowser)->currentTabWebView()->page())
{
- mTrapFlashController->updateTrapFlashFromPage((*mCurrentWebBrowser)->currentTabWebView()->page()->currentFrame());
+ mTrapContentController->updateTrapContentFromPage((*mCurrentWebBrowser)->currentTabWebView()->page()->currentFrame());
}
mMainWindow->actionWebTrap->setChecked(false);
QUrl latestUrl = (*mCurrentWebBrowser)->currentTabWebView()->url();
- // TODO : Uncomment the next line to continue the youtube button bugfix
- //UBApplication::mainWindow->actionWebOEmbed->setEnabled(hasEmbeddedContent());
- // And remove this line once the previous one is uncommented
- UBApplication::mainWindow->actionWebOEmbed->setEnabled(isOEmbedable(latestUrl));
UBApplication::mainWindow->actionEduMedia->setEnabled(isEduMedia(latestUrl));
emit activeWebPageChanged((*mCurrentWebBrowser)->currentTabWebView());
@@ -452,14 +441,13 @@ void UBWebController::setupPalettes()
UBApplication::boardController->paletteManager()->mKeyboardPalette, SLOT(onDeactivated()));
#endif
- connect(mMainWindow->actionWebTrapFlash, SIGNAL(triggered()), this, SLOT(trapFlash()));
connect(mMainWindow->actionWebCustomCapture, SIGNAL(triggered()), this, SLOT(customCapture()));
connect(mMainWindow->actionWebWindowCapture, SIGNAL(triggered()), this, SLOT(captureWindow()));
- connect(mMainWindow->actionWebOEmbed, SIGNAL(triggered()), this, SLOT(captureoEmbed()));
connect(mMainWindow->actionEduMedia, SIGNAL(triggered()), this, SLOT(captureEduMedia()));
connect(mMainWindow->actionWebShowHideOnDisplay, SIGNAL(toggled(bool)), this, SLOT(toogleMirroring(bool)));
- connect(mMainWindow->actionWebTrap, SIGNAL(toggled(bool)), this, SLOT(toggleWebTrap(bool)));
+ // connect(mMainWindow->actionWebTrap, SIGNAL(toggled(bool)), this, SLOT(toggleWebTrap(bool)));
+ connect(mMainWindow->actionWebTrapContent, SIGNAL(triggered()), this, SLOT(webTrapContent()));
(*mToolsCurrentPalette)->hide();
(*mToolsCurrentPalette)->adjustSizeAndPosition();
@@ -486,6 +474,12 @@ void UBWebController::toggleWebTrap(bool checked)
}
}
+void UBWebController::webTrapContent()
+{
+ mTrapContentController->showTrapContent();
+ activePageChanged();
+}
+
void UBWebController::toggleWebToolsPalette(bool checked)
{
(*mToolsCurrentPalette)->setVisible(checked);
@@ -576,6 +570,20 @@ void UBWebController::showTabAtTop(bool attop)
(*mCurrentWebBrowser)->showTabAtTop(attop);
}
+void UBWebController::captureoEmbed(QUrl currentUrl)
+{
+ if (isOEmbedable(currentUrl))
+ {
+ UBGraphicsW3CWidgetItem * widget = UBApplication::boardController->activeScene()->addOEmbed(currentUrl);
+
+ if(widget)
+ {
+ UBApplication::applicationController->showBoard();
+ UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector);
+ }
+ }
+}
+
void UBWebController::captureoEmbed()
{
if ( mCurrentWebBrowser && (*mCurrentWebBrowser) && (*mCurrentWebBrowser)->currentTabWebView()){
@@ -718,7 +726,12 @@ bool UBWebController::isOEmbedable(const QUrl& pUrl)
foreach(QString provider, mOEmbedProviders)
{
if(urlAsString.contains(provider))
- return true;
+ {
+ if ("youtube.com" == provider)
+ return (urlAsString.contains("/embed/") || urlAsString.contains("watch?v="));
+ else
+ return true;
+ }
}
return false;
@@ -768,6 +781,11 @@ QWebView* UBWebController::createNewTab()
return (*mCurrentWebBrowser)->createNewTab();
}
+QUrl UBWebController::currentPageUrl() const
+{
+ return (*mCurrentWebBrowser)->currentTabWebView()->url();
+}
+
void UBWebController::copy()
{
@@ -793,6 +811,15 @@ void UBWebController::paste()
}
+void UBWebController::onActionBookmark()
+{
+ QString title = (*mCurrentWebBrowser)->currentTabWebView()->page()->mainFrame()->title();
+ QString url = (*mCurrentWebBrowser)->currentTabWebView()->page()->mainFrame()->url().toString();
+ if(title.isEmpty())
+ title = url;
+ UBApplication::boardController->paletteManager()->featuresWidget()->createBookmark(title, url);
+}
+
void UBWebController::cut()
{
if (mCurrentWebBrowser && (*mCurrentWebBrowser) && (*mCurrentWebBrowser)->currentTabWebView())
diff --git a/Sankore-3.1/src/web/UBWebController.h b/Sankore-3.1/src/web/UBWebController.h
index c2eae74..608bd1f 100644
--- a/Sankore-3.1/src/web/UBWebController.h
+++ b/Sankore-3.1/src/web/UBWebController.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWEBCONTROLLER_H_
#define UBWEBCONTROLLER_H_
@@ -30,7 +31,7 @@
class WBBrowserWindow;
class UBApplication;
-class UBTrapFlashController;
+class UBTrapWebPageContentController;
class UBMainWindow;
class UBWebToolsPalette;
class WBWebView;
@@ -64,9 +65,9 @@ class UBWebController : public QObject
void show(WebInstance type = UBWebController::WebBrowser);
- WBBrowserWindow* GetCurrentWebBrowser()
- {
- if( mCurrentWebBrowser != NULL ) return *mCurrentWebBrowser;
+ WBBrowserWindow* GetCurrentWebBrowser()
+ {
+ if( mCurrentWebBrowser != NULL ) return *mCurrentWebBrowser;
else return NULL;
};
@@ -90,6 +91,7 @@ class UBWebController : public QObject
return mBrowserWidget;
}
+ void captureoEmbed(QUrl currentUrl);
void captureoEmbed();
void captureEduMedia();
@@ -119,11 +121,9 @@ class UBWebController : public QObject
WBBrowserWindow** mCurrentWebBrowser;
QWidget* mBrowserWidget;
- UBTrapFlashController* mTrapFlashController;
+ UBTrapWebPageContentController* mTrapContentController;
UBWebToolsPalette** mToolsCurrentPalette;
UBWebToolsPalette* mToolsPaletteList[TotalNumberOfWebInstances];
-// UBKeyboardPalette** mKeyboardCurrentPalette;
-// UBKeyboardPalette* mKeyboardPaletteList[TotalNumberOfWebInstances];
bool mToolsPalettePositionned;
bool mToolsPalettePositionnedList[TotalNumberOfWebInstances];
@@ -138,12 +138,14 @@ class UBWebController : public QObject
private slots:
void activePageChanged();
- void trapFlash();
void toggleWebTrap(bool checked);
+ void webTrapContent();
+
void onOEmbedParsed(QVector<sOEmbedContent> contents);
-// void showKeyboard(bool checked);
+
+ void onActionBookmark();
signals:
/**
diff --git a/Sankore-3.1/src/web/UBWebKitUtils.cpp b/Sankore-3.1/src/web/UBWebKitUtils.cpp
index 85ee2ef..740b29e 100644
--- a/Sankore-3.1/src/web/UBWebKitUtils.cpp
+++ b/Sankore-3.1/src/web/UBWebKitUtils.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,9 +20,12 @@
*/
-#include "UBWebKitUtils.h"
+#include "UBWebKitUtils.h"
+#include "frameworks/UBFileSystemUtils.h"
#include "core/memcheck.h"
+#include "core/UBApplication.h"
+#include "web/UBWebController.h"
UBWebKitUtils::UBWebKitUtils()
{
@@ -34,60 +37,218 @@ UBWebKitUtils::~UBWebKitUtils()
// NOOP
}
-QList<UBWebKitUtils::HtmlObject> UBWebKitUtils::objectsInFrame(QWebFrame* frame)
+QList<UBWebKitUtils::HtmlObject> UBWebKitUtils::objectsInFrameByTag(QWebFrame* frame, QString tagName)
{
QList<UBWebKitUtils::HtmlObject> htmlObjects;
if (frame)
{
- QVariant res = frame->evaluateJavaScript("window.document.getElementsByTagName('embed').length");
+ QWebElementCollection elements = frame->documentElement().findAll(tagName);
+ for (int i = 0; i < elements.count(); i++)
+ {
+ QWebElement element = elements.at(i);
+ QUrl baseUrl = frame->url();
+
+ QString mimeType("");
+ QString name("");
+ bool ok;
+
+ int width = element.attribute("width").toInt(&ok);
+ if (width == 0 || !ok)
+ width = element.geometry().width() ? element.geometry().width() : 640;
+
+ int heigth = element.attribute("height").toInt(&ok);
+ if (heigth == 0 || !ok)
+ heigth = element.geometry().height()? element.geometry().height(): 480;
+
+ if(tagName == "embed" || tagName == "object" || tagName.contains("frame")){
+ QStringList urlsToCheck = getUrls(baseUrl,element);
+ foreach(QString url, urlsToCheck){
+ QString name = widgetNameFromUrl(url);
+ QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(url);
+ if(!name.isEmpty() && !mimeType.isEmpty()){
+ UBWebKitUtils::HtmlObject obj(url, name, mimeType, tagName, width, heigth);
+ if (!htmlObjects.contains(obj))
+ htmlObjects << obj;
+ }
+ }
+ }
- bool ok;
- int count = res.toInt(&ok);
- if (ok)
- {
- for (int i = 0; i < count; i++)
+ QUrl relativeUrl = QUrl(element.attribute("src"));
+
+ // for object
+ if(relativeUrl.toString().isEmpty())
+ relativeUrl = QUrl(element.attribute("href"));
+
+ // for object
+ if(relativeUrl.toString().isEmpty())
+ relativeUrl = QUrl(element.attribute("data"));
+ QString source = baseUrl.resolved(relativeUrl).toString();
+
+ if (source.trimmed().length() == 0)
+ continue;
+
+ mimeType = element.attribute("type");
+ if(mimeType.isEmpty()){
+ QString tmp = source;
+ tmp = (tmp.indexOf("?") != -1) ? tmp.left(tmp.indexOf("?")) : tmp;
+ mimeType = UBFileSystemUtils::mimeTypeFromFileName(tmp);
+ }
+ if(mimeType.isEmpty()){
+ if(element.attribute("rel") != "shortlink")
+ mimeType = "html";
+ else
+ continue;
+ }
+
+
+ if (UBApplication::webController->isOEmbedable(QUrl(source)))
+ name = element.attribute("title");
+ else
{
- QString queryWidth = QString("window.document.getElementsByTagName('embed')[%1].width").arg(i);
+ if(name.isEmpty())
+ name = widgetNameFromUrl(source);
+ if(name.isEmpty())
+ name = element.toPlainText();
+ }
- QString queryHeigth = QString("window.document.getElementsByTagName('embed')[%1].height").arg(i);
+ if(name.isEmpty())
+ continue;
+
+ UBWebKitUtils::HtmlObject obj(source, name, mimeType, tagName, width, heigth);
+ if (!htmlObjects.contains(obj))
+ {
+ // filtering wanted content
+ if (obj.objectMimeType.contains("html")
+ ||obj.objectMimeType.contains("audio")
+ || obj.objectMimeType.contains("video")
+ || obj.objectMimeType.contains("flash"))
+ htmlObjects << obj;
+ }
+ }
+ if(htmlObjects.count() != 0)
+ htmlObjects << UBWebKitUtils::HtmlObject(QString(),QString(),QString(),"separator",0,0);
+ }
- QString querySource = QString("window.document.getElementsByTagName('embed')[%1].src").arg(i);
+ return htmlObjects;
+}
- res = frame->evaluateJavaScript(queryWidth);
- int width = res.toInt(&ok);
- if (width == 0 || !ok)
- {
- qDebug() << "Width is not defined in pixel. 640 will be used";
- width = 640;
- }
+QString UBWebKitUtils::widgetNameFromUrl(QString pObjectUrl)
+{
+ QString url = pObjectUrl;
+ int parametersIndex = url.indexOf("?");
+ if(parametersIndex != -1)
+ url = url.left(parametersIndex);
+ int lastSlashIndex = url.lastIndexOf("/");
- res = frame->evaluateJavaScript(queryHeigth);
+ QString result = url.right(url.length() - lastSlashIndex);
+ result = UBFileSystemUtils::cleanName(result);
- int heigth = res.toInt(&ok);
- if (heigth == 0 || !ok)
- {
- qDebug() << "Height is not defined in pixel. 480 will be used";
- heigth = 480;
- }
- res = frame->evaluateJavaScript(querySource);
+ return result;
+}
- QUrl baseUrl = frame->url();
- QUrl relativeUrl = QUrl(res.toString());
+QStringList UBWebKitUtils::getArgumentsValues(QString& string)
+{
+ QStringList result;
+ QStringList arguments = string.split("?");
+ foreach(QString eachValue, arguments){
+ QStringList keyValueString = eachValue.split("=");
+ if(keyValueString.count() == 2)
+ result << keyValueString.at(1);
+ }
- QString source = baseUrl.resolved(relativeUrl).toString();
+ return result;
+}
- if (source.trimmed().length() == 0)
- continue;
+QStringList UBWebKitUtils::validUrl(QUrl& baseUrl,QStringList& list)
+{
+ QStringList result;
+ foreach(QString eachString, list){
+ QUrl url(eachString);
+ if(url.isValid() && !url.isRelative())
+ result << eachString;
+ if(baseUrl.resolved(url).isValid())
+ result << baseUrl.resolved(url).toString();
+ }
+ return result;
+}
- htmlObjects << UBWebKitUtils::HtmlObject(source, width, heigth);
- }
- }
+QStringList UBWebKitUtils::getUrls(QUrl& baseUrl,QWebElement& element)
+{
+ QStringList result;
+ QString src = element.attribute("src");
+ if(!src.isEmpty()){
+ QStringList values = getArgumentsValues(src);
+ result << validUrl(baseUrl,values);
}
+ QString href = element.attribute("href");
+ if(!href.isEmpty()){
+ QStringList values = getArgumentsValues(href);
+ result << validUrl(baseUrl,values);
+ }
+ return result;
+}
- return htmlObjects;
+UBWebKitUtils::HtmlObject::HtmlObject()
+: width(0)
+, height(0)
+{
+ // NOOP
+}
+
+UBWebKitUtils::HtmlObject::HtmlObject(const QString &pSource, const QString &pObjectName, const QString &pObjectMimeType, const QString &pTagName, int pWidth, int pHeight)
+: source(pSource)
+, tagName(pTagName)
+, objectName(pObjectName)
+, objectMimeType(pObjectMimeType)
+, width(pWidth)
+, height(pHeight)
+{
+ // NOOP
}
+#include <QDomDocument>
+UBWebKitUtils::HtmlObject::HtmlObject(const QString &pSource, const QString &metaDataString)
+ : width(640)
+ , height(480)
+{
+ QDomDocument embedAnswerDomDoc;
+ embedAnswerDomDoc.setContent(metaDataString);
+
+ QDomElement e = embedAnswerDomDoc.firstChild().nextSibling().firstChildElement();
+ while(!e.isNull())
+ {
+ if ( "html" == e.tagName().toLower())
+ embedCode = e.text();
+
+ if ( "title" == e.tagName().toLower())
+ objectName = e.text();
+
+ if ( "width" == e.tagName().toLower())
+ width = e.text().toInt();
+
+ if ( "height" == e.tagName().toLower())
+ height = e.text().toInt();
+
+ if ("type" == e.tagName().toLower())
+ objectMimeType = e.text();
+
+ e = e.nextSiblingElement();
+ }
+
+ source = pSource;
+}
+
+bool UBWebKitUtils::HtmlObject::operator == (const HtmlObject &obj)
+{
+ return source == obj.source
+ && width == obj.width
+ && height == obj.height
+ && tagName == obj.tagName
+ && objectName == obj.objectName
+ && objectMimeType == obj.objectMimeType
+ && embedCode == obj.embedCode;
+}
diff --git a/Sankore-3.1/src/web/UBWebKitUtils.h b/Sankore-3.1/src/web/UBWebKitUtils.h
index 21721ce..c0fa340 100644
--- a/Sankore-3.1/src/web/UBWebKitUtils.h
+++ b/Sankore-3.1/src/web/UBWebKitUtils.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWEBKITUTILS_H_
#define UBWEBKITUTILS_H_
@@ -35,21 +36,27 @@ class UBWebKitUtils
{
public:
- HtmlObject(const QString& pSource, int pWidth, int pHeight)
- : source(pSource)
- , width(pWidth)
- , height(pHeight)
- {
- // NOOP
- }
+ HtmlObject();
+ HtmlObject(const QString &pSource, const QString &pObjectName, const QString &pObjectMimeType, const QString &pTagName, int pWidth, int pHeight);
+ HtmlObject(const QString &pSource, const QString &metaDataString);
QString source;
+ QString tagName;
+ QString objectName;
+ QString objectMimeType;
+ QString embedCode;
int width;
int height;
- };
- static QList<UBWebKitUtils::HtmlObject> objectsInFrame(QWebFrame* frame);
+ bool operator == (const HtmlObject &obj);
+
+ };
+ static QString widgetNameFromUrl(QString pObjectUrl);
+ static QList<UBWebKitUtils::HtmlObject> objectsInFrameByTag(QWebFrame* frame, QString tagName);
+ static QStringList validUrl(QUrl& baseUrl,QStringList& list);
+ static QStringList getUrls(QUrl& baseUrl,QWebElement& element);
+ static QStringList getArgumentsValues(QString& string);
};
diff --git a/Sankore-3.1/src/web/UBWebPage.cpp b/Sankore-3.1/src/web/UBWebPage.cpp
index 8308b83..6597317 100644
--- a/Sankore-3.1/src/web/UBWebPage.cpp
+++ b/Sankore-3.1/src/web/UBWebPage.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "UBWebPage.h"
#include <QtCore>
diff --git a/Sankore-3.1/src/web/UBWebPage.h b/Sankore-3.1/src/web/UBWebPage.h
index 0a1e325..e470039 100644
--- a/Sankore-3.1/src/web/UBWebPage.h
+++ b/Sankore-3.1/src/web/UBWebPage.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWEBPAGE_H_
#define UBWEBPAGE_H_
diff --git a/Sankore-3.1/src/web/UBWebPluginWidget.cpp b/Sankore-3.1/src/web/UBWebPluginWidget.cpp
index 8aa1d60..7128b46 100644
--- a/Sankore-3.1/src/web/UBWebPluginWidget.cpp
+++ b/Sankore-3.1/src/web/UBWebPluginWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include <QtGui>
#include "pdf/UBWebPluginPDFWidget.h"
diff --git a/Sankore-3.1/src/web/UBWebPluginWidget.h b/Sankore-3.1/src/web/UBWebPluginWidget.h
index 1d5ca36..333783b 100644
--- a/Sankore-3.1/src/web/UBWebPluginWidget.h
+++ b/Sankore-3.1/src/web/UBWebPluginWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef UBWEBPLUGINWIDGET_H
#define UBWEBPLUGINWIDGET_H
diff --git a/Sankore-3.1/src/web/browser/WBBrowserWindow.cpp b/Sankore-3.1/src/web/browser/WBBrowserWindow.cpp
index c06d517..d3bfdd3 100644
--- a/Sankore-3.1/src/web/browser/WBBrowserWindow.cpp
+++ b/Sankore-3.1/src/web/browser/WBBrowserWindow.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBBrowserWindow.h b/Sankore-3.1/src/web/browser/WBBrowserWindow.h
index 1e78445..746dad5 100644
--- a/Sankore-3.1/src/web/browser/WBBrowserWindow.h
+++ b/Sankore-3.1/src/web/browser/WBBrowserWindow.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBChaseWidget.cpp b/Sankore-3.1/src/web/browser/WBChaseWidget.cpp
index eb5a017..7d7c841 100644
--- a/Sankore-3.1/src/web/browser/WBChaseWidget.cpp
+++ b/Sankore-3.1/src/web/browser/WBChaseWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBChaseWidget.h b/Sankore-3.1/src/web/browser/WBChaseWidget.h
index 3922fc3..7252fe8 100644
--- a/Sankore-3.1/src/web/browser/WBChaseWidget.h
+++ b/Sankore-3.1/src/web/browser/WBChaseWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBDownloadManager.cpp b/Sankore-3.1/src/web/browser/WBDownloadManager.cpp
index 0579f06..6692cc4 100644
--- a/Sankore-3.1/src/web/browser/WBDownloadManager.cpp
+++ b/Sankore-3.1/src/web/browser/WBDownloadManager.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBDownloadManager.h b/Sankore-3.1/src/web/browser/WBDownloadManager.h
index b6da6d3..16fdb96 100644
--- a/Sankore-3.1/src/web/browser/WBDownloadManager.h
+++ b/Sankore-3.1/src/web/browser/WBDownloadManager.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBEditTableView.cpp b/Sankore-3.1/src/web/browser/WBEditTableView.cpp
index 699e481..88bede0 100644
--- a/Sankore-3.1/src/web/browser/WBEditTableView.cpp
+++ b/Sankore-3.1/src/web/browser/WBEditTableView.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBEditTableView.h b/Sankore-3.1/src/web/browser/WBEditTableView.h
index efcd6d9..691d44c 100644
--- a/Sankore-3.1/src/web/browser/WBEditTableView.h
+++ b/Sankore-3.1/src/web/browser/WBEditTableView.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBHistory.cpp b/Sankore-3.1/src/web/browser/WBHistory.cpp
index bb7ecd0..7cd455f 100644
--- a/Sankore-3.1/src/web/browser/WBHistory.cpp
+++ b/Sankore-3.1/src/web/browser/WBHistory.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBHistory.h b/Sankore-3.1/src/web/browser/WBHistory.h
index 96abf51..e8a6afd 100644
--- a/Sankore-3.1/src/web/browser/WBHistory.h
+++ b/Sankore-3.1/src/web/browser/WBHistory.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBModelMenu.cpp b/Sankore-3.1/src/web/browser/WBModelMenu.cpp
index a51cfb1..4561baa 100644
--- a/Sankore-3.1/src/web/browser/WBModelMenu.cpp
+++ b/Sankore-3.1/src/web/browser/WBModelMenu.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBModelMenu.h b/Sankore-3.1/src/web/browser/WBModelMenu.h
index d58854c..71a58bf 100644
--- a/Sankore-3.1/src/web/browser/WBModelMenu.h
+++ b/Sankore-3.1/src/web/browser/WBModelMenu.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBSearchLineEdit.cpp b/Sankore-3.1/src/web/browser/WBSearchLineEdit.cpp
index 3127ad3..a74d12d 100644
--- a/Sankore-3.1/src/web/browser/WBSearchLineEdit.cpp
+++ b/Sankore-3.1/src/web/browser/WBSearchLineEdit.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBSearchLineEdit.h b/Sankore-3.1/src/web/browser/WBSearchLineEdit.h
index c1c8df8..af16050 100644
--- a/Sankore-3.1/src/web/browser/WBSearchLineEdit.h
+++ b/Sankore-3.1/src/web/browser/WBSearchLineEdit.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBSqueezeLabel.cpp b/Sankore-3.1/src/web/browser/WBSqueezeLabel.cpp
index d677741..e1de11d 100644
--- a/Sankore-3.1/src/web/browser/WBSqueezeLabel.cpp
+++ b/Sankore-3.1/src/web/browser/WBSqueezeLabel.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBSqueezeLabel.h b/Sankore-3.1/src/web/browser/WBSqueezeLabel.h
index 99b1c9b..f1ac530 100644
--- a/Sankore-3.1/src/web/browser/WBSqueezeLabel.h
+++ b/Sankore-3.1/src/web/browser/WBSqueezeLabel.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBTabWidget.cpp b/Sankore-3.1/src/web/browser/WBTabWidget.cpp
index ecadffa..eafd0b1 100644
--- a/Sankore-3.1/src/web/browser/WBTabWidget.cpp
+++ b/Sankore-3.1/src/web/browser/WBTabWidget.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -259,6 +260,26 @@ WBTabWidget::WBTabWidget(QWidget *parent)
mLineEdits->setMinimumWidth(200);
QSizePolicy spolicy = mLineEdits->sizePolicy();
mLineEdits->setSizePolicy(QSizePolicy::Maximum, spolicy.verticalPolicy());
+
+ QPushButton *plusButton = new QPushButton(this);
+ plusButton->setObjectName("addTabButton");
+ plusButton->setIcon(mAddTabIcon);
+ plusButton->setStyleSheet(" QPushButton{ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d3d3d3, stop: 1 #c4c4c4); \
+ border: 1px solid #888888; \
+ border-bottom: none; \
+ border-top-left-radius: 3px; \
+ border-top-right-radius: 3px; \
+ min-width: 15px; \
+ max-width: 15px; \
+ margin: 2px; \
+ margin-top: 6px; \
+ margin-bottom: 0px; \
+ padding: 4px; \
+ height: 14px;}");
+
+ setCornerWidget(plusButton, Qt::TopLeftCorner);
+
+ connect(plusButton, SIGNAL(released()), this, SLOT(newTab()));
}
void WBTabWidget::clear()
@@ -651,13 +672,7 @@ void WBTabWidget::contextMenuEvent(QContextMenuEvent *event)
void WBTabWidget::mouseReleaseEvent(QMouseEvent *event)
{
- QRect addTabRect = addTabButtonRect();
-
- if (addTabRect.contains(event->pos()))
- {
- newTab();
- }
- else if (event->button() == Qt::MidButton && !childAt(event->pos())
+ if (event->button() == Qt::MidButton && !childAt(event->pos())
// Remove the line below when QTabWidget does not have a one pixel frame
&& event->pos().y() < (tabBar()->y() + tabBar()->height()))
{
@@ -852,45 +867,4 @@ QRect WBTabWidget::addTabButtonRect()
QRect r(x + 3, y + 6 , 25, lastTabRect.height() - 8);
return r;
-}
-
-
-void WBTabWidget::paintEvent ( QPaintEvent * event )
-{
- QPainter painter(this);
-
- // all this is in synch with CSS QTabBar ...
- QLinearGradient linearGrad(QPointF(0, 0), QPointF(0, 1));
- linearGrad.setColorAt(0, QColor("#d3d3d3"));
- linearGrad.setColorAt(1, QColor("#dddddd"));
- painter.setBrush(linearGrad);
-
- QRect r = addTabButtonRect();
-
- painter.setPen(QColor("#888888"));
- painter.drawRoundedRect(r, 3, 3);
-
- painter.setPen(Qt::NoPen);
- painter.drawRect(QRect(r.x(), r.y() + r.height() / 2, r.width() + 1, r.height() / 2 + 1));
-
- painter.setPen(QColor("#888888"));
- painter.drawLine(r.x(), r.y() + r.height() / 2, r.x(), r.bottom());
- painter.drawLine(r.right() + 1, r.y() + r.height() / 2, r.right() + 1, r.bottom());
-
- if (tabPosition() == QTabWidget::South)
- {
- QPen pen = painter.pen();
- pen.setColor(QColor("#b3b3b3"));
- pen.setWidth(2);
- painter.setPen(pen);
- painter.drawLine(0, r.bottom() + 2, width(), r.bottom() + 2);
- }
-
- QPointF topLeft = r.center() - QPointF(mAddTabIcon.width() / 2, mAddTabIcon.height() / 2);
- painter.drawPixmap(topLeft, mAddTabIcon);
-
- painter.end();
-
- QTabWidget::paintEvent(event);
-}
-
+}
\ No newline at end of file
diff --git a/Sankore-3.1/src/web/browser/WBTabWidget.h b/Sankore-3.1/src/web/browser/WBTabWidget.h
index 76bc2b6..5600d0d 100644
--- a/Sankore-3.1/src/web/browser/WBTabWidget.h
+++ b/Sankore-3.1/src/web/browser/WBTabWidget.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
@@ -65,6 +66,8 @@
#define WBTABWIDGET_H
#include <QtGui>
+#include <QtWebKit>
+
/*
Tab bar with a few more features such as a context menu and shortcuts
*/
@@ -103,9 +106,6 @@ class WBTabBar : public QTabBar
QPoint mDragStartPos;
};
-#include <QtWebKit>
-
-
class WBWebView;
/*!
A proxy object that connects a single browser action
@@ -187,7 +187,6 @@ class WBTabWidget : public QTabWidget
void mouseDoubleClickEvent(QMouseEvent *event);
void contextMenuEvent(QContextMenuEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
- void paintEvent(QPaintEvent * event);
QRect addTabButtonRect();
public slots:
diff --git a/Sankore-3.1/src/web/browser/WBToolBarSearch.cpp b/Sankore-3.1/src/web/browser/WBToolBarSearch.cpp
index 2aed045..d21f98c 100644
--- a/Sankore-3.1/src/web/browser/WBToolBarSearch.cpp
+++ b/Sankore-3.1/src/web/browser/WBToolBarSearch.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBToolBarSearch.h b/Sankore-3.1/src/web/browser/WBToolBarSearch.h
index 8d41c33..e639118 100644
--- a/Sankore-3.1/src/web/browser/WBToolBarSearch.h
+++ b/Sankore-3.1/src/web/browser/WBToolBarSearch.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBTrapWebPageContent.cpp b/Sankore-3.1/src/web/browser/WBTrapWebPageContent.cpp
new file mode 100644
index 0000000..2768066
--- /dev/null
+++ b/Sankore-3.1/src/web/browser/WBTrapWebPageContent.cpp
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "WBTrapWebPageContent.h"
+
+#include "core/UBApplication.h"
+#include "core/UBApplicationController.h"
+#include "gui/UBMainWindow.h"
+
+ WBTrapWebPageContentWindow::WBTrapWebPageContentWindow(QObject *controller, QWidget *parent)
+ : QDialog(parent)
+ , mController(controller)
+{
+ setModal(true);
+ resize(800, 600);
+ setObjectName("WBTrapWebPageContentWindow");
+ setStyleSheet("QWidget#WBTrapWebPageContentWindow{background-color: rgb(225,225,225)");
+
+ mTrapApplicationVLayout = new QVBoxLayout();
+ mTrapApplicationVLayout->setSpacing(0);
+ mTrapApplicationVLayout->setContentsMargins(1,1,1,1);
+ setLayout(mTrapApplicationVLayout);
+
+ mTrapApplicationHLayout = new QHBoxLayout(this);
+ mTrapApplicationHLayout->setContentsMargins(0,0,0,0);
+ mTrapApplicationHLayout->setSpacing(0);
+
+ QList<QLabel *> buttonLabels;
+
+ QToolButton *buttonWebTrapToLibrary = new QToolButton();
+ buttonWebTrapToLibrary->setDefaultAction(UBApplication::mainWindow->actionWebTrapToLibrary);
+ buttonLabels << new QLabel(tr("Download to\nlibrary"));
+ mTrapButtons << buttonWebTrapToLibrary;
+
+ QToolButton *buttonWebTrapToCurrentPage = new QToolButton();
+ buttonWebTrapToCurrentPage->setDefaultAction(UBApplication::mainWindow->actionWebTrapToCurrentPage);
+ buttonLabels << new QLabel(tr("Download to\ncurrent page"));
+ mTrapButtons << buttonWebTrapToCurrentPage;
+
+ QToolButton *buttonWebTrapLinkToLibrary = new QToolButton();
+ buttonWebTrapLinkToLibrary->setDefaultAction(UBApplication::mainWindow->actionWebTrapLinkToLibrary);
+ buttonLabels << new QLabel(tr("Add link to\nlibrary"));
+ mTrapButtons << buttonWebTrapLinkToLibrary;
+
+ QToolButton *buttonWebTrapLinkToPage = new QToolButton();
+ buttonWebTrapLinkToPage->setDefaultAction(UBApplication::mainWindow->actionWebTrapLinkToPage);
+ buttonLabels << new QLabel(tr("Add link to\ncurrent page"));
+ mTrapButtons << buttonWebTrapLinkToPage;
+
+ QString buttonStileSheet("QToolButton#WBWebTrapToolButton{background-color: rgb(127, 127, 127, 20%)}");
+
+ QWidget *buttonsLayoutWidget = new QWidget();
+ buttonsLayoutWidget->setObjectName("WBWebTrapButtonsLayoutWidget");
+ buttonsLayoutWidget->setStyleSheet("QWidget#WBWebTrapButtonsLayoutWidget{border: 2px solid #999999; border-top-style: none; border-right-style: none}");
+ QVBoxLayout *buttonsLayout = new QVBoxLayout();
+ buttonsLayoutWidget->setLayout(buttonsLayout);
+ buttonsLayout->setAlignment(Qt::AlignTop);
+ buttonsLayout->setContentsMargins(7,3,7,3);
+
+ int minimumHeight = 85;
+ int minimumWidth = 140;
+ for (int i = 0; i < 4; i++)
+ {
+ QToolButton *button = mTrapButtons.at(i);
+ button->setObjectName("WBWebTrapToolButton");
+ button->setToolButtonStyle(Qt::ToolButtonIconOnly);
+ button->setIconSize(QSize(minimumWidth, minimumHeight));
+ button->setMinimumSize(QSize(minimumWidth, minimumHeight));
+ button->setMaximumSize(QSize(minimumWidth, minimumHeight));
+ button->setStyleSheet(buttonStileSheet);
+ button->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ button->defaultAction()->setEnabled(false);
+
+ QLabel *buttonLabel = buttonLabels.at(i);
+ buttonLabel->setMaximumWidth(minimumWidth);
+ buttonLabel->setTextFormat(Qt::PlainText);
+ buttonLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ buttonLabel->setAlignment(Qt::AlignHCenter);
+
+ QVBoxLayout *currentButtonWithLabelWayout = new QVBoxLayout();
+ currentButtonWithLabelWayout->setAlignment(Qt::AlignVCenter);
+ currentButtonWithLabelWayout->setContentsMargins(1,0,1,0);
+ currentButtonWithLabelWayout->addWidget(button);
+
+ currentButtonWithLabelWayout->addWidget(buttonLabel);
+ currentButtonWithLabelWayout->setSpacing(0);
+ buttonsLayout->addLayout(currentButtonWithLabelWayout);
+ }
+
+ QWidget *trapContentLayoutWidget = new QWidget();
+ trapContentLayoutWidget->setObjectName("WBWebTrapPreviewWidget");
+ trapContentLayoutWidget->setStyleSheet("QWidget#WBWebTrapPreviewWidget{border: 2px solid #999999; border-left-style: none; border-top-style: none; border-right-style: none}");
+ QVBoxLayout *trapContentVLayout = new QVBoxLayout();
+ trapContentVLayout->setContentsMargins(1,3,7,7);
+ trapContentVLayout->setSpacing(1);
+ trapContentLayoutWidget->setLayout(trapContentVLayout);
+
+ trapContentLayoutWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+
+ mSelectContentLayout = new QHBoxLayout();
+ trapContentVLayout->addLayout(mSelectContentLayout);
+
+ mSelectContentLabel = new QLabel(tr("Select content to trap:"));
+ mSelectContentLayout->addWidget(mSelectContentLabel);
+
+ mSelectContentCombobox = new QComboBox(this);
+ mSelectContentLayout->addWidget(mSelectContentCombobox);
+
+ mSelectContentCombobox->setMaxVisibleItems(15);
+ mSelectContentCombobox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+
+ mTrapContentPreview = new WBWebView();
+ trapContentVLayout->addWidget(mTrapContentPreview);
+
+ mTrapContentPreview->setMinimumSize(QSize(320, 240));
+ mTrapContentPreview->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+
+ mApplicationNameLayout = new QHBoxLayout();
+ trapContentVLayout->addLayout(mApplicationNameLayout);
+
+ mApplicationNameLabel = new QLabel(tr("Application name"));
+ mApplicationNameLayout->addWidget(mApplicationNameLabel);
+
+ mApplicationNameEdit = new QLineEdit();
+ mApplicationNameLayout->addWidget(mApplicationNameEdit);
+
+ mTrapApplicationHLayout->addWidget(trapContentLayoutWidget);
+ mTrapApplicationHLayout->addWidget(buttonsLayoutWidget);
+
+ mTrapApplicationVLayout->addLayout(mTrapApplicationHLayout);
+ QLabel *infoLabel1 = new QLabel(tr("Restriction and disclaimer. "));
+ QLabel *infoLabel2 = new QLabel(tr("This feature is developed to work on the most common web pages."));
+ QLabel *infoLabel3 = new QLabel(tr("Please respect copyrights for creating links or trapping content from the web."));
+
+
+ infoLabel1->setAlignment(Qt::AlignHCenter);
+ infoLabel2->setAlignment(Qt::AlignHCenter);
+ infoLabel3->setAlignment(Qt::AlignHCenter);
+
+ mTrapApplicationVLayout->addWidget(infoLabel1);
+ mTrapApplicationVLayout->addWidget(infoLabel2);
+ mTrapApplicationVLayout->addWidget(infoLabel3);
+
+ connect(mTrapContentPreview, SIGNAL(pixmapCaptured(const QPixmap&, bool)), UBApplication::applicationController, SLOT(addCapturedPixmap(const QPixmap &, bool)));
+ connect(mTrapContentPreview, SIGNAL(embedCodeCaptured(const QString&)), UBApplication::applicationController, SLOT(addCapturedEmbedCode(const QString&)));
+
+ connect(mSelectContentCombobox, SIGNAL(currentIndexChanged(int)), mController, SLOT(selectHtmlObject(int)));
+ connect(mApplicationNameEdit, SIGNAL(textChanged(const QString &)), mController, SLOT(text_Changed(const QString &)));
+ connect(mApplicationNameEdit, SIGNAL(textEdited(const QString &)), mController, SLOT(text_Edited(const QString &)));
+
+ connect(UBApplication::mainWindow->actionWebTrapToCurrentPage, SIGNAL(triggered()), mController, SLOT(addItemToBoard()));
+ connect(UBApplication::mainWindow->actionWebTrapToLibrary, SIGNAL(triggered()), mController, SLOT(addItemToLibrary()));
+ connect(UBApplication::mainWindow->actionWebTrapLinkToPage, SIGNAL(triggered()), mController, SLOT(addLinkToBoard()));
+ connect(UBApplication::mainWindow->actionWebTrapLinkToLibrary, SIGNAL(triggered()), mController, SLOT(addLinkToLibrary()));
+}
+
+WBTrapWebPageContentWindow::~WBTrapWebPageContentWindow()
+{
+
+}
+
+void WBTrapWebPageContentWindow::setUrl(const QUrl &url)
+{
+ mTrapContentPreview->setUrl(url);
+}
+
+void WBTrapWebPageContentWindow::setReadyForTrap(bool bReady)
+{
+ foreach (QToolButton *button, mTrapButtons)
+ {
+ button->defaultAction()->setEnabled(bReady);
+ }
+}
+
diff --git a/Sankore-3.1/src/web/browser/WBTrapWebPageContent.h b/Sankore-3.1/src/web/browser/WBTrapWebPageContent.h
new file mode 100644
index 0000000..2caddd7
--- /dev/null
+++ b/Sankore-3.1/src/web/browser/WBTrapWebPageContent.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
+ *
+ * This file is part of Open-Sankoré.
+ *
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
+ * with a specific linking exception for the OpenSSL project's
+ * "OpenSSL" library (or with modified versions of it that use the
+ * same license as the "OpenSSL" library).
+ *
+ * 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef WB_TRAP_WEB_PAGE_CONTENT_H
+#define WB_TRAP_WEB_PAGE_CONTENT_H
+
+#include <QtGui>
+#include <QWebView>
+
+#include "WBWebView.h"
+
+class WBTrapWebPageContentWindow : public QDialog
+{
+ Q_OBJECT
+
+ public:
+ WBTrapWebPageContentWindow(QObject *controller, QWidget *parent = NULL);
+ virtual ~WBTrapWebPageContentWindow();
+
+ void setUrl(const QUrl &url);
+ void setReadyForTrap(bool bReady);
+ QWebView *webView() const {return mTrapContentPreview;}
+ QComboBox *itemsComboBox() const {return mSelectContentCombobox;}
+ QLineEdit *applicationNameLineEdit() const {return mApplicationNameEdit;}
+
+ private:
+
+ QObject *mController;
+
+ QHBoxLayout *mTrapApplicationHLayout;
+ QVBoxLayout *mTrapApplicationVLayout;
+ QHBoxLayout *mSelectContentLayout;
+ QLabel *mSelectContentLabel;
+ QComboBox *mSelectContentCombobox;
+
+ WBWebView *mTrapContentPreview;
+ UBWebTrapMouseEventMask *mTrapingWidgetMask;
+
+ QHBoxLayout *mApplicationNameLayout;
+ QLabel *mApplicationNameLabel;
+ QLineEdit *mApplicationNameEdit;
+ QToolButton *mShowDisclaimerToolButton;
+ QList<QToolButton *> mTrapButtons;
+ QWebHitTestResult mLastHitTestResult;
+
+};
+
+#endif //WB_TRAP_WEB_PAGE_CONTENT_H
diff --git a/Sankore-3.1/src/web/browser/WBUrlLineEdit.cpp b/Sankore-3.1/src/web/browser/WBUrlLineEdit.cpp
index aa143f8..00e38c0 100644
--- a/Sankore-3.1/src/web/browser/WBUrlLineEdit.cpp
+++ b/Sankore-3.1/src/web/browser/WBUrlLineEdit.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBUrlLineEdit.h b/Sankore-3.1/src/web/browser/WBUrlLineEdit.h
index d9519b3..a98dfa9 100644
--- a/Sankore-3.1/src/web/browser/WBUrlLineEdit.h
+++ b/Sankore-3.1/src/web/browser/WBUrlLineEdit.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBWebTrapWebView.cpp b/Sankore-3.1/src/web/browser/WBWebTrapWebView.cpp
index 3911585..471c968 100644
--- a/Sankore-3.1/src/web/browser/WBWebTrapWebView.cpp
+++ b/Sankore-3.1/src/web/browser/WBWebTrapWebView.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#include "WBWebTrapWebView.h"
#include <QtGui>
@@ -37,7 +38,8 @@ WBWebTrapWebView::WBWebTrapWebView(QWidget* parent)
: QWebView(parent)
, mCurrentContentType(Unknown)
, mIsTrapping(false)
- , mTrapingWidget(0)
+ , m_bContentForTrapSelected(false)
+ , m_bScrollingInProcess(false)
{
connect(this, SIGNAL(loadFinished ( bool)), this, SLOT(viewLoadFinished(bool)));
}
@@ -45,7 +47,6 @@ WBWebTrapWebView::WBWebTrapWebView(QWidget* parent)
WBWebTrapWebView::~WBWebTrapWebView()
{
- delete mTrapingWidget;
}
@@ -55,43 +56,15 @@ void WBWebTrapWebView::setIsTrapping(bool pIsTrapping)
mDomElementRect = QRect();
mCurrentContentType = Unknown;
-/*
-#if defined(Q_WS_WIN)
-
- if(mIsTrapping)
- {
- if (!mTrapingWidget)
- {
- mTrapingWidget = new UBWebTrapMouseEventMask(this);
- mTrapingWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
- mTrapingWidget->setAttribute(Qt::WA_TranslucentBackground, true);
- }
-
- QPoint topLeft = mapToGlobal (geometry().topLeft());
- QRect geom(topLeft.x(), topLeft.y(), geometry().width(), geometry().height());
-
- mTrapingWidget->setGeometry(geom);
- mTrapingWidget->setVisible(true);
-
- }
- else if (mTrapingWidget)
- {
- mTrapingWidget->setVisible(false);
- }
-
-#endif
-*/
update();
}
void WBWebTrapWebView::hideEvent ( QHideEvent * event )
{
- setIsTrapping(false);
QWebView::hideEvent(event);
}
-
void WBWebTrapWebView::highliteElementAtPos ( const QPoint& pos)
{
mCurrentContentType = Unknown;
@@ -251,6 +224,11 @@ QString WBWebTrapWebView::potentialEmbedCodeAtPos(const QPoint& pos)
}
+void WBWebTrapWebView::trapContentFromHitTest(const QWebHitTestResult& hitTest)
+{
+ trapElementAtPos(hitTest.pos());
+}
+
void WBWebTrapWebView::trapElementAtPos(const QPoint& pos)
{
QWebHitTestResult htr = page()->currentFrame()->hitTestContent(pos);
@@ -307,27 +285,37 @@ void WBWebTrapWebView::trapElementAtPos(const QPoint& pos)
}
}
+bool WBWebTrapWebView::isFrameContentAtPos(const QPoint &pos) const
+{
+ return !page()->mainFrame()->scrollBarGeometry(Qt::Vertical).contains(pos)
+ && !page()->mainFrame()->scrollBarGeometry(Qt::Horizontal).contains(pos);
+}
void WBWebTrapWebView::mouseMoveEvent ( QMouseEvent * event )
{
- if (mIsTrapping)
+ if (mIsTrapping && !m_bScrollingInProcess)
{
- highliteElementAtPos(event->pos());
+ // NOOP - avoid event routing to web kit (accept is not enough)
}
else
{
+
QWebView::mouseMoveEvent(event);
}
}
void WBWebTrapWebView::mousePressEvent(QMouseEvent* event)
{
- if (mIsTrapping)
+
+ if (mIsTrapping && isFrameContentAtPos(event->pos()))
{
- // NOOP - avoid event routing to web kit (accept is not enough)
+ highliteElementAtPos(event->pos());
}
else
{
+ if (mIsTrapping)
+ m_bScrollingInProcess = true;
+
QWebView::mousePressEvent(event);
}
}
@@ -339,12 +327,15 @@ void WBWebTrapWebView::mouseReleaseEvent ( QMouseEvent * event )
//qDebug() << "mouse release" << event->pos();
- if (mIsTrapping)
+ if (!m_bScrollingInProcess && mIsTrapping && isFrameContentAtPos(event->pos()))
{
- trapElementAtPos(event->pos());
+ m_bContentForTrapSelected = true;
+ // trapElementAtPos(event->pos());
}
else
{
+ m_bScrollingInProcess = false;
+
QWebView::mouseReleaseEvent(event);
}
@@ -438,7 +429,6 @@ void WBWebTrapWebView::paintEvent ( QPaintEvent * event )
}
-
void WBWebTrapWebView::viewLoadFinished ( bool ok )
{
Q_UNUSED(ok);
@@ -448,9 +438,19 @@ void WBWebTrapWebView::viewLoadFinished ( bool ok )
UBWebTrapMouseEventMask::UBWebTrapMouseEventMask(WBWebTrapWebView* pWebView)
- : mTrappedWebView(pWebView)
+ : QWidget(pWebView)
+ , mTrappedWebView(pWebView)
+ , mTrapController(NULL)
{
- setMouseTracking(true);
+
+}
+
+UBWebTrapMouseEventMask::UBWebTrapMouseEventMask(WBWebTrapWebView* pWebView, UBTrapWebPageContentController *controller)
+ : QWidget(pWebView)
+ , mTrappedWebView(pWebView)
+ , mTrapController(controller)
+{
+
}
UBWebTrapMouseEventMask::~UBWebTrapMouseEventMask()
@@ -462,7 +462,8 @@ void UBWebTrapMouseEventMask::mousePressEvent(QMouseEvent* event)
{
if (mTrappedWebView && mTrappedWebView->isTrapping())
{
- // NOOP
+ mTrappedWebView->highliteElementAtPos(event->pos());
+ mTrappedWebView->trapElementAtPos(event->pos());
}
else
{
@@ -473,11 +474,7 @@ void UBWebTrapMouseEventMask::mousePressEvent(QMouseEvent* event)
void UBWebTrapMouseEventMask::mouseMoveEvent ( QMouseEvent * event )
{
- if (mTrappedWebView && mTrappedWebView->isTrapping())
- {
- mTrappedWebView->highliteElementAtPos(event->pos());
- }
- else
+ if (!mTrappedWebView && !mTrappedWebView->isTrapping())
{
QWidget::mouseMoveEvent(event);
}
@@ -486,11 +483,11 @@ void UBWebTrapMouseEventMask::mouseMoveEvent ( QMouseEvent * event )
void UBWebTrapMouseEventMask::mouseReleaseEvent ( QMouseEvent * event )
{
- if (mTrappedWebView && mTrappedWebView->isTrapping())
- {
- mTrappedWebView->trapElementAtPos(event->pos());
- }
- else
+ //if (mTrappedWebView && mTrappedWebView->isTrapping())
+ //{
+ //mTrappedWebView->trapElementAtPos(event->pos());
+ //}
+ //else
{
QWidget::mouseReleaseEvent(event);
}
diff --git a/Sankore-3.1/src/web/browser/WBWebTrapWebView.h b/Sankore-3.1/src/web/browser/WBWebTrapWebView.h
index bdeedc9..7047afa 100644
--- a/Sankore-3.1/src/web/browser/WBWebTrapWebView.h
+++ b/Sankore-3.1/src/web/browser/WBWebTrapWebView.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
#ifndef WBWEBTRAPWEBVIEW_H_
#define WBWEBTRAPWEBVIEW_H_
@@ -29,7 +30,7 @@
class WBWebTrapWebView : public QWebView
{
- Q_OBJECT;
+ Q_OBJECT
public:
WBWebTrapWebView(QWidget* parent = 0);
@@ -43,6 +44,7 @@ class WBWebTrapWebView : public QWebView
}
void highliteElementAtPos(const QPoint& pos);
+ void trapContentFromHitTest(const QWebHitTestResult& hitTest);
void trapElementAtPos(const QPoint& pos);
signals:
@@ -53,8 +55,10 @@ class WBWebTrapWebView : public QWebView
void webElementCaptured(const QUrl& pUrl, const QString& query);
- protected:
+ private:
+ bool isFrameContentAtPos(const QPoint &point) const;
+ protected:
virtual void mousePressEvent(QMouseEvent* event);
virtual void mouseMoveEvent ( QMouseEvent * event );
virtual void mouseReleaseEvent ( QMouseEvent * event );
@@ -76,19 +80,18 @@ class WBWebTrapWebView : public QWebView
WebContentType mCurrentContentType;
bool mIsTrapping;
-
- QWidget* mTrapingWidget;
+ bool m_bContentForTrapSelected;
+ bool m_bScrollingInProcess;
private slots:
-
void viewLoadFinished(bool ok);
};
-
-
+class UBTrapWebPageContentController;
class UBWebTrapMouseEventMask : public QWidget
{
public:
UBWebTrapMouseEventMask(WBWebTrapWebView* pWebView);
+ UBWebTrapMouseEventMask(WBWebTrapWebView* pWebView, UBTrapWebPageContentController *controller);
virtual ~UBWebTrapMouseEventMask();
protected:
@@ -100,6 +103,7 @@ class UBWebTrapMouseEventMask : public QWidget
private:
WBWebTrapWebView *mTrappedWebView;
+ UBTrapWebPageContentController *mTrapController;
};
#endif /* WBWEBTRAPWEBVIEW_H_ */
diff --git a/Sankore-3.1/src/web/browser/WBWebView.cpp b/Sankore-3.1/src/web/browser/WBWebView.cpp
index d37483f..e943e5f 100644
--- a/Sankore-3.1/src/web/browser/WBWebView.cpp
+++ b/Sankore-3.1/src/web/browser/WBWebView.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/browser/WBWebView.h b/Sankore-3.1/src/web/browser/WBWebView.h
index 3a583d1..413506f 100644
--- a/Sankore-3.1/src/web/browser/WBWebView.h
+++ b/Sankore-3.1/src/web/browser/WBWebView.h
@@ -1,11 +1,11 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
* Open-Sankoré is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License,
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
@@ -20,6 +20,7 @@
*/
+
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
diff --git a/Sankore-3.1/src/web/web.pri b/Sankore-3.1/src/web/web.pri
index 0b447ef..1f32e29 100644
--- a/Sankore-3.1/src/web/web.pri
+++ b/Sankore-3.1/src/web/web.pri
@@ -26,7 +26,8 @@ HEADERS += src/web/UBWebController.h \
src/web/browser/WBUrlLineEdit.h \
src/web/browser/WBWebView.h \
src/web/browser/WBHistory.h \
- src/web/browser/WBWebTrapWebView.h
+ src/web/browser/WBWebTrapWebView.h \
+ src/web/browser/WBTrapWebPageContent.h
SOURCES += src/web/UBWebController.cpp \
@@ -47,7 +48,9 @@ SOURCES += src/web/UBWebController.cpp \
src/web/browser/WBUrlLineEdit.cpp \
src/web/browser/WBWebView.cpp \
src/web/browser/WBHistory.cpp \
- src/web/browser/WBWebTrapWebView.cpp\
+ src/web/browser/WBWebTrapWebView.cpp \
+ src/web/browser/WBTrapWebPageContent.cpp
+
diff --git a/Sankore-3.1/tools/CrashReportViewer/CrashReporterSymbolSupplier.cpp b/Sankore-3.1/tools/CrashReportViewer/CrashReporterSymbolSupplier.cpp
index bf66d73..47ccc10 100644
--- a/Sankore-3.1/tools/CrashReportViewer/CrashReporterSymbolSupplier.cpp
+++ b/Sankore-3.1/tools/CrashReportViewer/CrashReporterSymbolSupplier.cpp
@@ -1,23 +1,22 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
diff --git a/Sankore-3.1/tools/CrashReportViewer/CrashReporterSymbolSupplier.h b/Sankore-3.1/tools/CrashReportViewer/CrashReporterSymbolSupplier.h
index ae7ebb6..91568b9 100644
--- a/Sankore-3.1/tools/CrashReportViewer/CrashReporterSymbolSupplier.h
+++ b/Sankore-3.1/tools/CrashReportViewer/CrashReporterSymbolSupplier.h
@@ -1,26 +1,26 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
+
#ifndef CRASHREPORTERSYMBOLSUPPLIER_H_
#define CRASHREPORTERSYMBOLSUPPLIER_H_
diff --git a/Sankore-3.1/tools/CrashReportViewer/CrashWindow.cpp b/Sankore-3.1/tools/CrashReportViewer/CrashWindow.cpp
index f7ca2c1..82a9955 100644
--- a/Sankore-3.1/tools/CrashReportViewer/CrashWindow.cpp
+++ b/Sankore-3.1/tools/CrashReportViewer/CrashWindow.cpp
@@ -1,26 +1,24 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
#include "CrashWindow.h"
#include "ui_CrashReportViewer.h"
#include "CrashReporterSymbolSupplier.h"
diff --git a/Sankore-3.1/tools/CrashReportViewer/CrashWindow.h b/Sankore-3.1/tools/CrashReportViewer/CrashWindow.h
index d7e5c57..5a0acfb 100644
--- a/Sankore-3.1/tools/CrashReportViewer/CrashWindow.h
+++ b/Sankore-3.1/tools/CrashReportViewer/CrashWindow.h
@@ -1,23 +1,22 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
diff --git a/Sankore-3.1/tools/CrashReportViewer/main.cpp b/Sankore-3.1/tools/CrashReportViewer/main.cpp
index f05ec80..3a74c16 100644
--- a/Sankore-3.1/tools/CrashReportViewer/main.cpp
+++ b/Sankore-3.1/tools/CrashReportViewer/main.cpp
@@ -1,26 +1,26 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
+
#include <QtGui>
#include "CrashWindow.h"
#include "client/mac/handler/exception_handler.h"
diff --git a/Sankore-3.1/tools/pdf2image/core/UBPlatformUtils.cpp b/Sankore-3.1/tools/pdf2image/core/UBPlatformUtils.cpp
index 5e7404d..12d5b38 100644
--- a/Sankore-3.1/tools/pdf2image/core/UBPlatformUtils.cpp
+++ b/Sankore-3.1/tools/pdf2image/core/UBPlatformUtils.cpp
@@ -1,23 +1,22 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
diff --git a/Sankore-3.1/tools/pdf2image/core/UBPlatformUtils.h b/Sankore-3.1/tools/pdf2image/core/UBPlatformUtils.h
index 67f9176..dc916cc 100644
--- a/Sankore-3.1/tools/pdf2image/core/UBPlatformUtils.h
+++ b/Sankore-3.1/tools/pdf2image/core/UBPlatformUtils.h
@@ -1,26 +1,24 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
-
#include <QString>
class UBPlatformUtils
diff --git a/Sankore-3.1/tools/pdf2image/pdf2image.cpp b/Sankore-3.1/tools/pdf2image/pdf2image.cpp
index 289cc06..9dc3164 100644
--- a/Sankore-3.1/tools/pdf2image/pdf2image.cpp
+++ b/Sankore-3.1/tools/pdf2image/pdf2image.cpp
@@ -1,23 +1,22 @@
/*
- * Copyright (C) 2012 Webdoc SA
+ * Copyright (C) 2010-2013 Groupement d'Intérêt Public pour l'Education Numérique en Afrique (GIP ENA)
*
* This file is part of Open-Sankoré.
*
- * Open-Sankoré is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation, version 2,
+ * Open-Sankoré is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License,
* with a specific linking exception for the OpenSSL project's
* "OpenSSL" library (or with modified versions of it that use the
* same license as the "OpenSSL" library).
*
* 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 GNU
- * Library General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- * You should have received a copy of the GNU Library General Public
- * License along with Open-Sankoré; if not, see
- * <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
*/
hooks/post-receive
--
sankore.git (Debian package sankore)
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "sankore.git" (Debian package sankore).
More information about the debian-edu-commits
mailing list